在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