当前位置: 首页 > 知识库问答 >
问题:

MongoDB作为队列,有上限的集合可定制游标

霍建章
2023-03-14

(在mongo用户讨论组https://groups.google.com/d/topic/mongodb-user/i1ge4bNiMgM/discussion提问)

嗨,我想使用MongoDB作为消息队列,并考虑为此使用有上限的集合可定制游标。我知道可定制光标可用于按插入顺序访问文档,但是

  1. 我可以对光标使用任何排序顺序吗

谢谢

共有1个答案

陈业
2023-03-14

有一个来自AOL/About的演示。2012年4月,我在硅谷MUG的“MongoDB as message queue”上向您介绍,您可能会发现这对规划您的方法很有帮助。

  1. 我可以对光标使用任何排序顺序吗
  2. 尾随光标是否与过滤器查询一起工作(跳过一些我不想处理的文档)?如果是这样,它如何处理新文档的插入?只有当新文档与查询条件匹配时,才会通知我吗

可定制的光标尾随有上限的集合的末尾,并且仅以自然顺序排列。如果需要排序顺序,则需要使用索引查询。

请阅读创建可定制光标留档页面了解更多信息。

C#驱动程序是否完全支持尾随游标?

是的,在1.1C#驱动程序中实现了可定制的游标支持(参见:html" target="_blank">代码示例)。

我希望我的队列能够保证单次传递——我的意思是,如果两个客户端试图读取来自同一个集合的消息,他们就不能“消费”同一条消息。我认为findAndModify可以实现这一点,但如何使用尾随光标实现这一点呢?

有几种方法:

  • 有一个带有可定制游标的读取器将任务分配给工作线程(即基于工作队列深度或循环)。这将比拥有多个阅读器更有效,但可能是单点故障。
  • (@Contango在下面的评论中建议)有多个读者,但是使用乐观并发来确保每个任务只有一个工作者“拥有”。这将导致更多的I/O,但如果工人也直接跟踪,可能会简化您的设计。

有关原子操作的更多信息,请参阅MongoDB手册中的隔离操作顺序。

 类似资料:
  • 有人知道在Mongo3中更新封顶收藏的方法吗。2.我让它在2分钟内工作。我更新了一个收藏,基本上删除了它的所有内容,所以我知道它已经被处理过了。这样就会过时。 当我在3.2中执行同样的操作时,我在命令行上会出现以下错误。 无法更改封顶集合中文档的大小:318!=40 在这里,你可以看到我正在将文档从318字节缩减到40字节。 有办法做到这一点吗?

  • 问题内容: 是否有人在Redis中实现了任何形式的有上限的数据结构?我正在构建类似新闻提要的东西。提要将非常频繁地被操纵和读取,并且将其保存在Redis的分类集中对于我的用例来说是便宜又完美的。唯一的问题是,每个提要仅需要n个项,并且我担心内存溢出,因此我想确保每个提要都不会超过n个项。用Lua在Redis中创建一个有上限的排序集合似乎很简单: update_feed.lua看起来像(未经测试):

  • 队列集合 freeRTOS通过队列集合(Queue Sets)允许任务同时阻塞在多个队列或者信号量上。队列和信号量以集合的形式组织。 注意:尽管在集成第三方的服务时,有时阻塞在多个队列上是必要的,但是还有很多其他的设计模式可以高效完成相同的功能,详细见文章底部部分内容。 使用队列集合 队列集合在使用方法上和select()这类API函数很像,它们都是标准的Berkeley sockets netw

  • 主要内容:创建固定集合,固定集合查询固定集合是具有固定大小的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。 如果更新导致文档大小增加,则固定集合会限制对文档的更新。由于固定集合是按磁盘存储的顺序存储文档的,因此可以确保文档大小不会增加磁盘上分配的大小。固定集合最适合存储日志信息、缓存数据或任何其他高容量数据。 创建固定集合 要创建一

  • 问题内容: 列表,队列和集合之间有什么区别? 问题答案: 简单来说: 一个 列表 是一个对象,在同一个对象可能出现不止一次的有序列表。例如:[1,7,1,3,1,1,1,5]。谈论列表中的“第三要素”是有意义的。您可以在列表中的任何位置添加元素,在列表中的任何位置更改元素,或从列表中的任何位置删除元素。 一个 队列 也定购,但你永远只触摸元件的一端。所有元素都在队列的“结尾”处插入,并从队列的“开

  • 问题内容: 如何同时在多个对象上“选择” ? Golang的频道具有所需的功能: 其中第一个要解除阻塞的通道执行相应的块。如何在Python中实现? 更新0 根据tux21b答案中给出的链接,所需的队列类型具有以下属性: 多生产者/多消费者队列(MPMC) 提供每个生产者FIFO / LIFO 当队列为空/完整的消费者/生产者被阻止时 此外,渠道可能会被阻塞,生产者将阻塞,直到消费者取回该物品为止