MongoDB固定循環集合

MongoDB固定集合(Capped collections)是固定大小的循環集合,遵循插入順序以支持創建,讀取和刪除操作的高性能。 通過循環,當分配給集合的固定大小被耗盡時,它將開始刪除集合中最舊的文檔,而不用提供任何明確的命令。

如果更新導致增加的文檔大小,固定集合會限制文檔的更新。 由於上限集合按照磁盤存儲的順序存儲文檔,因此可確保文檔大小不會增加磁盤上分配的大小。固定集合最適用於存儲日誌信息,緩存數據或任何其他高容量數據。

創建固定集合

要創建一個固定集合,可使用 createCollection 命令,但是capped選項的值爲true,並指定以字節爲單位的最大集合大小。

>db.createCollection("cappedLogCollection",{capped:true,size:99999})

除了指定集合大小,還可以使用max參數限制集合中的文檔數量 -

>db.createCollection("cappedLogCollection",{capped:true,size:99999,max:1000})

如果要查看集合是否固定,請使用以下isCapped命令 -

>db.cappedLogCollection.isCapped()

如果想要將一個集合轉換爲上限的集合,則可以使用以下代碼進行操作:

>db.runCommand({"convertToCapped":"posts",size:99999})

此代碼將現有的post轉換爲固定集合。

查詢固定集合

默認情況下,在固定集合上查詢將以插入順序顯示結果。 但是,如果要以相反的順序檢索文檔,請使用sort命令,如以下代碼所示 -

> db.cappedLogCollection.find().sort({$natural:-1})

關於固定集合值得注意的幾個要點 -

  • 無法從固定集合中刪除文檔。
  • 固定集合中沒有默認索引,甚至不在_id字段上。
  • 在插入新文檔時,MongoDB不需要在磁盤上實際尋找一個容納新文檔的位置。它可以隨便地將新文檔插入集合的尾部。這樣就使得在固定集合中的插入操作非常快。
  • 類似地,在讀取文檔的同時,MongoDB按照磁盤上存儲的順序返回文檔。這樣使讀取操作非常快。