mongodb的TTL索引介绍(超时索引)
TTL索引是mongodb新支持的用于延时自动删除记录的一种索引。它仅包含一个字段,该字段值需要是Date()类型,并且不支持复合索引。可以指定某条记录在延时固定时间后自动删除。数据自动超时删除主要用在系统生成的事件、日志或者会话信息等不需要永久存储的数据。
- 创建语法

在集合eventlog的字段"lastModifiedDate"上创建延时1小时自动删除的TTL索引,其中"expireAfterSeconds"是超时字段,单位是秒。
- 数据超时
TTL索引会按设置的超时时间,自动定期把符合条件的文档删除,这里的符合是指索引字段的时间值超时:
1. 该字段如果是一个数组,并且有多个有效的时间值,那么mongodb会按最早的时间值来计算是否超时。
2. 如果某文档的该字段值不是Date类型或者数组中无有效时间值,那么该文档不会过期。
3. 如果一个文档没有索引字段,那么它也不会过期。
- 删除操作
mongodb后台启动了一个线程来定期查询并删除符合条件的文档。
当TTL线程在执行的时候,你可以通过db.currentOp() 查询执行状态。
- 删除操作的执行时间
如果以后台的方式创建了TTL索引,系统可以边创建索引边执行删除操作。如果是前台创建方式,则需要在创建完成后开始执行删除操作。
后台线程会每个1分钟执行一次删除操作,因此TTL索引并不能保证文档在过期的时间点就能被删除,从文档过期到被删除可能会有一段间隔时间,这个间隔包含了线程执行的间隔和执行时删除文档的时间。
- 复制组
在复制组的成员中,只有主节点的后台线程会删除文档,其他从节点会同步这个删除操作。
- 是否支持查询
支持查询时使用TTL索引,同普通的索引一样。
- 注意事项
1. TTL索引仅支持一个字段,不能支持复合索引。
2. _id字段不支持TTL索引。
3. 不能再固定大小的集合上创建TTL索引。
4. 不能通过createIndex()接口来改变expireAfterSeconds的值,可以通过"collMod"命令,或者先删除再创建的方式。
5. 不能在已经建立索引的字段创建TTL索引。
- 示例
1. 创建索引
mongos> db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 60 } )
{
"ok" : 1
}
2. 插入4条记录
mongos> db.eventlog.insert({"title":"mongodb 1","lastModifiedDate":new Date()})
WriteResult({ "nInserted" : 1 })
mongos> db.eventlog.insert({"title":"mongodb 2","lastModifiedDate":new Date()})
WriteResult({ "nInserted" : 1 })
mongos> db.eventlog.insert({"title":"mongodb 3","lastModifiedDate":new Date()})
WriteResult({ "nInserted" : 1 })
mongos> db.eventlog.insert({"title":"mongodb 4","lastModifiedDate":new Date()})
3. 查询记录
mongos> db.eventlog.find()
{ "_id" : ObjectId("5a9697a671d2645a6fa3f9cb"), "title" : "mongodb 1", "lastModifiedDate" : ISODate("2018-02-28T11:51:02.804Z") }
{ "_id" : ObjectId("5a9697aa71d2645a6fa3f9cc"), "title" : "mongodb 2", "lastModifiedDate" : ISODate("2018-02-28T11:51:06.393Z") }
{ "_id" : ObjectId("5a9697ad71d2645a6fa3f9cd"), "title" : "mongodb 3", "lastModifiedDate" : ISODate("2018-02-28T11:51:09.416Z") }
{ "_id" : ObjectId("5a9697c671d2645a6fa3f9ce"), "title" : "mongodb 4", "lastModifiedDate" : ISODate("2018-02-28T11:51:34.499Z") }
大概过了90s,再查询
mongos> db.eventlog.find()
mongos>
果然同时消失了,说明执行超时删除不是实时的,而是60秒执行一次。
mongodb的TTL索引介绍(超时索引)的更多相关文章
- mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍
MySQL索引介绍 聚集索引(Clustered Index)----叶子节点存放整行记录辅助索引(Secondary Index)----叶子节点存放row identifier-------Inn ...
- MongoDB索引介绍
MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的,并且实现原理也基本一致.由于集合中的键(字段)可以是普通数据类型,也可以是子文档.MongoDB可以在各种类型的键上创建索 ...
- 每篇半小时1天入门MongoDB——4.MongoDB索引介绍及数据库命令操作
准备工作 继续连接到mongo C:\Users\zouqi>mongo MongoDB shell version: 3.0.7 connecting to: test 查看数据库和集合 &g ...
- Mongodb Manual阅读笔记:CH7 索引
7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...
- MongoDB优化,建立索引实例及索引机制原理讲解
MongoDB优化,建立索引实例及索引机制原理讲解 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样 ...
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
- MongoDB开发深入之二:索引
索引分类: 默认索引 单一索引 复合索引 多键索引(数组索引) 全文检索索引 2dsphere 索引 2D索引 ...... 索引属性: 到期TTL 唯一索引 部分索引 稀疏索引 索引通常能够极大的提 ...
- [转载]MongoDB开发学习(2)索引的基本操作
索引能够极大的提高查询的效率.在数据库中简历索引必不可少. 在MongoDB中可以很轻松的创建索引. 默认索引_id_ 开启MongoDB服务器,创建数据库cnblogs,创建集合Users .(关于 ...
- MySQL单列索引和组合索引的区别介绍
MySQL单列索引和组合索引的区别介绍 作者:佚名出处:IT专家网2010-11-22 13:05 MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有 ...
- MongoDB 创建基础索引、组合索引、唯一索引以及优化
一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...
随机推荐
- 解决myeclipse10.1导出War包出错:Security Alert:Integrity check error
解决myeclipse10.1导出War包出错:Security Alert:Integrity check error 解决myeclipse10.1不能导出war包报 ============== ...
- Windows核心编程&线程
1. 线程上下文:线程内核对象保存线程上一次执行时的CPU寄存器状态 2. 线程上下文切换 3. windows操作系统为抢占式多线程操作系统,系统可以在任何时刻停止一个线程而另行调度另外一个线程.我 ...
- 输入和输出--File类
输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入 ...
- js中键盘按键对应的键值
js键盘键值 keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 1 ...
- 小z的袜子
传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从 ...
- OSSEC初探
OSSEC初探 概念: OSSEC是一款开源的基于主机的入侵检测系统(HIDS),它可以执行日志分析.完整性检验.windows注册表监控.隐匿性检测和实时告警.它可以运行在各种不同的操作系统上,包括 ...
- LINUX文件定位
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- xBIM 基本的模型操作
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- Springboot security cas整合方案-实践篇
承接前文Springboot security cas整合方案-原理篇,请在理解原理的情况下再查看实践篇 maven环境 <dependency> <groupId>org.s ...
- POJ1741Tree [点分治]【学习笔记】
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20098 Accepted: 6608 Description ...