文章目录

  • mongodb固定集合(Capped Collections)
    • 一、什么是mongodb固定集合(Capped Collections)
    • 二、Capped Collections使用场景
    • 三、固定集合常用命令
      • 检查集合是否为固定集合
    • 四、固定集合需要注意
  • MongoDB 自动删除集合中过期的数据——TTL索引
    • 一、什么是mongodb TTL 索引
    • 二、创建 TTL 索引
    • 三、TTL 索引限制

mongodb固定集合(Capped Collections)

一、什么是mongodb固定集合(Capped Collections)

capped-collections官网:https://www.mongodb.com/docs/v4.4/core/capped-collections/

MongoDB固定集合(Capped Collections)是性能出色且有着固定大小的集合。我们可以将其想成一个环形队列,当集合空间用完后,在插入的元素就会覆盖最初是的头部元素。另外这里说的大小固定其实有有两个含义:① 存储空间大小有上限 ②文档数有上限。实际使用时触发其中任何一个上限都会引发前面说的覆盖。

capped collections 在创建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象。

总结:固定集合是具有固定大小的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。

和标准的collection不同,你必须要显式的创建一个capped collection,
指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。

要注意的是指定的存储大小包含了数据库的头信息。

> db.createCollection("myLogCollection", {capped:true, size:100000})

二、Capped Collections使用场景

固定集合很像环形队列,如果空间不足就会覆盖最早的文档。由此可见固定集合适应于任何想要自动淘汰过期属性的场景。例如:日志文件、最近通话记录、最近联系人、最近聊天记录等。

如果更新导致文档大小增加,则固定集合会限制对文档的更新。由于固定集合是按磁盘存储的顺序存储文档的,因此可以确保文档大小不会增加磁盘上分配的大小。

固定集合最适合存储日志信息、缓存数据或任何其他高容量数据。

三、固定集合常用命令

要创建一个具有固定大小的集合,我们可以使用常规的 createCollection 命令,但需要将 capped 选项设置为 true,并以字节为单位设置集合的大小。

> db.createCollection("myLogCollection", {capped:true, size:10000})
{ "ok" : 1 }

其中 bianchengbang 为要创建的集合名称。除了集合的大小外,我们还可以使用 max 参数来限制集合中文档的数量:

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

如果要检查集合是否为固定集合,可以使用 isCapped 命令:

> db.myLogCollection.isCapped()
true

如果您需要将已经存在的集合转换为固定集合,可以使用如下命令:

> db.runCommand({"convertToCapped":"myLogCollection",size:10000})
{ "ok" : 1 }

上面的命令可以将我们已存在的集合“myLogCollection”转换为固定集合。

检查集合是否为固定集合

检查集合是否为固定集合,可以使用 isCapped 命令

#切换到xxx库
use xxx;
db.xxx.isCapped();

四、固定集合需要注意

不同于普通集合,固定集合必须在使用前显式创建。

固定集合中不存在默认索引,甚至在 _id 字段上也不存在;
默认情况下对一般的 collection 是创建索引的,但不会对 capped collection 创建。

在插入新文档时,MongoDB 实际上不必在磁盘上寻找容纳新文档的位置,它可以在集合的尾部盲目地插入新文档,这使得在固定集合中插入文档非常快;
在查询文档时,MongoDB 返回的文档顺序与文档在磁盘上存储的顺序是相同的,这使得查询文档的速度非常快。

MongoDB 自动删除集合中过期的数据——TTL索引

官网:https://www.mongodb.com/docs/v4.4/core/index-ttl/
MongoDB自动删除过期数据–TTL索引
https://www.cnblogs.com/guxuanqing/p/13732306.html

作为有上限的集合的另一种选择,考虑MongoDB的TTL(生存时间)索引。如通过设置TTL使集合中的数据过期,这些索引允许您根据日期类型字段的值和索引的TTL值从普通集合中过期并删除数据。

一、什么是mongodb TTL 索引

TTL 索引
官网:https://www.mongodb.com/docs/v4.4/core/index-ttl/

TTL 索引是特殊的单字段索引,MongoDB 可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。数据过期对于某些类型的信息很有用,例如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保留有限的时间。

当你在集合中某一个字段建立TTL索引后,后台会有一个单线程,通过不断查询(默认60s一次)索引的值来判断document是否有过期,

并且删除文档的动作还依据mongod实例的负载情况,如果负载很高,可能会稍微延后一段时间再删除。

二、创建 TTL 索引

例如,要在集合lastModifiedDate字段上创建一个 TTL 索引eventlog,TTL 值为3600秒

db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

三、TTL 索引限制

  • TTL 索引是单字段索引。复合索引不支持 TTL 并忽略该 expireAfterSeconds选项。
  • _id字段不支持 TTL 索引。
  • 不能在一个capped-collections集合,因为 MongoDB 无法从capped-collections集合中删除文档。
  • 您不能使用createIndex()更改现有索引的expireAfterSeconds值。要更改现有索引选项的值,您必须先删除索引并重新创建。
  • 如果某个字段已经存在非 TTL 单字段索引,则无法在同一字段上创建 TTL 索引。要将非 TTL 单字段索引更改为 TTL 索引,您必须先删除索引并使用该 expireAfterSeconds选项重新创建。

mongodb固定集合(Capped Collections) | MongoDB 自动删除集合中过期的数据——TTL索引相关推荐

  1. MongoDB 自动删除集合中过期的数据——TTL索引

    简介 ​ TTL (Time To Live, 有生命周期的) 索引是特殊单字段索引,MongoDB可以用来在一定时间后自动从集合中删除文档的特殊索引. 这对于某些类型的数据非常好,例如机器生成的事件 ...

  2. mongodb主从设置,capped collections等常用命令集合

    ############### Mongodb  主 <==> 从切换的时候要删除  ############## ############### use local    ####### ...

  3. 10,有上限集合(Capped collections)

    有上限集合(Capped collections): Capped集合是固定大小的集合,支持基于插入顺序插入和检索文档的高吞吐量操作.Capped集合的工作方式类似于循环缓冲区:一旦集合填满了它分配的 ...

  4. solr mysql 导入命令_(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据...

    在前面的博文中,已完成了在tomcat中对solr的部署,为solr添加了一个自定义的core,并且引入了ik分词器. 那么该如何将本地的mysql的数据导入到solr中呢? 准备工作: 1.mysq ...

  5. pandas使用query函数删除dataframe中两个数据列加和小于某一特定值的数据行(removing rows based on multiple dataframe column value

    pandas使用query函数删除dataframe中两个数据列加和小于某一特定值的数据行(removing rows based on multiple dataframe column value ...

  6. 用SQL语句怎么删除表中的所有数据

    有两种办法可以删除表中的所有数据: 1.TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作. 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删 ...

  7. Oracle删除表中的重复数据

    Oracle数据库删除表中的重复数据,只保留其中的一条,以两个字段为例,提供两种方法 ①.直接delete重复的数据 delete from table_name t1 where (t1.col1, ...

  8. MongoDB 所支持的数据类型 创建和删除集合 创建和删除数据库

    数据类型 MongoDB 支持如下数据类型: String:字符串.存储数据常用的数据类型.在 MongoDB 中,UTF-8 编码的字符串才是合法的. Integer:整型数值.用于存储数值.根据你 ...

  9. Java 实现固定长度队列,自动删除最早添加的数据

    1. 长度固定,不能太长了,就最近的几条就可以,所以需要固定的队列. 2. 在添加的时候,自动删除最早添加的记录. 3. 输出的时候,倒序输出 简单的代码如下,主要使用了 org.apache.com ...

最新文章

  1. FAQ系列 | 如何保证主从复制数据一致性(转)
  2. 基于Springboot实现企业人事管理系统
  3. 【PAT乙级】 1018 锤子剪刀布 (20 分)
  4. Redis之通用的key操作命令
  5. Android动态日志系统Holmes
  6. 怎么修改存储路径_Power Query数据位置变了?利用参数轻松解决源文件路径问题...
  7. 银行营业网点管理系统——entity类(CityArea)
  8. linq结果转换object_你知道Object.entries(),但你还知道有Object.fromEntries()吗?
  9. Josephus问题的Java解决方法
  10. Spark重要概念提出时间戳和原因
  11. 蓝牙学习笔记(二)——低功耗蓝牙(BLE)的体系结构
  12. [转] 背完这444句英语,你的口语绝对不成问题
  13. MPB:青岛大学苏晓泉组分享基于分类学和系统发育的宏基因组比较DMS算法
  14. 搜狗2016年校招笔试编程题记录+总结
  15. 特征值和特征向量的理解
  16. 熟知ghost参数 恢复系统没烦恼【xpghost】
  17. SpringBoot框架中的DAO(mapper)层、Entity层、Service层、Controller层
  18. kdj超卖_KDJ买入形态:D线进入超卖区间
  19. 训练数据,验证数据和测试数据
  20. 【软考软件评测师】第一章节 面向对象测试方法

热门文章

  1. HDI激光钻孔和常见问题
  2. python jieba分词的tmp_dir报错问题
  3. 你还不会SQL Server数据库吗?一篇让你学会SQL数据库基础(从零开始超详解)
  4. curl get json数据格式
  5. 程序员们,今天你被晒支付宝年度账单了吗?
  6. xp怎么升级到win7
  7. Chrome浏览器无法登录Google账号
  8. siamese(孪生) 网络
  9. IPV4和IPV6报头对比分析
  10. Mybatis-plus sql语句 LT、LE、EQ、NE、GE、GT