我如何才能使我的并行应用程序跨多个服务器避免获取相同的mongodb文档进行工作?

时间:2019-01-07 04:23:40

标签: c# mongodb transactions find wiredtiger

所以这个问题很长,但是很容易解释。我有一个在多个服务器上运行的应用程序,该应用程序使用并行循环来处理来自MongoDB集合的对象。由于MongoDB强迫我允许多读取访问,因此我无法停止多个进程和/或服务器从集合和重复工作中获取同一文档。

该程序使应用程序等待信息出现,进行一些工作以弄清楚该怎么做,然后在完成后将其删除。我希望实现的目标是,如果我可以防止同时访问文档,并且知道一旦读取文档将最终将其删除,那么我可以通过减少重复数量并允许在一定程度上提高整体吞吐量。抓取未使用的东西的应用程序。

我认为悲观主义并不是我想要的,但也许我误解了这个概念。另外,如果使用替代设置来解决相同的问题,我也想听听可能会使用什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我希望实现的目标是,如果我可以防止同时访问文档

最简单的方法是引入dispatch流程体系结构。添加一个专用流程,该流程仅监视更改,然后将任务委派或分发给多个工作人员。

该过程可以利用MongoDB ChangeStreams来访问单个集合,数据库或整个部署上的实时数据更改。一旦接收到流/文档,就将其发送给工作人员进行处理。

这还应该减少试图访问相同任务的多个工作人员,并具有减少逻辑的能力。