mongodb 2.0已经发布,带来了许多令人振奋的特性,越来越像企业级的数据库了.
下面简单的介绍一下,
1. compact command
compact 命令主要的功能是重组collection,重建索引,类似整理碎片。2.0以前需要通过repair database来达到同样的目的,因此会中断全库的操作。compact 只中断单个collection的操作。同时compact操作不会被复制,因此在replica set环境,slave节点也需要做同样的操作才能达到整理碎片的目的。
3. default stack size
默认stack size值降低到1mb或者小于系统默认设置,当数据库被连接数量很大(如>1000个连接)是可以减少mongod线程的内存开销。
4. index performance enhancements
mongodb2.0的索引比以前来说,空间占用约减少25%,性能提升25%。在建立索引的时候需要加上{v:1}的标记位。如果不想使用新的索引格式,标记为{v:0}。因此如果加了{v:1}从2.0降级到1.8需要重建索引。
5. sharding authorizaiton
以前sharding是不支持auth的,会产生bug。现在支持了。
6. replica set enhancements
6.1 priorities
以前replica set支持的优先级只有0和1,即0不提升为primary,1可以提升为primary。现在的优先级范围是0到1000的浮点型数值。
例如:
a的优先级是4 (primary)
b的优先级是2
c的优先级是3
当a挂掉了,或者不可用。选举发生的时候,如果b和c的up-to-date一致 (并且与primary的数据差异在10秒内)。那么c会被选举为primary。
如果c和a的差异超过了10秒,那么b将被选举为primary。如果b和c都进入了up-to-date状态,但是b比较接近a,那么还是c被选举为primary。而b将产生一个rollback文件,需要手工rollback超过c的部分数据。
这里算是高可用的一个折中方案吧。对于数据要求严谨的可能不太适用。
6.2 datacenter awareness
这是一个令人期待的特性,在做系统架构设计时,可以考虑到数据库节点的地域分布,机架分布。给replica set里的每个member都打上1个或者多个tag。
利用这些tag,和getlasterror,可以控制这条dml操作需要在多少个打了某个你需要的tag的member里面成功之后才返回。
例如,
all of the rules up until now have only had one condition, but you can include as many and-conditions as you want. suppose we have the following:
server
tags
s1
{"continent" : "namerica", "copies" : "s1"}
s2
{"continent" : "namerica", "copies" : "s2"}
s3
{"continent" : "europe", "copies" : "s3"}
s4
{"continent" : "africa", "copies" : "s4"}
s5
{"continent" : "asia", "copies" : "s5"}
then create a mode like:
note that modes can contain as many clauses as you need.
6.3 w:"majority"
majority可以认为是少数服从多少的意思,如5个节点的replica set。majority就是3。
7. journal 增强
7.1 journal压缩后写入磁盘,缩短了写入时间,降低磁盘占用。
7.2
2.0开始,journalcommitinterval支持配置,默认是100ms。配置范围2到300毫秒。
其实这个journal有点类似postgresql在配置了synchronous_commit = off 时的wal_writer_delay 参数。
间隔多少时间做一次fsync,把journal的缓存写入到磁盘。
7.3
{j: true}
dml操作时可以使用这个参数,使用之后journal会被立即写入到磁盘,不必等待journalcommitinterval的发生。使用这个参数那么这笔dml操作即达到了acid的d的要求。
其他的可以参看release notes.
【参考】
http://www.mongodb.org/display/docs/2.0+release+notes