【问题标题】:Optimizing MongoDB优化 MongoDB
【发布时间】:2013-01-23 23:21:55
【问题描述】:

我有大约 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: 1});

如果我在特定日期设置“日期”:

  • 当它返回 30 条记录时,大约需要 130 毫秒
  • 当它返回 90 条记录时,大约需要 700 毫秒
  • 当它返回 180 条记录时,大约需要 1200 毫秒

当然我说的是第一个查询,第二个和更多的查询非常快,但我需要快速进行第一个查询。

90 条记录比我现在使用的 PostgreSQL 慢得多。为什么这么慢?

顺便说一句。在 1.05 亿条记录中为上述两个“列”创建索引大约需要 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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    如果您的第一个查询很慢并且所有后续的类似查询很快,那么 mongo 会将查询的数据从磁盘移动到内存。对于这样大小的数据集,这是相对难以避免的。使用 mongostat 并检查故障统计信息以查看您在查询期间是否收到页面故障。或者,可能是您的索引不适合内存,在这种情况下,您可以尝试对它们进行适当的平衡,以使其相关的高吞吐量部分始终在物理内存中。

    另外,我们说的是单个物理数据库还是分片设置?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 2015-01-09
      • 2015-03-06
      • 2021-11-10
      • 2018-02-18
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      相关资源
      最近更新 更多