一、固定集合(Capped Collection)
capped collections 是效能出色的有著固定大小的集合,以 LRU(Least Recently Used 最近最少使用)規則和插入順序進行 age-out(老化移出)處理,自動維護集合中對象的插入順序,在建立時要預先指定大小。如果空間用完,新添加的對象將會取代集合中最舊的對象。
可以插入及更新,但更新不能超出 collection 的大小,否則更新失敗。不允許刪除,但是可以調用 drop() 刪除集合中的所有行,但是 drop 後需要顯式地重建集合。
常見用處:
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 操作。
實際案例:
可以在建立 capped collection 時指定 collection 中能夠存放的最大文檔數。但這時也要指定 size,因為總是先檢查 size 後檢查 maxRowNumber。
可以使用 validate()查看一個 collection已經使用了多少空間,從而決定 size 設為多大。
下面我們建立一個集合:
db.createCollection('mycappc1',{capped:true,size:100000,max:10})
這是一個最多10行記錄的固定集合。