千万级别数据关于聚合操作的数据统计

发布问题 回首页

千万级别数据关于聚合操作的数据统计

★ 0 成为第一个关注这个问题的人

现有一个集合数据量大概1千5百多万条,每天还会不断增加。
数据结构大概这样`{number: ’1A1001′, visDate: ‘时间’}`,这里面number字段规格为 /^1[A-Z]\d{4}$/,visDate 为时间字段。
我想查询某个时间段中 包含A的number字段的并且正对number字段分组获取每种number的总条数。
现在使用aggregate聚合查询,语句如下:
`db.getCollection(‘xxx’).aggregate([
{$match: {number: /^1A/, visDate: {$gte: new Date('2017-11-11'), $lt: new Date('2018-01-01')}}},
{$group: {_id: '$number', count: {$sum: 1}}
])`
针对这个集合的number字段有建立索引,但是查阅资料说在经行group聚合操作的时候是不会使用索引的,所以
每次查询结果最低都是5s以上,有没有优化的地方,望大神解答

mrgreensky@163.com 在大约 之前 回答了
  • 提问于
  • Answers3 个
  • 浏览 18 次
  • 最新活跃于

3 个回答3

0
mrgreensky@163.com answered about

求解

0
zxmajunhong answered about


就上图来开,在查询的时候有命中索引,但是实际查询时间并没有减少多少,我现在由于数据库的问题,现在库里只有一百多万条数据,

查询的时间还是需要1s以上。

0
TJ answered about

你把explain的结果贴出来看下,看看是否有用到你的索引。Group stage操作之后是无法用到索引的,但是之前的就可以,比如说你的$match理论上可以用到索引。

问题状态

  • Open

类别

3个参与者

千万级别数据关于聚合操作的数据统计》有12个想法

  1. 谢答,但个人认为不准确,1.mr我觉得不适合实时计算,更贴合后期数据统计需求,2.aggregate必须支持自定义函数,就好像你定义个abc(1,2)一样肯定是计算了,现在的问题是abc(1,2)这个参数我想传个字段进去,比如abc($qty,2)这样….他就不好使了….难道大家没有在aggregate中用字段进行计算的经历么?

发表评论