1. 程式人生 > >Mongo 學習筆記--Capped Collection

Mongo 學習筆記--Capped Collection

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

簡單介紹

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建立。