【发布时间】:2021-09-01 01:51:38
【问题描述】:
我正在尝试找出一种将 Mongo 用作循环缓冲区的方法。 目前使用 SQL Lite,但性能方面不适合我们的情况。 需要满足的规范是: 集合必须每 x 秒清空一次。 当满足 y 个文档的限制时,集合必须自行清空。
通过 Mongo 文档,封顶集合以及更改事件似乎是一种方法。
https://docs.mongodb.com/manual/core/capped-collections/
https://docs.mongodb.com/manual/reference/change-events/
在文档中指出:“上限集合的工作方式类似于循环缓冲区”
但我不确定如何:
- 每隔 x 秒清空一次集合。 Mongo TTL 功能不可行,因为上限集合不支持 TTL。其他替代方案?
- 检索任何“已删除的文档”。 更换变更事件的操作类型似乎是一种方法。其他替代方案?
有没有人尝试过使用 Mongo 作为循环缓冲区? 上面的-Capped Collections/Change Events-是实现它的方法吗?
感谢您的回复。
【问题讨论】:
-
您的数据大小是多少? “x 秒”的范围是多少?上限集合限制文档总数,但是您要求删除所有个文档。一个普通的
db.collection.drop()可能会更快。在 MongoDB 中,如果新集合不存在,则会自动创建它。 -
当你实际要求删除它们时,你为什么喜欢检索它们?
-
您能否详细说明您对“循环缓冲区”的期望。这只是一种存储数据的方式。这就是上限集合的实现方式,它被用于副本集中的 oplog。因此,如果有人尝试使用它来回答您的问题 - 是的,有些人尝试过。
-
@WernfriedDomscheit 我想检索文档,因为在移除文档后需要进行进一步处理。 “x 秒”的当前值为 10 秒,但它是可配置的。数据量非常大 - 每月接近 50 万份文档,它是生产数据,我不知道确切的值。
-
@AlexBlex 我对循环缓冲区的期望是存储特定数量的文档(限制),能够检索在达到此限制时自动删除的所有文档。不过,正如我现在意识到的那样,Mongo 实际上会一个一个地删除文档.. 并不是为了清空集合而将它们全部一起删除..