簡單介紹
capped collections是效能出色的有著固定大小的集合(定容集合),以LRU(Least Recently Used最近最少使用)規則和插入順序進行 age-out(老化移出)處理,自動維護集合中對象的插入順序,在創 建時要預先指定大小。如果空間用完,新添加的對象將會取代集合中最舊的對象。
功能特點
可以插入及更新,但更新不能超出 collection 的大小,否則更新失敗。不允許刪除,但是可 以調用 drop() 刪除集合中的所有行,但是 drop 後需要顯式地重建集合。在 32 位機上,一 個capped collection的最大值約為482.5M,64 位元上只受系統檔案大小的限制。
常見用處
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操作。
注意事項
1.可以在建立capped collection時指定collection中能夠存放的最大文檔數。但這時也要指定size,因為總是先檢查size 後檢查maxRowNumber。可以使用validate()查看一個collection 已經使用了多少空間,從而決定size設為多大。
db.createCollection("mycoll", {capped:true, size:100000, max:100});
db.mycoll.validate();
max=1時會往collection中存放盡量多的documents。
2.上述的 createCollection 函數也可以用來建立一般的 collection,還有一個參數"autoIndexID",值可以為"true"和"false"來決定是否需要在"_id"欄位上自動建立索引,如: db.createCollection("mycoll", {size:10000000, autoIndexId:false})。 預設情況下對一般的collection是建立索引的,但不會對capped collection建立。