我正在mongoDB中执行一些操作,在多个线程上进行批量插入WritemanyAsync()
。比如,有两个实体J
和C
(收集)。每次更新文档J
时,我都会获取所有C
,同样对于文档C
的每次更新,我都会在文档中提取所有J
并执行INSERT
XXX
。
例如(Pseudo):假设有(J1 .. J3)
和C1 .. C3
,因此如果J1更新,则J1 X (C1 .. C3)
会发生操作。
整个操作发生在多个线程上。我在集合XXX
中看到一些重复记录,它们具有相同的J
和C
(我的意思是相同的ID)。
问题:是否有可能发生重复,因为批量插入发生在多个线程中。意味着,当线程T1执行插入记录(C1,J1)时,另一个线程也执行相同的插入,从而执行重复。
我发现,mongoDB在执行插入时采用行级别(文档级别)锁定,因此有可能发生这种情况,但不确定。
任何人都可以在此建议或阐明。
这是第一次在mongoDB中工作,所以不知道它(我唯一的经验是关系数据库,但mongoDB并发不像关系数据库那样工作)。
编辑:从一些文档中,了解到mongoDB上的INSERT
获取了一个write
锁定/锁存器,并且每个数据库/每个集合在任何时间点都只能有一个写入器锁定。
有了这个,无论发生多少并行插入,它们都会排队并且不会同时执行,因此我的场景永远不会发生。
有人可以确认(或)告诉我。