zoukankan      html  css  js  c++  java
  • mongoDB 固定集合(capped collection)


    固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建、读取、删除等操作。这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不需要提供任何显式的指令。

    如果文档更新后增加了文档的尺寸,那么固定集合会限制对文档的更新。因为固定集合按照磁盘存储的顺序来保存文档,所以能确保文档尺寸不会增加磁盘分配的尺寸。固定集合最适合保存日志信息,缓存数据以及任何其他大容量数据。
    创建固定集合

    要想创建固定集合,需要使用 createCollection 命令,并将 capped 选项设为 true,同时还需要指定集合的最大尺寸(以字节计)。

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

    除了集合尺寸外,还可以使用 max 参数限制集合中的文档最大数量。

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

    如果想要检查集合是否固定,使用 isCapped 命令即可。

    >db.cappedLogCollection.isCapped()

    如想将现有集合转化为固定集合,使用下列代码:

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

    上述代码会将现有的 posts 集合转化为固定集合。
    查询固定集合

    默认情况下,利用 find 查询固定集合,结果会按照插入顺序进行显示。但如果想按相反顺序获取文档,可以使用 sort 命令,如下所示:

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

    关于固定集合,有以下几个非常值得注意的要点:
    需要事先创建,创建时指定大小,即大小固定,后续不可以随意改变。
    新文档被插入到队列末尾。
    使用循环的方式老化最老的文档,即不支持从定长集合手动删除文档。
    数据被顺序写入到磁盘上的固定空间。
    固定集合不能被分片。
    由于覆盖特性,其应用场景通常可以用于记录日志。
    无法从固定集合中删除文档。
    固定集合没有默认索引,甚至在 _id 字段中也没有。
    在插入新的文档时,MongoDB 并不需要寻找磁盘空间来容纳新文档。它只是盲目地将新文档插入到集合末尾。这使得固定集合中的插入操作是非常快速的。
    在读取文档时,MongoDB 会按照插入磁盘的顺序来读取文档,从而使读取操作也非常快。


  • 相关阅读:
    hdu2222 AC自动机入门
    bzoj1095: [ZJOI2007]Hide 捉迷藏 动态点分治学习
    【NOI2014】起床困难综合症 贪心
    bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
    洛谷3767 膜法 带权并查集+分治
    NOI2015品酒大会 后缀数组
    NOI2015程序自动分析 并查集
    NOI2015软件包管理器 树剖线段树
    51nod1244 欧拉函数之和 杜教筛
    51nod1244 莫比乌斯函数之和 杜教筛
  • 原文地址:https://www.cnblogs.com/liang545621/p/7363739.html
Copyright © 2011-2022 走看看