一 Capped Collection 簡介
Capped Collection 是一種特殊的集合,它大小固定,當集合的大小達到指定大小時,新資料覆蓋老資料。Capped collections可以按照文檔的插入順序儲存到集合中,而且這些文檔在磁碟上存放位置也是按照插入順序來儲存的,所以當我們更新Capped collections中文檔的時候,更新後的文檔不可以超過之前文檔的大小,這樣話就可以確保所有文檔在磁碟上的位置一直保持不變。
由於Capped collection是按照文檔的插入順序而不是使用索引確定插入位置,這樣的話可以提高增添資料的效率。MongoDB的動作記錄檔案oplog.rs就是利用Capped Collection來實現的。
除此之外,Capped Collection還有以下的一些特點,首先是不允許刪除,但是可以調用drop()刪除集合中的所有行,不許刪除的原因也是為了保持每個文檔在磁碟上的位置不變。在32位機器上一個capped collection的最大值約482.5M,64位上沒有限制系統檔案大小限制。不可以對 Capped Collection 進行分區,在 2.2 版本以後,建立的Capped Collection 預設在 _id 欄位上建立索引,而在 2.2 版本或以前沒有。
Capped Collection主要用於儲存日誌資訊和緩衝一些少用的文檔。
二 Capped Collection 使用
1.建立Capped Collection
> db.createCollection("mycoll",{capped:true,size:1024,max:10})
{ "ok" : 1 } > for(var i=1;i<1000;i++) db.mycoll.save({id:i,name:"Hello"}) > db.mycoll.count() 10 > db.mycoll.find() { "_id" : ObjectId("5274b854f007ff8bb84f6347"), "id" : 990, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6348"), "id" : 991, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6349"), "id" : 992, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634a"), "id" : 993, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634b"), "id" : 994, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634c"), "id" : 995, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634d"), "id" : 996, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634e"), "id" : 997, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634f"), "id" : 998, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6350"), "id" : 999, "name" : "Hello" }
> db.mycoll.isCapped() true >db.mycoll.stats() { "ns" : "test.mycoll", "count" : 0, "size" : 0, "storageSize" : 4096, "numExtents" : 1, "nindexes" : 1, "lastExtentSize" : 4096, "paddingFactor" : 1, "systemFlags" : 1, "userFlags" : 0, "totalIndexSize" : 8176, "indexSizes" : { "_id_" : 8176 }, "capped" : true, "max" : NumberLong("9223372036854775807"), "ok" : 1 }
上面個建立了一個Capped Collection,佔用1024個位元組,最多10個文檔,然後向其中插入了1000條資料通過db.collection.isCapped() 和 db.mycoll.stats()命令可以查看一個集合是否是 Capped Collection 。
注意: a.建立固定集合不像普通集合,固定集合需要顯示的建立使用
b.建立固定集合必須指定其大小否則會報錯:
> db.createCollection("mycoll",{capped:true})
{ "errmsg" : "exception: specify size:<n> when capped is true", "code" : 14832, "ok" : 0 }
c.建立集合的時候Max屬性是可選的,文檔數量限制是在容量沒滿的時候進行淘汰,要是滿了,就根據容量限制來替換資料。例如上面的例子我們設定文檔數量限制是10這樣的話在沒有達到容量上限的時候,最多隻能儲存10個文檔。
更多詳情見請繼續閱讀下一頁的精彩內容:
MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡
推薦閱讀:
Java實現MongoDB中自增長欄位
CentOS編譯安裝MongoDB
CentOS 編譯安裝 MongoDB與mongoDB的php擴充
CentOS 6 使用 yum 安裝MongoDB及伺服器端配置
Ubuntu 13.04下安裝MongoDB2.4.3
如何在MongoDB中建立新資料庫和集合
MongoDB入門必讀(概念與實戰並重)
《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]