C# 使用C将许多文档插入Mongodb的最快方法#

C# 使用C将许多文档插入Mongodb的最快方法#,c#,mongodb,C#,Mongodb,我需要创建一个脚本来检查C#列表,然后创建并插入大约320000个mongodb文档。目前,我正在使用foreach循环创建表示mongo文档的C#类,将文档添加到批中,当批大小达到99999时,我将批插入数据库。尽管使用了批插入,但我的脚本需要大约4小时才能完成,这太慢了 foreach (var r in result) { var newdoc = new UserMailingList

我需要创建一个脚本来检查C#列表,然后创建并插入大约320000个mongodb文档。目前,我正在使用foreach循环创建表示mongo文档的C#类,将文档添加到批中,当批大小达到99999时,我将批插入数据库。尽管使用了批插入,但我的脚本需要大约4小时才能完成,这太慢了

            foreach (var r in result)
            {
                var newdoc = new UserMailingList
                {
                    UserId = new Guid(r.rcid),
                    MailingListId = listid,
                    StatusId = 0,
                    IsDeleted = false,
                    Timestamp = DateTime.UtcNow
                };
                batch.Add(newdoc);
                batchsize++;
                if (batchsize == 99999)
                {
                    collection.insertmany(batch)
                    batchsize = 0;
                    batch.Clear();
                }
            }

有没有一种更快的方法可以使用C#mongo客户端实现这一点,或者可以生成表示批插入的javascript代码,以便我可以将其直接粘贴到mongo客户端?

我建议对批插入进行并行化。MongoDB可以很好地处理多个客户端连接。并行化时,还应使用c#drivers异步api(“InsertManyAsync”a.s.o.)

顺便说一句,MongoDB按1000个文档进行批处理,即使您的文档数大于1000个文档

当提到“这些数据库操作太长”是数据库(服务器)度量时,要考虑的其他要点是:DB在重载上,是HDD足够快地处理磁盘IO那么快。 这里还有一些事情需要考虑

PS:320000个文档似乎不多。我们的mongo服务器每2秒持续写入3000..10000个文档。请注意,没有特殊的硬件(6xvCPU a2,2GHz,10GB RAM,带SSD和旧式HDD混合的SAN)。如果您重新启动mongod进程,并且之后脚本的执行速度突然显著加快,那么我猜您的服务器正处于压力之下(如果mongodb不能处理/遵循DML操作,则会在一段时间后减慢)