我是MongoDB的相对新手,但是从我读到的内容中可以找到各种方法来查找MongoDB数据库中的平均值和值,以及各种优点和缺点。MongoDB中的'AVG'和'SUM'功能,有什么提示?
我主要是要求一种方法,以尽可能高效(快速)的方法找到值的选择和值的选择的平均值之和。
集合中所查询的文件类似这种结构(有很多其他领域):
{
"_id": ObjectId('4e650107580fd649e5000005'),
"date_added": ISODate("2011-09-05T00:00:00Z"),
"value": 1500
}
预先计算之类的款项,在我的应用程序,并不总是可能的,因为值的选择来总结可以改变(基于日期范围 - 例如在开始日期和结束日期之间,平均值是多少)。这是与预先计算平均值相似的问题。
从我读过的文章看,MapReduce绝对不适合实时(即按需)查找,因此这似乎也不存在。
在我查询集合中这样的时刻:(注意:这是使用pymongo
)
response = request.db['somecollection'].find(
{
'date_added': {
'$gte': date_start,
'$lte': date_end
}
},
{
'value':1
}
).limit(500)
然后使用for
环路在响应这样做在Python计算。 500个结果的限制是任意的,以防止它变得太慢。我只是在检索价值,而没有其他领域。
这是做这种calculcation最有效的方法,还是有其他方法来完成我所需要的?
注意事项:
- ,因为我可能会使用分片在未来
- ,因为它是将用于在功能我不能用我的MapReduce不能使用
group
功能飞用户 - 我不能预计算我的总和/平均值,因为总和/平均值的选择几乎总是不同的
- 我看了看周围的计算器和网络尝试和找到如何做这种事情的建议,这是相当开放式
编辑:
我要指出的是,从我上面贴可以是任何的查询返回的文档数从1个文档到数百个,但可能会有大约150个返回文档的最大数量(平均大约60或70)
我绝对会对MapReduce做更多的实验。我知道它会在数据集/查询/等之间有所不同,但在你的情况下,速度足以让用户不太注意(即不到半秒)? – johneth
在500-5000毫秒之间变化,但某些数据集非常大(100M +文档),所以需要一个忙/进度指示器,但速度不够快。当JavaScript引擎从单线程SpiderMonkey升级到V8时,Map-Reduce性能也应该得到改善。 –
啊,这听起来很有希望。目前我的数据集非常小(数以千计而不是数百万计),尽管这将随着时间的推移而增长。 – johneth