MongoDB TTL索引

墨蓝 2022-09-28 05:57 76阅读 0赞

TTL索引是一种特殊类型的单字段索引,主要用于当满足某个特定时间之后自动删除相应的文档。也就是说集合中的文档有一定的有效期,超过有效期的文档就会失效,会被移除。也即是数据会过期。过期的数据无需保留,这种情形适用于如机器生成的事件数据,日志和会话信息等等。本文主要描述TTL索引的使用。

一、TTL索引

  1. 创建方法
  2. db.collection.createIndex(keys, options)
  3. options:
  4. expireAfterSeconds 指定多少秒或者包含日期值的数组
  5. 创建示例
  6. db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )
  7. 何时失效
  8. 在指定的时间达到后失效,也即是索引字段的值加上一个特定的秒数之后
  9. 如果索引字段是一个数组,即索引字段上存在着多个日期值,此时MongoDB取最小值加上失效时间(lowest())
  10. 对于非日期字段或不包含日期数组的索引字段,文档不会失效
  11. 对于不包含索引字段的文档,文档不会失效
  12. 删除操作
  13. mongod的一个后台线程会读取索引的值并将失效的文档从集合移除
  14. TTL线程被激活后,可以从db.currentOp()或者从profile观察到删除操作
  15. 何时删除
  16. 当基于后台方式创建索引时,TTL线程能够在索引创建期间开始删除失效文档
  17. 当基于前台方式创建索引时,TTL线程在索引创建完成后开始删除失效文档
  18. TTL索引的删除不能完全保证失效期后一定删除,存在一定延迟(取决于mongod的工作负载)
  19. TTL删除文档后台线程每60s移除失效文档(因此可能存在已过失效期,文档还在的情形)
  20. 在副本集环境中,TTL后台线程仅仅在主副本上工作,辅助副本上由复制操作实现
  21. 在使用TTL索引查询时,与使用非TTL索引一样
  22. 一些限制
  23. 不能基于已经存在索引的字段创建TTL索引以及非日期字段创建TTL索引,文档不会失效
  24. TTL索引不支持基于多个字段的复合索引
  25. 不支持定长集合

二、TTL索引示例

  1. # mongo --shell localhost:27000 TTLData.js
  2. MongoDB shell version: 3.2.11
  3. connecting to: localhost:27000/test
  4. repSetTest:PRIMARY> addTTLTestData() //添加集合数据
  5. Create three records in database each with a create time that is 1 minute apart
  6. Created three test documents, oldest being 4 mins old
  7. Now create a TTL index with expiry of 5 mins on the createDate field as follows
  8. db.ttlTest.ensureIndex({createDate:1}, {expireAfterSeconds:300})
  9. repSetTest:PRIMARY> db.ttlTest.find() //当前向集合里插入了3个文档
  10. { "_id" : 1, "createDate" : ISODate("2017-03-10T03:23:01.169Z") }
  11. { "_id" : 2, "createDate" : ISODate("2017-03-10T03:24:01.169Z") }
  12. { "_id" : 3, "createDate" : ISODate("2017-03-10T03:25:01.169Z") }
  13. //下面为测试集合上的文档添加索引,即5分钟后索引失效
  14. repSetTest:PRIMARY> db.ttlTest.createIndex({createDate:1}, {expireAfterSeconds:300})
  15. {
  16. "createdCollectionAutomatically" : false,
  17. "numIndexesBefore" : 1, // Author : Leshami
  18. "numIndexesAfter" : 2, // Blog : http://blog.csdn.net/leshami
  19. "ok" : 1
  20. }
  21. //查找文档
  22. repSetTest:PRIMARY> db.ttlTest.find()
  23. { "_id" : 1, "createDate" : ISODate("2017-03-10T03:23:01.169Z") }
  24. { "_id" : 2, "createDate" : ISODate("2017-03-10T03:24:01.169Z") }
  25. { "_id" : 3, "createDate" : ISODate("2017-03-10T03:25:01.169Z") }
  26. //当指定时间到期后,文档被删除,如下,查询不到任何文档
  27. repSetTest:PRIMARY> db.ttlTest.find()

DBA牛鹏社(SQL/NOSQL/LINUX)

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MongoDB索引

    一、索引 索引通常能够极大的提高查询的效率, 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中。 MongoDB中使用 `B树` 数据结构存储索引。

    相关 MongoDB 索引

    MongoDB 索引 索引通常能够极大的提高查询的效率 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

    相关 MongoDB TTL索引

    > TTL索引是一种特殊类型的单字段索引,主要用于当满足某个特定时间之后自动删除相应的文档。也就是说集合中的文档有一定的有效期,超过有效期的文档就会失效,会被移除。也即是数据会

    相关 MongoDB 索引

    索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。 这种扫描全集合的查询效率是非常低的,特别在处

    相关 MongoDB索引

    MongoDB索引的介绍: 简介 索引就是用来加速查询的。数据库索引与书籍的索引类似:有了索引就不需要翻遍整本书,数据库则可以直接在索引中査找,使得查找速度能提高几个

    相关 mongodb索引

    索引的概念 索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,通过索引可以快速找到我们查询的数据。提高查询效率 mongodb索引种类 1