mongo capped collection功能介紹及使用注意事項

簡單介紹:
 在mongodb中,除了普通的collections,還有一種特殊的collections,叫做capped collections,他有點類似於myql 的ib_logfile,
 預先分配大小,插入時以先進先出的方式處理,自動維護集羣的大小和順序,寫入時如果不建索引和mysql的日誌寫入性能差不多,都是順序寫入;
 
 創建方式:
 db.createCollection;
function (name, opt) {
    var options = opt || {};
    var cmd = {create:name, capped:options.capped, size:options.size, max:options.max};
    if (options.autoIndexId != undefined) {
        cmd.autoIndexId = options.autoIndexId;
    }
    var res = this._dbCommand(cmd);
    return res;
}
5個參數
name:集合名字
capped:創建capped 集合必選
size:文件大小字節
max最大記錄數
autoIndexId如果指定爲true,會在_id上創建索引,默認情況下collection是創建索引的,但是capped collection不創建
在32爲機器上最大大小爲482M,在64爲機器上受文件系統限制;

查看已經使用了多少空間的函數
validate()
查看是否是固定集合
isCapped()
將普通集合轉換爲capped collection
db.runCommand({"convertToCapped":"mysqlcoll",size:1000})

使用約束
只能插入和更新,刪除需要使用drop()刪除所有行,刪除行數之後必須顯示重新創建;
如果試圖插入一個比size還大的集合會失敗
檢查大小是優先順序是先size後maxRowNumber
不能sharding


常見用處

1.logging
MongoDB 中日誌機制的首選,MongoDB 沒有使用日誌文件,而是把日誌事件存儲在數 據庫中。在一個沒有索引的capped collection中插入對象的速度與在文件系統中記錄日 志的速度相當。

2. cache
     緩存一些對象在數據庫中,比如計算出來的統計信息。這樣的需要在 collection 上建立 一個索引,因爲使用緩存往往是讀比寫多。

3. auto archiving  
可以利用capped collection的age-out特性,省去了寫cron腳本進行人工歸檔的工作。

推薦用法
1.爲了發揮capped collection的最大性能,如果寫比讀多,最好不要在上面建索引,否則插入速度從"log speed"降爲"database speed"。

2.使用"nature ordering"可以有效地檢索最近插入的元素,因爲capped collection能夠保證自然排序就是插入時的順序,類似於log文件上的tail操作


參考文獻

http://www.cnblogs.com/zhy4606/archive/2011/09/14/2175424.html

http://xiayuanfeng.iteye.com/blog/989024



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章