java - mongo中的原子读取和删除

标签 java mongodb

我是 mongo 的新手,所以我在这里尝试实现的目标可能无法实现。到目前为止,我的研究尚无定论...

我的场景如下:我有一个可能有多个实例正在运行的应用程序。这些实例正在处理一些数据,当处理失败时,它们会将失败项的 ID 写入 mongo 集合(“错误”)。

有时我想重新尝试处理这些项目。因此,应用程序会以固定的时间间隔从集合中读取所有 ID,然后删除所有记录。现在,这是一个明显的竞争条件。两个实例可能读取完全相同的数据,这将使要完成的工作加倍。一些ID也可能像这样被遗漏。

我的问题如下:有没有什么方法可以以分布式原子方式读取和删除这些记录?我正在考虑锁定集合,但到目前为止我在 java 驱动程序的文档中没有找到支持。我还尝试寻找类似 findAndDrop() 的方法,但到目前为止还没有成功。

我知道领导者选举等技术很可能会解决这个问题,但我想看看是否可以用更简单的方式完成。

最佳答案

您可以将 BlockingQueue多生产者-单一消费者 方法结合使用,因为您有多个生产者来生成 ID 并通过单一消费者删除它们。

关于java - mongo中的原子读取和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44429282/

相关文章:

java - Android中如何根据动态SerializedName用gson解析json对象

node.js - 如何有效地搜索子文档

MongoDB Chain 查询,伪事务

c# - MongoDB - 在小型记录集上使用 C# 驱动程序时没有索引错误的 sort() 数据太多

mongodb - 在mongodb中过滤时获取数组的索引

Java Spark 和 MongoDB : query only needed data

java - 使用简单的数组通过堆叠对数字进行排序?

java - 使 EditText 输入只接受数字不起作用

java - 属性文件存在,但仍然收到 "WARN No appenders could be found"

java - 远程 JMS 连接仍使用 localhost