我有大约105个与此类似的记录:
{
"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});
如果我在特定日期设置“日期”:
当然我说的是第一个查询,第二个和更多查询非常快,但我需要快速查询。
它比我现在使用的PostgreSQL的90条记录要慢得多。为什么这么慢?
顺便说一句。在105mil记录上创建两个“cols”的索引需要 24小时。
它在一台具有12GB RAM的计算机上运行,这是我在执行查询时来自mongostats的日志:
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
答案 0 :(得分:1)
如果您的第一个查询速度很慢且所有后果都很快,那么类似的查询会很快,然后mongo会将查询到的数据从磁盘移动到内存。对于数据集来说,这是相对难以避免的。使用mongostat并检查故障统计信息,以查看在查询期间是否收到了页面故障。或者,您的索引可能不适合内存,在这种情况下,您可以尝试并平衡它们,以便它的相关高吞吐量部分始终在物理内存中。
另外,我们是在讨论单个物理数据库还是分片设置?