我的文档看起来像这样 -
{ "_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次插入。这够好吗?通过“好”,我想知道这是你加入速度的那种速度吗?
答案 0 :(得分:3)
作为尝试以建设性的方式回答这个问题,我建议首先考虑一下(正如评论者所建议的那样)适合您的插入次数/秒。这完全取决于你的用例,人们希望你能比这里的任何人更好地回答它。
如果您认为自己应该获得比自己更多的表现(a quick Google search建议the answer is yes),请尝试弄清楚当前的瓶颈在哪里,并将注意力集中在那里。例如:
您的客户端计算机或服务器上的所有CPU是否都固定为100%?对于客户端,请使用Windows任务管理器或sysinternals中的优秀Process Explorer。对于服务器,请使用top命令。这可能意味着您只需要在该机器上获得更多CPU力。
客户端或服务器上的一个CPU固定为100%,而其他CPU是空闲的?如果是这种情况,您可能正在研究可以从多线程中受益的单线程进程。如果它在服务器上,那么将写入工作负载扩展到几个客户端可能有所帮助。
您的其中一台机器是否使用了所有内存?相同的工具可能有助于诊断这一点。
您的任何一台机器都在使其网络带宽饱和吗?用于诊断Windows的相同工具,或类似Linux的vnStat。如果是这样,您可能需要切换到更快的网络硬件(网卡,交换机,路由器,更好的电缆等)。
这不是一个讽刺的答案 - 只是试图指出你正确的方向来诊断这种事情。