我有多个服务实例。此服务访问未处理文档的集合。我们正在使用MongoDB。服务的作用是:
多个服务可能会访问导致重复的同一文档。我能想到的处理这种情况的步骤:
FindandModify()以及进度字段。因此,我们将调用此函数并将进度字段的查询设置为" 0"。我们将值更新为1,以便其他服务无法访问它。在从Rest调用中获得成功后,我们可以删除该记录。在获得失败后,我们将再次使用更新值调用FindandModify()为" 0"所以其他服务可以在以后访问。
我们调用Find()函数,它将为我们提供一个文档。我们得到了" _id"文档并将其存储到另一个集合中。如果另一个服务也获得相同的文档和该文档" _id"已经存在了。然后它不会再次插入,该服务再次调用Find()函数。
这些方法的性能和瓶颈是什么?我们还有其他更好的方法可以提高性能。
答案 0 :(得分:0)
FindandModify()以及进度字段。因此我们将调用此函数并将进度字段的查询设置为“0”。我们将值更新为1,以便其他服务无法访问它。在从Rest调用中获得成功后,我们可以删除该记录。在获得失败时,我们将再次使用更新值调用FindandModify()为“0”,以便其他服务可以在以后访问。
这个解决方案没问题,比第二个更简单,更快。
我们调用Find()函数,它将为我们提供一个文档。我们得到文档的“_id”并将其存储到另一个集合中。如果另一个服务也获得相同的文档,并且该文档“_id”已经存在。然后它将不会再次插入,该服务再次调用Find()函数。
此解决方案(如您所示)将无效,除非在第二个集合中插入文档后将其从第一个集合中删除,否则将在无限循环中捕获进程。缺点是这个解决方案意味着两个集合和文档移动过程。
在任何情况下,您都必须考虑到任何阶段的流程失败,您必须能够检测到故障并从中恢复。