首页 > 数据库 >MongoDB TTL索引的使用

MongoDB TTL索引的使用

时间:2024-09-26 10:51:11浏览次数:3  
标签:过期 MongoDB t2 索引 文档 TTL

在实际开发中,不少Java开发者会将日志类的debug信息存储到MongoDB中,以便在问题发生时进行排查。然而,这些过期的冗余数据长期占用磁盘空间,给系统带来了不小的负担。如何有效地清理这些垃圾数据呢?

MongoDB的TTL索引提供了一个优雅的解决方案。TTL索引是一种特殊的单字段索引,它通过监控文档中的指定日期字段,一旦该字段的值超过了设定的过期时间,MongoDB就会自动删除该文档。


下面我们通过一个简单的示例来演示TTL索引的使用:

首先,创建一个名为t2的集合。

// 插入数据
db.t2.insert({
  "name": "张三",
  "age": 30,
  "occupation": "工程师",
  "create_time": new Date() // 使用当前时间
});


> db.t2.find().pretty()
{
	"_id" : ObjectId("66f4c51ed3ea275724d88060"),
	"name" : "张三",
	"age" : 30,
	"occupation" : "工程师",
	"create_time" : ISODate("2024-09-26T02:21:18.380Z")
}


然后,为create_time字段创建一个TTL索引,设置过期时间为3秒。

// 创建 TTL 索引
db.t2.createIndex(
  { "create_time": 1 },
  { expireAfterSeconds: 3 } // 设置过期时间为3秒
);


由于MongoDB的TTL后台进程每60秒运行一次,为了确保过期文档被删除,我们等待63秒。

// 等待63秒
sleep(63000);

当再次查询t2结合,过期文档已经被系统自动清空
db.t2.find().pretty()

最后,再次查询t2集合,会发现过期文档已经被自动清除了。

通过TTL索引,我们可以轻松实现MongoDB中数据的自动过期清理,从而有效管理数据库空间,提高系统性能。


标签:过期,MongoDB,t2,索引,文档,TTL
From: https://blog.51cto.com/hcymysql/12118012

相关文章

  • [算法] A LITTLE 网络流
    简介所谓网络流,就是给了一张图,有源点和汇点,让你求从源点放水,到汇点的水最多能有多少;这实际上是一个最大流的问题;最大流我们把这张图的每个边看作一条水管,每个水管都有一个容量,那么对于一条从源点到汇点的路径,其最大通过量是这些水管中容量最小的那一个的容量;对于这个问题,我们......
  • 微服务MongoDB解析部署使用全流程
    1、什么是MongoDB1、非关系型数据库NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常......
  • mysql的索引
    InnoDB是mysql的默认引擎,索引原理是B+树。InnoDB的索引方式首先,数据库的目录也是很庞大的,不能放在内存里。而磁盘的读写速度是比内存慢几个数量级。而且顺序读一块比随机I/O划算,也就是局部性原理。所以:InnoDB把数据和目录都放在默认大小16KB的数据页中。每次读都读一个页......
  • Mongodb 常见操作:查询,排序,查看索引,创建索引等
    //insertdb.books.insert([{_id:12,item:"pencil1",qty:51,type:"no.1"},{_id:21,item:"pencil1",qty:52,type:"no.2"},{_id:31,item:"pencil1",qty:53,type:"no.3"},])db.b......
  • Elasticsearch知识整理(包含与mongoDb的区别)
    Elasticsearch概念整理Elasticsearch是位于ElasticStack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。Kibana使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch......
  • InfluxQL语法与用法及其与SQL和MongoDB的区别
    InfluxQL是一种用于InfluxDB的查询语言,语法上与SQL相似,但专为时间序列数据优化。它使用SELECT、FROM、WHERE等关键字来查询数据。与SQL相比,InfluxQL有更强的时间维度处理功能,例如使用GROUPBYtime()来聚合数据。与MongoDBAPI相比,InfluxQL更注重数据的时间序列特性,而MongoDB则专注......
  • Flutter 自定义国家选择器:基于 A ~ Z字母索引的列表跳转与侧边栏导航实现
    在许多移动应用中,我们经常需要通过字母索引快速跳转到目标位置,比如通讯录、国家选择等功能。这篇博客将带大家实现一个仿照通讯录的Flutter国家选择器。通过一个字母索引的侧边栏,用户可以快速跳转到目标字母分组。效果:1.项目需求与设计思路我们需要实现一个包含多个国......
  • node/expressjs 连接与操作 MongoDB
    MongoDB 的安装、配置、启动、常见指令等,详见上一节“mongoDB简介” 以下将讲述 node/expressjs 与 mongoDB 的交互——连接与操作数据库 mongoDB注释:以下示例是采用express官网的生成器初始化项目的。数据库 mongoDB的操作运用的是mongoose插件, mong......
  • mongoDB 简介
    参考文档 https://www.runoob.com/mongodb/mongodb-tutorial.htmlmongoDB菜鸟教程https://mongodb.net.cn/manual/mongoDB中文官网 1. mongoDB 概述MongoDB是一个流行的开源文档型数据库,它使用类似JSON的文档模型存储数据,这使得数据......
  • Docker 运行 MongoDB
    Docker运行MongoDB实验环境宿主机:CentOSStreamrelease9Docker:DockerEngine27.3.1MongoDB:7.0.14Mongosh;2.3.1配置文件mongod.conf[karma@localhostkarmamongodb]$catmongod.conf|grep-vE"#|^$"storage:dbPath:/var/lib/mongodbsystemLog:des......