如何提高查询的效果

时间:2015-05-15 11:43:05

标签: node.js rethinkdb nosql

r.db('DB').table('TB').group('message').map(function(doc){
  return {
    count: 1,
    from: doc('timestamp'),
    to: doc('timestamp'),
    browsers: r([doc('ua')('family')])
  }
}).reduce(function(left, right){
  return {
    count: left('count').add(right('count')),
    from: r.branch(left('from').lt(right('from')), left('from'), right('from')),
    to: r.branch(left('to').gt(right('to')), left('to'), right('to')),
    browsers: left('browsers').setUnion(right('browsers'))
  }
}).ungroup().orderBy(r.desc(r.row('reduction')('count'))).limit(100)

我想做的是:

  1. message
  2. 对所有文件进行分组
  3. 查找每个组的最早和最新时间​​戳
  4. 查找群组中的所有不同标签
  5. 我希望结果如下:

    {
        'message': 'message content shared by the group',
        'earliest': 1431307840000,
        'latest': 1431307849999,
        'tags': ['tag1', 'tag2', 'tag3']
    }
    

    我需要经常执行此查询(以呈现网页的初始内容),因此性能是一个问题。但表现非常令人沮丧。使用15k文档表,此查询执行4.5s。 有关如何改进的想法吗?

    查询的个人资料在这里:

    [
      {
        "description": "Evaluating limit.",
        "duration(ms)": 4134.771499,
        "sub_tasks": [
          {
            "description": "Evaluating orderby.",
            "duration(ms)": 4134.327403,
            "sub_tasks": [
              {
                "description": "Evaluating ungroup.",
                "duration(ms)": 4113.544033,
                "sub_tasks": [
                  {
                    "description": "Evaluating reduce.",
                    "duration(ms)": 4113.241578,
                    "sub_tasks": [
                      {
                        "description": "Evaluating map.",
                        "duration(ms)": 0.082467,
                        "sub_tasks": [
                          {
                            "description": "Evaluating group.",
                            "duration(ms)": 0.073697,
                            "sub_tasks": [
                              {
                                "description": "Evaluating table.",
                                "duration(ms)": 0.028392,
                                "sub_tasks": [
                                  {
                                    "description": "Evaluating db.",
                                    "duration(ms)": 0.015104,
                                    "sub_tasks": [
                                      {
                                        "description": "Evaluating datum.",
                                        "duration(ms)": 0.001565,
                                        "sub_tasks": []
                                      }
                                    ]
                                  },
                                  {
                                    "description": "Evaluating datum.",
                                    "duration(ms)": 0.000356,
                                    "sub_tasks": []
                                  }
                                ]
                              },
                              {
                                "description": "Evaluating datum.",
                                "duration(ms)": 0.000331,
                                "sub_tasks": []
                              }
                            ]
                          },
                          {
                            "description": "Evaluating func.",
                            "duration(ms)": 0.00122,
                            "sub_tasks": []
                          }
                        ]
                      },
                      {
                        "description": "Evaluating func.",
                        "duration(ms)": 0.000805,
                        "sub_tasks": []
                      },
                      {
                        "description": "Perform read.",
                        "duration(ms)": 4112.207454,
                        "sub_tasks": [
                          {
                            "parallel_tasks": [
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 4044.006493,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 4043.993961,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 4078.153662,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 4078.142774,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 3972.17768,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 3972.167594,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 4024.771149,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 4024.760748,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 4036.958792,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 4036.948958,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 3995.32926,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 3995.318271,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 3916.118836,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 3916.106312,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ],
                              [
                                {
                                  "description": "Perform read on shard.",
                                  "duration(ms)": 3970.473735,
                                  "sub_tasks": [
                                    {
                                      "description": "Do range scan on primary index.",
                                      "duration(ms)": 3970.462526,
                                      "sub_tasks": []
                                    }
                                  ]
                                }
                              ]
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "description": "Evaluating desc.",
                "duration(ms)": 0.003855,
                "sub_tasks": [
                  {
                    "description": "Evaluating func.",
                    "duration(ms)": 0.002151,
                    "sub_tasks": []
                  }
                ]
              },
              {
                "description": "Sorting in-memory.",
                "mean_duration(ms)": 0.014517,
                "n_samples": 1245
              }
            ]
          },
          {
            "description": "Evaluating datum.",
            "duration(ms)": 0.000359,
            "sub_tasks": []
          },
          {
            "description": "Evaluating stream eagerly.",
            "mean_duration(ms)": 0.000061,
            "n_samples": 101
          }
        ]
      }
    ]
    

0 个答案:

没有答案