MongoDB查询在非常大的集合上运行缓慢 - 根据字段检索不同的文档

时间:2014-12-12 08:52:55

标签: mongodb mongodb-query

我遇到一些问题,使我的MongoDB查询更有效率。我的文件格式如下:

{
  _id: UUID,
  p: 'some.path',
  t: 'Fri Dec 12 2014 09:26:18 GMT+0100 (CET)',
  v: 123.4
}

其中索引路径和时间戳。该路径是我们系统中的标识符,我们有大约15-16000个不同的路径。我们的日志记录应用程序每秒将这些值记录在大约3000个文档中,并且运行正常而没有问题。

我的问题是及时检索"快照"这些价值观;我想在给定时间进行查询以了解所有信号是什么。这意味着对于每个路径,获取时间戳小于或等于请求的时间戳的最新值,并返回所有这些文档。

所以在SQL /伪代码中:

results = []
for each distinct path:
  find document where p == path and t <= timestamp, order by t desc, limit 1
    results.push(result)

通过使用带匹配,排序和分组的聚合,我也获得了相同的结果:

aggregate(
[
    { $match: { t : { $lte: timestamp}} },
    { $sort: { t : -1 } },
    { $group:
    {
    _id: { x: "$p"},
    p: { $last: "$p"},
    t: { $last: "$t"},
    v: { $last: "$v"}
    }
    }
]

然而,由于我的收藏目前大约有2.5亿条记录,所以这两种方法都很慢。我真的坚持这个,似乎无法让它发挥作用。如果我找不到这个问题的解决方案,我可能不得不开始寻找可能更好地支持这些类型查询的其他数据库。

0 个答案:

没有答案