插入速度是5000每秒足够MongoDB?

时间:2012-01-05 18:38:28

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

我的文档看起来像这样 -

{   "_id" : ObjectId("4f0565b8440b4b19d407ea29"),   "type" : "web",  
    "when" : ISODate("2012-01-05T08:56:24.134Z"),   "user" : "IIUEBSTJ",  
    "res" : false
}

正如您所看到的,它是一个相当简单的小文档。 _id自动被MongoDB索引。我通过C#MongoDB驱动程序生成这些文档。 MongoDB实例版本2在Ubuntu机箱上运行,具有512 MB RAM和2核CPU。由于我使用的是SDD,因此在发生故障时,我看不到任何明显的插入速度变化。以下是生成这些文档的代码 -

MongoDatabase db = server.GetDatabase("logs");
MongoCollection coll = db.GetCollection("logs");
long ctr = 0;
for (; ; )
{
    Console.WriteLine("Doc# {0}", ctr++); 
    BsonDocument log = new BsonDocument();
    log["type"] = "auth";
    BsonDateTime time = new BsonDateTime(DateTime.Now);
    log["when"] = time;
    log["user"] = RandomString(8); 
    BsonBoolean bol = BsonBoolean.False;
    log["res"] = bol;
    coll.Insert(log);
}

目前我每秒大约需要5k次插入。这够好吗?通过“好”,我想知道这是你加入速度的那种速度吗?

1 个答案:

答案 0 :(得分:3)

作为尝试以建设性的方式回答这个问题,我建议首先考虑一下(正如评论者所建议的那样)适合您的插入次数/秒。这完全取决于你的用例,人们希望你能比这里的任何人更好地回答它。

如果您认为自己应该获得比自己更多的表现(a quick Google search建议the answer is yes),请尝试弄清楚当前的瓶颈在哪里,并将注意力集中在那里。例如:

  1. 您的客户端计算机或服务器上的所有CPU是否都固定为100%?对于客户端,请使用Windows任务管理器或sysinternals中的优秀Process Explorer。对于服务器,请使用top命令。这可能意味着您只需要在该机器上获得更多CPU力。

  2. 客户端或服务器上的一个CPU固定为100%,而其他CPU是空闲的?如果是这种情况,您可能正在研究可以从多线程中受益的单线程进程。如果它在服务器上,那么将写入工作负载扩展到几个客户端可能有所帮助。

  3. 您的其中一台机器是否使用了所有内存?相同的工具可能有助于诊断这一点。

  4. 您的任何一台机器都在使其网络带宽饱和吗?用于诊断Windows的相同工具,或类似Linux的vnStat。如果是这样,您可能需要切换到更快的网络硬件(网卡,交换机,路由器,更好的电缆等)。

  5. 这不是一个讽刺的答案 - 只是试图指出你正确的方向来诊断这种事情。