天天看點

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