在区块中插入MongoDB需要不同的时间

在区块中插入MongoDB需要不同的时间,mongodb,Mongodb,我是MongoDB的新手,并开始做一个POC,以提高大块插入MongoDB的大型日志文件的时间。我的区块大小是恒定的(~2MB),我观察到的是20个区块中的一个或两个区块(随机)突然之间需要多花20-30%的时间感谢他人 我确实改变了块大小,看到这种行为随着块大小的减小而消失。我还做了一个分析,看到一个辅助线程通过ping检查mongo db服务器的状态,在从服务器接收消息时,额外的时间被消耗掉了。我猜这是因为并发写锁 欢迎任何专家就此提出建议,也欢迎提出建议 提前谢谢 我一直在使用和测量时间的

我是MongoDB的新手,并开始做一个POC,以提高大块插入MongoDB的大型日志文件的时间。我的区块大小是恒定的(~2MB),我观察到的是20个区块中的一个或两个区块(随机)突然之间需要多花20-30%的时间感谢他人

我确实改变了块大小,看到这种行为随着块大小的减小而消失。我还做了一个分析,看到一个辅助线程通过ping检查mongo db服务器的状态,在从服务器接收消息时,额外的时间被消耗掉了。我猜这是因为并发写锁

欢迎任何专家就此提出建议,也欢迎提出建议

提前谢谢

我一直在使用和测量时间的代码片段:

 DateTime dt3 = DateTime.Now;
                MongoInsertOptions options = new MongoInsertOptions();
                options.WriteConcern = WriteConcern.Unacknowledged;
                options.CheckElementNames = true;
                //var task = InsertBatchAsync<LogEvent>(collection, logEventsChunk.LogEvents);                
                collection.InsertBatch(logEventsChunk.LogEvents, options);

                Console.WriteLine("Chunk Number: " + chunkCount.ToString() + Environment.NewLine 
                    + "Write time for " + logEventsChunk.LogEvents.Count + " logs in MONGODB = " + DateTime.Now.Subtract(dt3).TotalSeconds + "s" + Environment.NewLine);
                mongoDBInsertionTotalTime += DateTime.Now.Subtract(dt3).TotalSeconds;
DateTime dt3=DateTime.Now;
MongoInsertOptions选项=新的MongoInsertOptions();
options.WriteConcern=WriteConcern.Unacknowledged;
options.CheckElementNames=true;
//var task=InsertBatchAsync(collection,logEventsChunk.LogEvents);
collection.InsertBatch(logEventsChunk.LogEvents,options);
Console.WriteLine(“区块编号:”+chunkCount.ToString()+Environment.NewLine
+MONGODB中“+LogEventsHunk.LogEvents.Count+”日志的写入时间=“+DateTime.Now.Subtract(dt3.TotalSeconds+”s“+Environment.NewLine);
mongoDBInsertionTotalTime+=DateTime.Now.Subtract(dt3.TotalSeconds);

上面的代码片段对我得到的每个数据块都进行循环。

将tcpClient(发送和接收)的缓冲区大小增加到1GB有帮助。它们在MongoDefault.cs下作为公共财产公开

在分析C#driver(Mongo)时,我发现瓶颈在于复制网络流。所以我增加了缓冲区,效果很好


另外,由于我的DB服务器是本地托管的,我已经摆脱了C#driver中的并发服务器状态回调。

您似乎在谈论切分。对于像stackoverflow这样的编程站点,数据库管理是“离题的”。你想要的是。我们可以回答这个问题。你是通过跨多个服务器的网络来完成的吗?服务器之间的ping时间是否一致?我假设在区块分割/迁移过程中,您的系统上有一个写负载,这对所涉及的时间有影响。有趣的是,它都在本地主机中。我只有一个服务器实例,也没有使用分片。嗯,我已经将默认的tcp接收和发送缓冲区大小增加到大约500MB,到目前为止,我还没有观察到插入时间的变化。可能这就是在将数据流复制到网络流时发生时间变化并导致插入时间变化的原因。在c#驱动程序代码中的副本周围还添加了一个静态锁,以启用同步写入访问。服务器状态检查ping也会同时调用此代码。