【问题标题】:What is the best way to implement a FIFO collection in mongoDB?在 mongoDB 中实现 FIFO 集合的最佳方法是什么?
【发布时间】:2020-10-01 12:50:39
【问题描述】:

我有一个排序的时间序列项目。每 1 秒我想插入一个包含任意计数的文档:

{ count: Number }

然后我想每隔 5 秒删除插入的第一个文档,直到这些文档中的计数累积总和大于 10。

所以我有一个这样的列表(集合):

[{ count: 5 }, { count: 3 }, { count: 2 }, { count: 7 }, { count: 8 }]

然后在删除第一个文档后,它就变成了

[{ count: 7 }, { count: 8 }]

因为5 + 3 + 2 == 10我停止删除文档。

保证对列表进行排序,以便仅删除列表开头的元素,仅将元素追加到末尾。

实现这样的 FIFO 列表的最佳方法是什么,以便删除元素是 O(1),附加元素也是 O(1)?

【问题讨论】:

    标签: database mongodb mongoose database-design mongodb-query


    【解决方案1】:

    为每个文档添加一个时间戳字段,在查询时按时间戳排序时写入当前时间。

    您也可以使用$push$pop 在单个文档中实现队列。

    【讨论】:

    • 这并不高效。每次我想删除而不是仅删除 O(1) 时,它都会对文档进行完整排序。
    • 集合中的文档没有排序。
    • MongoDB 是一种通用数据存储。如果您想要一个高性能队列,还有其他软件可以更好地实现该功能,例如 Redis。我的印象是 Redis 不提供 MongoDB 提供的持久性保证,仅举两者之间的区别。
    • 您可以编辑并将其添加到您的答案中吗?然后我会接受它作为接受的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2022-06-16
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多