rpm简介

rpm( Red Hat Package Manager )是一个开放的软件包管理系统。它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准。

rpm将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作

rpm维护一个所有已安装的软件包和文件的数据库,可以让用户进行功能强大的软件包查询和验证工作。

在rpm学习前我们需要知道其它一些知识点来辅助学习:RPM学习第一篇



rpm软件包的命名格式

rpm包的命名格式一般有两部分组成。

  第一部分是源代码版本号。比如:

name-VERSION.tar.gz

  name:源代码包的名称

  VERSION: major.minor.release 

    major: 主版本号,一般程序功能有重大改变才会变动

    minor: 次版本号,程序功能某个小的分支有变动,才会变动

    release: 发行号,修正了某个BUG或升级了某段代码,才会变动

  

   第二部分是rpm打包制作的版本

如果用源代码比作面粉,rpm包比作馒头,它们的区别在于: 面粉有不同的工艺,拿面粉又做出了各种可口的馒头。

这样最终的软件包就构成了:

name-VERSION-release.arch.rpm

其中

name-VERSION仍然沿用源代码包的命名

release : 是rpm包打包制作的发行号

arch:是指明适用于哪种操作系统平台,有i386, x64(amd64), ppc, noarch等



获取包的方法

除了系统发行版的光盘自带的rpm软件包外,通常还需要到网上下载,下面是几个可信的获取软件包的途径

(1) 官方的文件服务器(或镜像站点)

http://mirrors.aliyum.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目的官方站点

(3) 第三方组织

(a) EPEL

(b) 搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

下载后建议先检查程序包的合法性和完整性。(4) 自己动手编译



rpm命令使用

安装:-i, --install        

升级:-U, --update, -F, --freshen

卸载:-e, --erase

查询:-q, --query

验证:-V, --verify

数据库维护:--builddb, –initdb

包的来源合法性验证和完整性验证: -K , --import



No1、安装

命令格式:

    rpm {-i|--install} [install-options] PACKAGE_FILE ...

 通用选项

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]

-h:hash marks输出进度条,每个#表示2%的进度

--test:测试安装,检查并报告依赖关系及冲突消息等

--nodeps:忽略依赖关系;不建议使用

--replacepkgs:强制重新安装已经安装的软件包  【这种安装,其配置文件可能不会安装,也有可能把原来的配置文件覆盖了】

--nosignature:不检查包签名信息,不检查来源合法性

--nodigest:不检查包完整性信息

注意:每一个程序安装时可能会运行脚本,做一些准备操作。rpm包可以自带脚本,这些脚本有四类(四类脚本不一定会全部带上),分别在不同的时刻被触发,分别是:

preinstall : 安装过程开始之前运行的脚本,%pre , --nopre

postinstall : 安装过程完成之后运行的脚本,%post , --nopost

preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun, --nopreun

postuninstall : 卸载过程完成之后运行的脚本,%postun , --nopostun

常用命令:

    rpm  -ivh  PACKAGE_FILE ...

-------------------------------------------------------------

-------------------------------------------------------------

示例:

1、测试安装:

1 [root@oldboy mnt]# rpm -ivh --test mysql-5.1.73-5.el6_6.x86_64.rpm
2 warning: mysql-5.1.73-5.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]#

2、正常安装:

1 [root@oldboy mnt]# rpm -ivh python-2.6.6-64.el6.x86_64.rpm
2 warning: python-2.6.6-64.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package python-2.6.6-64.el6.x86_64 is already installed
5 [root@oldboy mnt]#

【注意:该warning是没有对包进行合法验证】

3、测试安装,且忽略依赖关系:

 1 [root@oldboy mnt]# rpm -ivh --test php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 error: Failed dependencies:
4 libodbc.so.2()(64bit) is needed by php-odbc-5.3.3-40.el6_6.x86_64
5 php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-odbc-5.3.3-40.el6_6.x86_64
6 php-pdo(x86-64) is needed by php-odbc-5.3.3-40.el6_6.x86_64
7 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
8 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
9 Preparing... ########################################### [100%]
10 [root@oldboy mnt]#
11
12 rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm

4、强制重新安装

 1 [root@oldboy mnt]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm
2 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package zsh-4.3.11-4.el6.centos.x86_64 is already installed
5 [root@oldboy mnt]# rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm

5、安装时候不检查包的来源合法性

1 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]# rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm


No2、升级

命令格式:

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

注意事项:

-U|--upgrade:如果没有旧版程序包,则安装程序包;如果有旧版程序包,则升级程序包
-F:仅升级,如果没有旧版程序包,则不执行任何操作  【好像不支持降级功能】

通用选项:

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]:

-h:hash marks输出进度条,每个#表示2%的进度

--test:只进行升级测试

--nodeps:忽略依赖关系;不建议使用

--nosignature:不检查包签名信息,不检查来源合法性

--oldpackage:降级,如果新版本存在很多问题,就要用到降级  【注意:-F好像不支持降级功能】

--force:强制升级,如果新版本不再为其它程序提供依赖服务,这时会报错,可用强制升级

注意:

  (1) 内核升级可能会有若然隐患问题,所以不要对内核进行升级,如果要测试新版本内核,可用直接安装新版本内核,让与老版本并存。

  (2) 如果某程序包在安装后配置文件曾做过修改,在升级时,新版本程序提供的同名配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名( FILENAME.rpmnew )后提供。

常用命令:    

    rpm -Uvh PACKAGE_FILE ...
     rpm -Fvh PACKAGE_FILE ...

--------------------------------------------------------------------------

--------------------------------------------------------------------------

示例:

1、-U和-F的区别

1 [root@oldboy mnt]# rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 [root@oldboy mnt]# rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
4 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm / rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm

2、当老版本存在,升级"老版本"

1 [root@oldboy mnt]# rpm -q zsh
2 zsh-4.3.11-4.el6.centos.x86_64
3 [root@oldboy mnt]# rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm
4 warning: zsh-5.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
5 Preparing... ########################################### [100%]
6 1:zsh ########################################### [100%]
7 [root@oldboy mnt]#
8
9 rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm

3、降级新版本

 1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -Fvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm [-F 好像不支持降级功能]
4 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 [root@oldboy mnt]# rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm


No3、卸载

命令格式:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...      

注意:这里的PACKAGE NAME  指的是包名,不是包的全名。

选项:

--allmatches:卸载所有匹配指定名称的程序包的各版本,即删除系统里有同一程序的多个安装版本

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

--noscripts:

---------------------------------------------------------

---------------------------------------------------------

示例:

1、卸载包

1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -e zsh-5.0.2-28.el7.x86_64
4 [root@oldboy mnt]# rpm -q zsh
5 package zsh is not installed
6 [root@oldboy mnt]#
7
8 rpm -e zsh-5.0.2-28.el7.x86_64


四、查询

命令格式:

    rpm {-q|--query} [select-options] [query-options] 

其中

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本

-a, --all:列出所有已经安装过的包

-f FILE:查询指定的文件由哪个程序包安装生成

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

[query-options]

--changelog:查询rpm包的changlog,注意非源码包的历史修订

-l, --list:程序安装生成的所有文件列表

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等

-c, --configfiles:查询指定的程序包提供的配置文件

-d, --docfiles:查询指定的程序包提供的文档

--provides:列出指定的程序包提供的所有CAPABILITY

-R, --requires:查询指定的程序包所依赖的CAPABILITY

--scripts:查看程序包自带的脚本片断

常见组合用法:

查询已安装包的信息【后直接接包名就可实现】

  -qi PACKAGE //查询程序包information

  -qf FILE //查询文件由哪个程序包生成

  -qc PACKAGE //查询程序包的配置文件

  -ql PACKAGE //查询程序包生成的文件列表

  -qd PACKAGE //查询程序包安装后生成的文档

查询为安装包的信息【后接包的全名】

  -qpi PACKAGE_FILE //查询未安装程序包的information

  -qpl PACKAGE_FILE //查询未安装程序包将要生成的文件列表

  -qpc PACKAGE_FILE, ... //查询未安装程序包将要提供的配置文件

示例:

1、查询bash软件包提供的所有CAPABILITY  【需要理解】

 1 [root@oldboy mnt]# rpm -q --provides bash
2 config(bash) = 4.1.2-33.el6
3 bash = 4.1.2-33.el6
4 bash(x86-64) = 4.1.2-33.el6
5 [root@oldboy mnt]# rpm -q --provides mysql
6 mysql = 5.1.73-5.el6_6
7 mysql(x86-64) = 5.1.73-5.el6_6
8 [root@oldboy mnt]# rpm -q --provides zsh
9 config(zsh) = 5.0.2-28.el7
10 zsh = 5.0.2-28.el7
11 zsh(x86-64) = 5.0.2-28.el7
12 [root@oldboy mnt]# rpm -q --whatprovides 'config(bash)'
13 bash-4.1.2-33.el6.x86_64
14 [root@oldboy mnt]# rpm -q --whatprovides 'bash(x86-64)'
15 bash-4.1.2-33.el6.x86_64
16 [root@oldboy mnt]# rpm -q --whatprovides 'bash'
17 bash-4.1.2-33.el6.x86_64
18 [root@oldboy mnt]#

2、查询sed软件包所依赖的CAPABILITY

 1 [root@oldboy mnt]# rpm -qR sed
2 /bin/sh
3 /bin/sh
4 /sbin/install-info
5 /sbin/install-info
6 libc.so.6()(64bit)
7 libc.so.6(GLIBC_2.2.5)(64bit)
8 libc.so.6(GLIBC_2.3)(64bit)
9 libc.so.6(GLIBC_2.3.4)(64bit)
10 libc.so.6(GLIBC_2.4)(64bit)
11 libselinux.so.1()(64bit)
12 rpmlib(CompressedFileNames) <= 3.0.4-1
13 rpmlib(FileDigests) <= 4.6.0-1
14 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
15 rtld(GNU_HASH)
16 rpmlib(PayloadIsXz) <= 5.2-1
17 [root@oldboy mnt]#
18
19 rpm -qR sed

3、查询未安装php-common软件包的配置文件

 1 [root@oldboy mnt]# rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-common-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 /etc/php.d/curl.ini
4 /etc/php.d/fileinfo.ini
5 /etc/php.d/json.ini
6 /etc/php.d/phar.ini
7 /etc/php.d/zip.ini
8 /etc/php.ini
9
10 rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm

4、查询系统中安装了哪些rpm包: rpm -qa

5、查找所有安装过的包含某个字符串sql的软件包: rpm -qa | grep sql

6、查询MySQL软件包中的文件安装到那里去了:rpm -qa MySQL

7、查询XX.rpm中包含那些文件。

  • 一个没有安装过的软件包,使用rpm -qlp XX.rpm
  • 一个已经安装过的软件包,还可以使用rpm -ql XX.rpm

8、查询某个程序是哪个软件包安装的:

  rpm -qf `/bin/sed`    #返回软件包的全名
  rpm -qif `/bin/sed` #返回软件包的有关信息
  rpm -qlf `/bin/sed` #返回软件包的文件列表


五、校验

命令格式:

    rpm {-V|--verify} [select-options] [verify-options]

【注意: 一般用于对软件包安装后,校验软件包所有的文件有没有发生修改。】

示例:

[root@oldboy mnt]# rpm -V zsh      //没有返回任何提示,即校验通过

[root@oldboy mnt]# vim /usr/share/zsh/5.0.2/functions/send-invisible   //往zsh包的配置文件添加了几个字符

[root@oldboy mnt]# rpm -V zsh

S.5....T. /usr/share/zsh/5.0.2/functions/send-invisible  //这次,就显示被修改过了


如果一切都被校验正确,屏幕上就不会显示输出。如果出现有修改,相关信息就会被显示至屏幕。输出的格式中,单用“ . ” 表示测试通过,如果是下列字符则代表某类测试失败:

5: MD5校验和

S: 文件大小

L: 符号链接

T: 文件修改时间

D: 设备

U: 用户

G: 组群

M: 模式( 包含权限和文件类型 )

?: 不可读文件



六、.数据库重建  --> 仅管理员才能操作,目前还不知道怎么用??

rpm管理器数据库路径:

  /var/lib/rpm/

所有的rpm查询操作都是通过此处的数据库进行的。

命令格式:

    rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

其中:

--initdb:初始化数据库。如果事先不存在数据库,则新建之;否则,不执行任何操作
--rebuilddb:重新构建。无论当前存在与否,直接重建数据库



No7.包来源合法性验证和完整性验证 --> 这一步需要在包安装之前进行

在上面演示的图片中,在每次安装软件包时都会有一个警告信息。软件包在打包制作时,会附加上用单向加密了的软件包自身的特征码,只有与之对应的公钥才能解密验证包的合法性并得到特征码,再利用特征码验证软件包的完整性。由于在本地没有对应的公钥所以才会出现上面的警告信息。这时需要获取公钥,公钥的获取很关键,直接关系着软件包的来源合法性。

注意:

  1、在可靠站点下的程序包一般我们获取不到公钥,所以就无法进行来源合法性验证,所以最好使用系统光盘自带的rpm程序包。

  2、如果是系统光盘自带的rpm程序包的话,想要进行来源合法性验正的话,直接导入公钥再验证

首先要获取并导入信任的包制作者的密钥,对于CentOS发行版来说:

  系统在安装完成后,系统会自动复制一份公钥至/etc/pki/rpm-gpg/ 下,用命令导入公钥,如下:

1
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

  还有一种就是把密钥路径指向发行版光盘

1
[root@localhost ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7

接下来安装软件包时系统就可以自动验证了。

还可以在安装软件包前,手动验证:

1
[root@localhost ~]# rpm -K zsh-5.0.2-7.e17.x86_64.rpm

  关于包合法性验证还可以查看博客:链接地址

 

【程序包管理】Linux程序包管理之rpm安装总结的更多相关文章

  1. Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

    任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...

  2. 操作系統3-內存管理(Linux內存管理)

    操作系統3-內存管理(Linux系統的內存管理方法) 9.Linux系統的內存管理方法 Linux採用"按需調頁"算法,支持三層管理策略.由於Intel CPU在硬件級提供了段式存 ...

  3. windows程序员开发linux程序的头一个月

    开发环境选择 vim,vscode,qt,visual studio都可以做linux c++开发,但是作为windows程序员,最熟悉的还是visual stuio,加上visual studio ...

  4. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  5. Linux程序包管理之rpm

    rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...

  6. Linux程序包管理之yum及源代码安装

    第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...

  7. Linux程序包管理.md

    rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身 ...

  8. Linux程序包管理rpm与yum

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  9. Linux 程序包管理-RPM

    程序简介:  POSIX(Portable Openratin System)跨平台系统:不同操作系统平台的标准C库(glibc)都是遵循POSIX规范的,这样基于标准库开发程序的源代码可以夸平台编译 ...

  10. Linux程序包管理初步-rpm的使用

    在Linux系统上,一般而言,对于程序包管理器来说分为三类: debian:dpt,dpkg;             (程序包后缀.deb) rhel:rpm (程序包后缀.rpm) suse:rp ...

随机推荐

  1. 10、Spring Boot分布式

    1.分布式简介  2.Zookeeper和Dubbo  3.zookeeper (1).zookeeper安装 官方文档:https://hub.docker.com/_/zookeeper?tab= ...

  2. 深度学习论文翻译解析(十五):Densely Connected Convolutional Networks

    论文标题:Densely Connected Convolutional Networks 论文作者:Gao Huang Zhuang Liu Laurens van der Maaten  Kili ...

  3. CentOS6.5上增加中文字体库,确保前端WEB可以正常显示

    1 下载字体 可以在网上下载,也可以在 windows 目录下(C:\Windows\Fonts)找到对应字体,这里是从另一套系统上 copy simsun.ttf 文件. 2 查看当前系统中已安装的 ...

  4. 小样本学习最新综述 A Survey on Few-shot Learning | Introduction and Overview

    目录 01 Introduction Bridging this gap between AI and humans is an important direction. FSL can also h ...

  5. 强大的拉姆表达式转Sql 类库 - SqlSugar 隐藏功能之Lambda

    使用场景 1.Lambda to sql 一直是ORM中最难的功能之一,如果有现成的解析库那么自已写一个ORM难度将大大降低 2.通过Lambda作为KEY进行缓存操作,特别是仓储模式想要拿到表达式进 ...

  6. Thinkphp V5.X 远程代码执行漏洞 - POC(搬运)

    文章来源:lsh4ck's Blog 原文链接: https://www.77169.com/html/237165.html Thinkphp 5.0.22   http://192.168.1.1 ...

  7. DokcerFile的添加及如何生成一个自定义镜像mycentos(四)

    最近在学习Docker,用commit去生成一个镜像,但是生成后的镜像非常臃肿,所以去学习了一下DockerFile. 前提条件: 已在虚拟机中成功安装Docker 简单的理解可以如下图所示: Doc ...

  8. jquery.sticky 粘性滚动插件使用

    一个jQuery插件,使你能够做任何元素在您的网页上总是可见的,可以作为顶部固定导航显示插件. 官网地址:http://stickyjs.com/ github:https://github.com/ ...

  9. 「生产事故」MongoDB复合索引引发的灾难

    前情提要 11月末我司商品服务的MongoDB主库曾出现过严重抖动.频繁锁库等情况. 由于诸多业务存在插入MongoDB.然后立即查询等逻辑,因此项目并未开启读写分离. 最终定位问题是由于:服务器自身 ...

  10. Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

    Newbe.Claptrap 0.4.4 发布,模型验证器上线. 更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器.并实现了很多内置的验证方法. 我们罗列了与 F ...