Tah*_*gir 53 performance mapreduce mongodb aggregation-framework
mongodb 2.2中引入的聚合框架是否比map/reduce有任何特殊的性能改进?
如果是,为什么,如何以及多少?
(我已经为自己做过测试了,性能几乎相同)
Asy*_*sky 63
我亲自运行的每个测试(包括使用您自己的数据)都显示聚合框架比map reduce快多倍,并且通常快一个数量级.
只取你发布的数据的十分之一(但不是清除操作系统缓存,首先加热缓存 - 因为我想测量聚合的性能,而不是在数据页面中花多长时间)我得到了这个:
MapReduce:1,058ms
聚合框架:133ms
从聚合框架中删除$ match并从mapReduce中删除{query:}(因为两者都只使用索引而不是我们想要测量的)并通过key2对整个数据集进行分组:
MapReduce:18,803ms
聚合框架:1,535ms
这些与我以前的实验非常一致.
我的基准:
==数据生成==
生成400万行(使用python),大约350个字节.每个文档都有以下键:
(约200K行)并
db = Connection('127.0.0.1').test # mongo connection
random.seed(1)
for _ in range(2):
key1s = [hexlify(os.urandom(10)).decode('ascii') for _ in range(10)]
key2s = [hexlify(os.urandom(10)).decode('ascii') for _ in range(1000)]
baddata = 'some long date ' + '*' * 300
for i in range(2000):
data_list = [{
'key1': random.choice(key1s),
'key2': random.choice(key2s),
'baddata': baddata,
'value': 10,
} for _ in range(1000)]
for data in data_list:
db.testtable.save(data)
key1=somevalue为每个行求和value
查询:
的map/reduce:
key2
骨料:
db.testtable.mapReduce(function(){emit(this.key2, this.value);}, function(key, values){var i =0; values.forEach(function(v){i+=v;}); return i; } , {out:{inline: 1}, query: {key1: '663969462d2ec0a5fc34'} })
组:
db.testtable.aggregate({ $match: {key1: '663969462d2ec0a5fc34'}}, {$group: {_id: '$key2', pop: {$sum: '$value'}} })
| 归档时间: |
|
| 查看次数: |
17303 次 |
| 最近记录: |