小编Yar*_*ler的帖子

MongoDB聚合性能

我们遇到聚合查询运行很长时间(几分钟)的问题.

采集:

我们收集了2.5亿份文档,每个文档大约有20个字段,集合的总大小为110GB.

我们有"our_id"和dtKey字段的索引.

硬件:

记忆:

24GB RAM(6*4GB DIMMS 1333 Mhz)

磁盘:

Lvm 11TB由4个3TB磁盘盘构成:

  • 600MB/s的最大瞬时数据传输.

  • 7200 RPM主轴.平均延迟= 4.16ms

  • RAID 0

中央处理器:

2*E5-2420 0 @ 1.90GHz共12个内核,24个线程.戴尔R420.

问题:我们正在尝试进行以下聚合查询:

db.our_collection.aggregate(
    [
        {
            "$match":
            {
                "$and":
                    [
                        {"dtKey":{"$gte":20140916}},
                        {"dtKey":{"$lt":20141217}},
                        {"our_id":"111111111"}
                    ]
            }
        },
        {
            "$project":
            {
                "field1":1,
                "date":1
            }
        },
        {
            "$group":
            {
                "_id":
                {
                    "day":{"$dayOfYear":"$date"},
                    "year":{"$year":"$date"}
                },
                "field1":{"$sum":"$field1"}
            }
        }
    ]
);
Run Code Online (Sandbox Code Playgroud)

此查询需要几分钟才能运行,当它运行时我们可以看到以下内容:

  • Mongo目前的运营收益超过300K次
  • 在iostat上,我们看到~100%的磁盘利用率

完成此查询后,它似乎在缓存中,这可以在瞬间完成,

在为3-4个用户运行它之后,似乎第一个已经从缓存中换出,并且查询需要很长时间.

我们测试了匹配部分的计数,看到我们有50K文档的用户以及500K文档的用户,

我们试图只获得匹配的部分:

db.pub_stats.aggregate(
    [
        {
            "$match":
            {
                "$and":
                    [
                        {"dtKey":{"$gte":20140916}},
                        {"dtKey":{"$lt":20141217}},
                        {" our_id ":"112162107"}
                    ]
            } …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query

19
推荐指数
1
解决办法
2万
查看次数

标签 统计

mongodb ×1

mongodb-query ×1