benchmark của tôi:
== dữ liệu thế hệ ==
Tạo 4million hàng (với trăn) dễ dàng với khoảng 350 byte. Mỗi tài liệu có các phím:
- key1, key2 (hai cột ngẫu nhiên để kiểm tra lập chỉ mục, một với cardinality của năm 2000, và một với cardinality của 20)
- longdata: một chuỗi dài để tăng kích thước của mỗi tài liệu
- giá trị: một số đơn giản (const 10) để kiểm tra tập hợp
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)
Tổng kích thước dữ liệu vào khoảng 6GB ở Mông Cổ. (Và 2GB trong postgres)
thử nghiệm == ==
tôi đã làm một số kiểm tra, nhưng một là đủ để kết quả so sánh:
LƯU Ý: Server được khởi động lại, và OS nhớ cache được làm sạch sau mỗi truy vấn, bỏ qua hiệu ứng của bộ nhớ đệm.
QUERY: tổng hợp tất cả các hàng với key1=somevalue
(khoảng 200K hàng) và tổng value
cho mỗi bản đồ key2
- /giảm 10,6 giây
- aggreate 9,7 giây
- nhóm 10,3 giây
truy vấn:
bản đồ/giảm:
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'} })
tổng hợp:
db.testtable.aggregate({ $match: {key1: '663969462d2ec0a5fc34'}}, {$group: {_id: '$key2', pop: {$sum: '$value'}} })
nhóm:
db.testtable.group({key: {key2:1}, cond: {key1: '663969462d2ec0a5fc34'}, reduce: function(obj,prev) { prev.csum += obj.value; }, initial: { csum: 0 } })
Nguồn
2012-12-17 09:23:15
"gần như" giống nhau? Với điểm chuẩn nào? Nhận xét của bạn về cơ bản là vô nghĩa. Và bạn đang so sánh mèo và bò. Ngoài ra bạn biết bản thân rằng MR vẫn còn giới hạn cho luồng đơn .... vì vậy: câu hỏi vô nghĩa và do đó -1 –
@ user1833746 Đó là một câu hỏi, tôi không muốn giải thích các tiêu chuẩn của mình. Tôi đã hỏi để biết câu trả lời mới cho câu hỏi này. Hãy bỏ phiếu để cho phép người khác trả lời. –
bạn có thấy câu hỏi này (và câu trả lời) không? http://stackoverflow.com/questions/12139149/mapreduce-with-mongodb-really-really-slow-30-hours-vs-20-minutes-in-mysql-for –