服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB中的定时索引示例详解

MongoDB中的定时索引示例详解

2020-05-24 15:45think123 MongoDB

这篇文章主要给大家介绍了关于MongoDB中定时索引的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

MongoDB中存在一种索引,叫做TTL索引(time-to-live index,具有生命周期的索引),这种索引允许为每一个文档设置一个超时时间。一个文档达到预设置的老化程度后就会被删除。

数据到期对于某些类型的信息非常有用,例如机器生成的事件数据,日志和会话信息,这些信息只需要在数据库中保存有限的时间。

在createIndex中指定expireAfterSeconds选项就可以创建一个TTL索引:

?
1
2
// 超时时间为24小时,默认是前台运行,可以通过background:true设置为后台模式
db.user_session.createIndex({"updated":1},{expireAfterSeconds:60*60*24});

这样在updated字段上创建了一个TTL索引。如果一个文档的updated字段存在并且它的值是日期类型,当服务器时间比文档的updated字段的时间晚expireAfterSeconds秒时,文档就会被删除。

?
1
2
3
4
5
6
7
db.getCollection('user_session').insert(
 {
  _id: NumberInt(1),
  "updated":new Date(),
   username:'lisi'
 }
);

mongodb保存时间使用的UTC时间,在查询出来的结果的时候会转换为GMT时间,所以你看到保存的时间和电脑时间相差8个小时(GMT+8)
db.getCollection('user_session').find({updated:{$gt: new Date("2019-07-12 14:00:00")}})  在查询的时候可以使用new Date()直接进行时间的比较,new Date传入的参数是GMT时间

为了防止活跃的会话被删除,可以在会话上有活动发生时将updated字段的值更新为当前时间。只要updated的时间距离当前时间达到24小时。相应的文档就会被删除。

MongoDB的TTL功能依赖于mongodb中的后台线程,该线程读取索引中的日期类型值并从集合中删除过期的文档。

MongoDB每分钟对TTL索引进行一次清理,所以不应该依赖以秒为单位的时间保证索引的存活状态。而且TTL索引不保证在到期时立即删除过期数据。文档到期的时间与MongoDB从数据库中删除文档的时间之间可能存在延迟。由于删除过期文档的后台任务每60秒运行一次。所以,文档可能在文档到期和后台任务运行之间的期间保留在集合中。

源码在 github.com/mongodb/mon

mongodb不支持使用createIndex来重新设置过期时间,只可以使用collMod命令修改expireAfterSeconds的值:

?
1
db.runCommand({collMod:"user_session",index: {name:"updated_1",expireAfterSeconds: 120}});

修改成功后,你会收到这样的消息(之前的过期时间是一分钟,现在修改为2分钟)

?
1
2
3
4
5
{
  "expireAfterSeconds_old" : 60.0,
  "expireAfterSeconds_new" : 120.0,
  "ok" : 1.0
}

在一个给定的集合上可以有多个TTL索引,你可以在created和updated字段分别建立ttl索引,但是不能同时使用两个字段建立复合ttl索引,也不能在同一个字段上又是创建TTL索引,又是创建普通索引,但是可以像“普通索引”一样用来优化排序和查询。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

原文链接:https://juejin.im/post/5d4241d0e51d4561f95ee9c4

延伸 · 阅读

精彩推荐
  • MongoDB分布式文档存储数据库之MongoDB分片集群的问题

    分布式文档存储数据库之MongoDB分片集群的问题

    这篇文章主要介绍了分布式文档存储数据库之MongoDB分片集群的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongodb实现定时备份与恢复的方法教程

    Mongodb实现定时备份与恢复的方法教程

    这篇文章主要给大家介绍了Mongodb实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB安装图文教程

    MongoDB安装图文教程

    这篇文章主要为大家详细介绍了MongoDB安装图文教程,分为两大部分为大家介绍下载MongoDB和安装MongoDB的方法,感兴趣的小伙伴们可以参考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongoDB凭什么跻身数据库排行前五

    MongoDB凭什么跻身数据库排行前五

    MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4月份的6.10分的增长也是仅次于微软SQL Server排名...

    孙浩峰3892020-05-22
  • MongoDBMongoDB 内存使用情况分析

    MongoDB 内存使用情况分析

    都说 MongoDB 是个内存大户,但是怎么知道它到底用了多少内存呢...

    MongoDB教程网10002020-09-29
  • MongoDBMongoDB中javascript脚本编程简介和入门实例

    MongoDB中javascript脚本编程简介和入门实例

    作为一个数据库,MongoDB有一个很大的优势——它使用js管理数据库,所以也能够使用js脚本进行复杂的管理——这种方法非常灵活 ...

    MongoDB教程网6982020-04-24
  • MongoDBmongodb基本命令实例小结

    mongodb基本命令实例小结

    这篇文章主要介绍了mongodb基本命令,结合实例形式总结分析了MongoDB数据库切换、查看、删除、查询等基本命令用法与操作注意事项,需要的朋友可以参考下...

    dawn-liu3652020-05-26
  • MongoDB迁移sqlserver数据到MongoDb的方法

    迁移sqlserver数据到MongoDb的方法

    这篇文章主要介绍了迁移sqlserver数据到MongoDb的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    听枫xl9682021-01-03