1. 程式人生 > >MongoDB的固定集合

MongoDB的固定集合

mongo .cn max 固定集合 com ++ 屬性 發現 -1

  一、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的固定集合