標籤:ima strong create 集合 成功 添加 insert cap 結合
一、MongoDB固定集合概念
固定集合指的是事先建立,並且大小固定的集合。即假設一個集合設定了固定大小為100,再添加一條文檔的時候,會把最前面的文檔剔除,永遠只保留100條資料。
固定集合特性:固定集合很像環形隊列,如果空間不足,最早的文檔就會被刪除,為新的文檔騰出空間。一般來說,固定集合適用於任何想要自動淘汰到期屬性的情境。
二、固定集合應用情境
比如記錄檔,聊天記錄,通話資訊記錄等只需保留最近某段時間內的應用情境,都會使用到MongoDB的固定集合。
三、如何使用固定集合
建立固定集合使用命令:db.createCollection("集合名詞",{capped:true,size:1000,max:100});
capped:true表示該集合為固定集合,size指定集合大小,單位為KB,max指定文檔的數量
當指定文檔數量上限時,必須同時指定大小。這是為什麼呢?
答案是:淘汰機制只有在容量還沒有滿時才會依據文檔數量來工作。要是容量滿了,淘汰機制會依據容量來工作。
結合情境來理解:
(1)現建立一個c5的固定集合,大小設定為1000kb,文檔數量設定為100,編寫命令:db.createCollection("c5",{capped:true,size:1000,max:100});
(2)並向集合中插入10條資料:
for(var i=0,i<=99;i++){
db.c5.insert({name:"fuck",age:i})
}
(3)尋找c5集合的大小:db.c5.count(),卻發現實際顯示的數量只有56條。
結論:當儲存的資料達到集合大小的上限時,淘汰機制依據容量來工作,通過不斷的淘汰前面插入的資料,來滿足後面所有資料的插入,所以根據可得,c5檢索出來的結果,是從age:43開始的。
再來看一個情境
(1)現建立一個c8的固定集合,大小設定為10000kb,文檔數量設定為100,編寫命令:db.createCollection("c8",{capped:true,size:10000,max:100});,條件與上個情境差不多,只是大小調整為10000kb
(2)並向集合中插入100條資料:
for(var i=0,i<100;i++){
db.c8.insert({name:"fuck",age:i})
}
(3)再尋找c8集合的大小:db.c8.count(),這回的數量達到了預期的100條
(4)這時再插入一條資料,也能插入成功,但是再find一把,會發現第一條資料被幹掉了
結論:淘汰機制在容量未滿的情況下,會對前面的文檔進行淘汰,後面插入多少條資料,則最前面相應的淘汰多少條。
MongoDB的固定集合