MongoDB 2.2版本發(fā)布 并發(fā)性能增強
我們能夠看到,廣受詬病的全局鎖已經(jīng)在這一版中被拿掉,取而代之的是DB級別的鎖,而且collection 級別的鎖也不遠了。
下面就看看2.2 版本的幾個新功能吧:
1.并發(fā)性能增強
如上面所說,MongoDB 2.2版本中不再有凌駕于整個daemon上的全局鎖,而是將鎖的粒度減小到了DB級別。并且按MongoDB 的CEO Dwight Merriman所說,這次雖然沒有一步到位的將鎖粒度改到collection級別,但是從全局鎖到DB 鎖這一步,已經(jīng)完成了鎖粒度細化的最艱難部分工作,相信collection級別的讀寫鎖會很快到來。
除了減小鎖粒度外,MongoDB對2.0 版本中的鎖抑制功能也進行了一些增強,引入了PageFaultException 架構來進行鎖抑制的判定。
感興趣的朋友可以看看這個演講及PPT:http://www.10gen.com/presentations/concurrency-internals-mongodb-2-2
2.新的統(tǒng)計框架
統(tǒng)計操作一直不是MongoDB 的強項,這次版本MongoDB 對統(tǒng)計工作的易用性又進行了提升。在新的統(tǒng)計框架中,用戶不需要再使用mapreduce方法去進行數(shù)據(jù)統(tǒng)計,而是使用統(tǒng)計框架提供和各種方便易用的函數(shù)來實現(xiàn)。這個在NoSQLFan之前的文章中也有介紹,見:http://blog.nosqlfan.com/html/3648.html
3.Tag Aware Sharding
在2.2版本中,可以人為的對數(shù)據(jù)的分片方式進行一些控制,從而使得數(shù)據(jù)能放到合適的分片節(jié)點上(這里所謂的合適,通常來說就是數(shù)據(jù)離要使用它的應用層更近)。具體的做法是通過對分片節(jié)點打tag標識,再將sharding key 按范圍對應到這些標識上。比如我們設定sharding key在范圍 [a, b]之間時,數(shù)據(jù)需要放到tag為BeiJing的節(jié)點。在[b, c]之前,數(shù)據(jù)放到tag為TianJin的節(jié)點。然后我們再對不同的分片節(jié)點打上不同的tag。這樣對應sharding key在某個范圍內的數(shù)據(jù)就會在我們的控制下存儲到指定的分片節(jié)點上了。
詳見:http://www.mongodb.org/display/DOCS/Tag+Aware+Sharding
4.TTL的collection
我們知道,MongoDB的capped collection,它保持數(shù)據(jù)在一定大小和條數(shù)范圍內,在collection大小超量后,采用移除老數(shù)據(jù)的方式對空間進行循環(huán)利用。capped collection被大量使用在日志及隊列系統(tǒng)中,具有很高的性能,但是其靈活性一直不高。
在2.2版本中,MongoDB又引入了TTL collection(TTL == time to live),你可以在給某個字段建立索引的時候指定多長時間后刪除掉對應的記錄。建立索引的字段必須是date類型的。這樣我們就可以靈活的控制數(shù)據(jù)的過期,可以更方便的存儲和管理臨時數(shù)據(jù)。
詳見:http://docs.mongodb.org/manual/tutorial/expire-data/
更多介紹:http://docs.mongodb.org/manual/release-notes/2.2/
下載地址:http://www.mongodb.org/downloads
【編輯推薦】