天天看点

dream feature coming from mongodb 2.0

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