MongoDB固定集合(Capped collections)是固定大小的循環(huán)集合,遵循插入順序以支持創(chuàng)建,讀取和刪除操作的高性能。 通過循環(huán),當(dāng)分配給集合的固定大小被耗盡時(shí),它將開始刪除集合中最舊的文檔,而不用提供任何明確的命令。
如果更新導(dǎo)致增加的文檔大小,固定集合會(huì)限制文檔的更新。 由于上限集合按照磁盤存儲(chǔ)的順序存儲(chǔ)文檔,因此可確保文檔大小不會(huì)增加磁盤上分配的大小。固定集合最適用于存儲(chǔ)日志信息,緩存數(shù)據(jù)或任何其他高容量數(shù)據(jù)。
要?jiǎng)?chuàng)建一個(gè)固定集合,可使用 createCollection 命令,但是capped選項(xiàng)的值為true,并指定以字節(jié)為單位的最大集合大小。
>db.createCollection("cappedLogCollection",{capped:true,size:99999})
除了指定集合大小,還可以使用max參數(shù)限制集合中的文檔數(shù)量 -
>db.createCollection("cappedLogCollection",{capped:true,size:99999,max:1000})
如果要查看集合是否固定,請(qǐng)使用以下isCapped命令 -
>db.cappedLogCollection.isCapped()
如果想要將一個(gè)集合轉(zhuǎn)換為上限的集合,則可以使用以下代碼進(jìn)行操作:
>db.runCommand({"convertToCapped":"posts",size:99999})
此代碼將現(xiàn)有的post轉(zhuǎn)換為固定集合。
默認(rèn)情況下,在固定集合上查詢將以插入順序顯示結(jié)果。 但是,如果要以相反的順序檢索文檔,請(qǐng)使用sort命令,如以下代碼所示 -
> db.cappedLogCollection.find().sort({$natural:-1})
關(guān)于固定集合值得注意的幾個(gè)要點(diǎn) -
_id字段上。