pymongo count 很慢
三万条数据, 每条数据只包含一个随机数 {"digit": 随机数}
要求: 统计出现最多次数的数字
数据库表 table
def main():
digits = []
for d in table.find():
n = d['digit']
digits.append(n)
dig = set(digits)
news = []
i = 0
for d in dig:
c = table.find({"digit": d}).count()
zz = (d, c)
news.append(zz)
print(i)
i += 1
if __name__ == '__main__':
start = time.time()
main()
print('Cost: {}'.format(time.time() - start))
运行一次需要五六分钟吧, 用多线程开100也快不了多少, 风扇还特响...
请问正确姿势是怎样的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正确的姿势是使用aggregation.
$group的用户可以参考文档。
需要注意的是,这样的需求现实当中出现的可能性不高,估计你这是一道练习题目。实际上就算使用了Aggregatoin,仍然需要遍历整个集合的所有数据才有可能找出出现最多的数字,所以当集合总记录数比较大的时候,这样的全表遍历操作怎么样都不可能会快,通常也只有在OLAP场景下才有这样的查法,而OLAP通常对速度要求不高。所以仅从理论上讨论,应该使用aggregation framework,但是真实需求还是需要再做具体分析。