优化MongoDB
我有大约1.05亿条类似的记录:优化MongoDB,mongodb,Mongodb,我有大约1.05亿条类似的记录: { "post_id": 1314131221, "date": 1309187001, "upvotes": 2342 } 在MongoDB集合中。 我还有一个关于“post_id”和“date”的索引 那么我需要这样做: db.fb_pages_fans.find({ post_id: 1314131221, date: {"$gt": 1309117001, "$lta": 1309187001} }).sort({date:
{
"post_id": 1314131221,
"date": 1309187001,
"upvotes": 2342
}
在MongoDB集合中。
我还有一个关于“post_id”和“date”的索引
那么我需要这样做:
db.fb_pages_fans.find({
post_id: 1314131221,
date: {"$gt": 1309117001, "$lta": 1309187001}
}).sort({date: 1});
如果我在特定日期设置“日期”:
- 当它返回30条记录时,耗时约130毫秒
- 当它返回90条记录时,耗时约700毫秒
- 当它返回180条记录时,耗时约1200毫秒
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
0 0 0 0 0 1 0 23.9g 24.1g 8m 0 0 0 0|0 0|0 62b 1k 1 18:34:04
0 1 0 0 0 1 0 23.9g 24.1g 8m 21 0 0 0|0 0|0 215b 3k 1 18:34:05
如果您的第一个查询很慢,并且所有的查询都是连续的,类似的查询很快,那么mongo会将查询的数据从磁盘移动到内存中。对于这样大小的数据集,这是相对难以避免的。使用mongostat并检查faults statistic,查看在查询过程中是否出现页面错误。或者,您的索引可能不适合内存,在这种情况下,您可以尝试对它们进行适当的平衡,使其相关的高吞吐量部分始终位于物理内存中
此外,我们讨论的是单个物理数据库还是分片设置?如果您的第一个查询速度慢,而所有的查询都是连续的、类似的查询速度快,那么mongo会将查询的数据从磁盘移动到内存。对于这样大小的数据集,这是相对难以避免的。使用mongostat并检查faults statistic,查看在查询过程中是否出现页面错误。或者,您的索引可能不适合内存,在这种情况下,您可以尝试对它们进行适当的平衡,使其相关的高吞吐量部分始终位于物理内存中 另外,我们讨论的是单个物理数据库还是分片设置