Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程大容量插入能否在mongoDB中生成重复记录_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# 多线程大容量插入能否在mongoDB中生成重复记录

C# 多线程大容量插入能否在mongoDB中生成重复记录,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我正在mongoDB中执行一些操作,其中在多线程上执行大容量插入writemanayasync()。比如说,有两个实体J和C(集合)。每次更新文档Jam获取所有C,同样,每次更新文档Cam获取所有J,并在文档中执行插入,比如XXX 例如(伪):假设有(J1..J3)和C1。。C3因此,如果J1更新,则会使用J1 X(C1..C3)执行操作 整个操作发生在多个线程上。我在集合XXX中看到一些重复记录,它们具有相同的J和C(我的意思是具有相同的id) 问题:由于批量插入发生在多个线程中,是否有可能发

我正在mongoDB中执行一些操作,其中在多线程上执行大容量插入
writemanayasync()
。比如说,有两个实体
J
C
(集合)。每次更新文档
J
am获取所有
C
,同样,每次更新文档
C
am获取所有
J
,并在文档中执行
插入
,比如
XXX

例如(伪):假设有
(J1..J3)
C1。。C3
因此,如果J1更新,则会使用
J1 X(C1..C3)
执行操作

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

问题:由于批量插入发生在多个线程中,是否有可能发生重复。也就是说,当线程T1执行记录插入(C1,J1)时,另一个线程也在执行相同的插入,因此重复

我发现,mongoDB在执行insert时使用了行级(文档级)锁,因此这种情况有可能发生,但不确定

任何人都可以在这方面提出建议或提供一些启示

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

编辑:从一些文档中了解到,mongoDB上的
INSERT
会获得
write
lock/lack,而且每个DB/每个集合在任何时间点都可能只有一个writer锁

这样,无论发生多少并行插入,它们都将排队,并且不会同时执行,因此我所说的场景永远不会发生


请确认(或)让我知道。

从数据库的角度来看,有重复记录的可能性很小,即生成重复的id。但是,如果您得到的是重复的记录,但没有id,我建议您重新使用线程方法,很可能您会发现某种数据竞赛。@Saleem,可能是,但不否认这一事实。但我只是想确定一下;所以我可以集中精力在那部分,还有我的两分钱。确保您的线程具有私有数据,并且不共享任何内容。数据并行性。“又称分而治之。”萨利姆,是的,这已经被解决了。我不希望有任何复制品,但我正在得到。may需要重新检查我的逻辑一次。如果我尝试使用多处理进行批量插入,我遇到重复的
\u id
错误。我从数据库的角度使用pymongo(mongodb python驱动程序),几乎不可能有重复的记录,即生成重复的id。但是,如果您得到的是重复的记录,而不是id,我建议您重新使用线程方法,很可能您会发现某种数据竞赛。@Saleem,可能是,但不否认这一事实。但我只是想确定一下;所以我可以集中精力在那部分,还有我的两分钱。确保您的线程具有私有数据,并且不共享任何内容。数据并行性。“又称分而治之。”萨利姆,是的,这已经被解决了。我不希望有任何复制品,但我正在得到。may需要重新检查我的逻辑一次。如果我尝试使用多处理进行批量插入,我遇到重复的
\u id
错误。我正在使用pymongo(mongodb python驱动程序)