• MongoDB的固定集合


      一、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一把,会发现第一条数据被干掉了

         结论:淘汰机制在容量未满的情况下,会对前面的文档进行淘汰,后面插入多少条数据,则最前面相应的淘汰多少条。

         

  • 相关阅读:
    [P4721] 【模板】分治 FFT
    [GYM102452E] Erasing Numbers
    [LOJ6220] sum
    [CF776B] Sherlock and His Girlfriend
    [LOJ6087] 毒瘤题
    [LOJ2612] 花匠
    [LOJ529] 自然语言
    [CTSC2017] 吉夫特
    [LOJ6671] EntropyIncreaser 与 Minecraft
    [LOJ3196] 挂架
  • 原文地址:https://www.cnblogs.com/jiyukai/p/6980511.html
Copyright © 2020-2023  润新知