可以在多个线程上批量插入在mongoDB中生成重复记录

时间:2016-06-30 22:38:59

标签: c# mongodb mongodb-.net-driver

我正在mongoDB中执行一些操作,在多个线程上进行批量插入WritemanyAsync()。比如,有两个实体JC(收集)。每次更新文档J时,我都会获取所有C,同样对于文档C的每次更新,我都会在文档中提取所有J并执行INSERT XXX

例如(Pseudo):假设有(J1 .. J3)C1 .. C3,因此如果J1更新,则J1 X (C1 .. C3)会发生操作。

整个操作发生在多个线程上。我在集合XXX中看到一些重复记录,它们具有相同的JC(我的意思是相同的ID)。

问题:是否有可能发生重复,因为批量插入发生在多个线程中。意味着,当线程T1执行插入记录(C1,J1)时,另一个线程也执行相同的插入,从而执行重复。

我发现,mongoDB在执行插入时采用行级别(文档级别)锁定,因此有可能发生这种情况,但不确定。

任何人都可以在此建议或阐明。

这是第一次在mongoDB中工作,所以不知道它(我唯一的经验是关系数据库,但mongoDB并发不像关系数据库那样工作)。

编辑:从一些文档中,了解到mongoDB上的INSERT获取了一个write锁定/锁存器,并且每个数据库/每个集合在任何时间点都只能有一个写入器锁定。

有了这个,无论发生多少并行插入,它们都会排队并且不会同时执行,因此我的场景永远不会发生。

有人可以确认(或)告诉我。

0 个答案:

没有答案