MongoDB 中使用 TTL 索引来自动清除过期数据

阅读时长 3 分钟读完

在实际的开发过程中,数据库是不可避免的一个重要部分,而随着应用系统的规模增大,数据库中的数据也会越来越多,而一部分数据是没有必要长久保存的,因此需要使用 TTL(Time-To-Live)索引来自动清除过期数据。本文将介绍如何在 MongoDB 中使用 TTL 索引来实现自动清除过期数据。

TTL 索引简介

TTL 索引是一种特殊的索引,在 MongoDB 中它被称为“生存时间索引”,它可以为集合中的每一条数据指定一个过期时间,一旦数据的过期时间超过了设定的时限,MongoDB 会自动删除这条数据。

相对于手动处理的方式,自动清理过期数据的好处在于,无需额外的开发成本,同时可以保证数据库的数据存储量不会无限制地增长占用空间,而且避免出现内存泄漏等潜在风险。

TTL 索引使用方法

使用 TTL 索引的前提是,需要为集合中的每个文档增加一个包含日期类型数据的字段,该字段存储了数据的过期时间。这里以expireAt字段为例。

创建 TTL 索引

创建 TTL 索引的代码如下:

该代码创建了一个名为expireAt的 TTL 索引,1表示升序(即过期时间从小到大),expireAfterSeconds: 0表示从数据的有效期截止时间开始计算,MongoDB启动一个进程扫描过期的数据,并删除过期的数据。

如果想要指定一个字段为过期时间,则需要将expireAt字段改成实际要被用作过期时间的字段名称即可。

为文档设置过期时间

设置文档过期时间的代码如下:

这个代码将expireAt字段的值设置为ISODate().getTime() + 1000 * 60 * 60,通过当前时间加上一个小时,即在一小时后过期。

如何查询包含 TTL 索引的集合?

查询过期的数据并删除的功能时 MongoDB 内置的,我们没有必要手动执行,但需要确保 MongoDB 进程正常运行。要查询包含 TTL 索引的集合,可以使用以下命令:

执行该命令后,控制台会返回该集合的所有索引,其中会包含创建的 TTL 索引。

示例代码

-- -------------------- ---- -------
-- ----- --
--------------------------------- --- ---------------------- ----

-- ------------------
------------------------ ------- ----------- --- -------- ---------------- - ---- - -- - ------

-- ----
---------------------- ---------

-- -----

-- ----
---------------------- ---------

执行示例代码后,第二个查询将无法用于找到以前插入的测试数据,因为它的过期时间已经过了。此时再查找数据库时,MongoDB 底层的自动过期删除机制会将过期的数据自动删除,从而达到自动清理的效果。

结论

创建 TTL 索引是一个非常有用的技术,可以有效避免数据过度存储,占用无谓的内存空间。在 MongoDB 中,使用 TTL 索引来自动清除过期数据是一种简单而有效的方法,可以提高数据库操作的效率和可靠性,开发人员可以根据实际的情况来选择是否使用 TTL 索引。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6739a9d44be4bb7dc32e7c55

纠错
反馈