Đây là câu hỏi đầu tiên chính thức của tôi ở đây; Tôi hoan nghênh bất kỳ/tất cả những lời chỉ trích của bài viết của tôi để tôi có thể tìm hiểu làm thế nào để trở thành một công dân SO tốt hơn.So sánh MongoDB và Hiệu ứng Chèn số lượng lớn RethinkDB
Tôi đang kiểm tra DBMS phi quan hệ để lưu trữ danh sách chọn không tham gia email có khả năng lớn, nghiêng về MongoDB hoặc RethinkDB, sử dụng thư viện máy khách Python tương ứng. Điểm đau của ứng dụng của tôi là hiệu suất chèn số lượng lớn, vì vậy tôi đã thiết lập hai kịch bản Python để chèn 20.000 bản ghi theo lô 5.000 vào cả một MongoDB và một bộ sưu tập RethinkDB.
Các MongoDB python script mongo_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
collection = mongo.recips
i = 0
batch_counter = 0
batch = []
while i <= NUM_LINES:
i += 1
recip = {
'address': "test%[email protected]%d.com" % (i, i)
}
if batch_counter <= BATCH_SIZE:
batch.append(recip)
batch_counter += 1
if (batch_counter == BATCH_SIZE) or i == NUM_LINES:
collection.insert(batch)
batch_counter = 0
batch = []
if __name__ == '__main__':
insert_records()
Các gần như giống hệt RethinkDB python script rethink_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
i = 0
batch_counter = 0
batch = []
while i <= NUM_LINES:
i += 1
recip = {
'address': "test%[email protected]%d.com" % (i, i)
}
if batch_counter <= BATCH_SIZE:
batch.append(recip)
batch_counter += 1
if (batch_counter == BATCH_SIZE) or i == NUM_LINES:
r.table('recip').insert(batch).run()
batch_counter = 0
batch = []
if __name__ == '__main__':
insert_records()
Trong môi trường dev của tôi, kịch bản MongoDB chèn 20.000 bản ghi trong dưới một thứ hai:
$ time python mongo_insert_test.py
real 0m0.618s
user 0m0.400s
sys 0m0.032s
Trong cùng một môi trường, R tập lệnh ethinkDB hoạt động chậm hơn nhiều, chèn 20.000 bản ghi trong hơn 2 phút:
$ time python rethink_insert_test.py
real 2m2.502s
user 0m3.000s
sys 0m0.052s
Tôi có thiếu thứ gì đó lớn ở đây liên quan đến cách hai DBMS này hoạt động không? Tại sao RethinkDB hoạt động quá tệ với thử nghiệm này?
Máy tính của tôi có bộ nhớ khả dụng khoảng 1,2 GB cho các thử nghiệm này.
Tiêu đề nói tất cả;) http://www.rethinkdb.com/blog/the-benchmark-youre-reading-is-probably-wrong/ –
@FabianoPS, tôi đã không thực sự nhắm đến bất kỳ điều gì khoa học ở đây ; chỉ cần tự hỏi tại sao nó mất một đơn đặt hàng của cường độ nhiều thời gian hơn để làm các hoạt động tương tự trong suy nghĩ lại như MongoDB. Tôi không tin rằng độ trễ mạng/đĩa đóng nhiều vai trò (nếu có). Suy nghĩ lại đã xuất bản bản cập nhật giải quyết vấn đề này theo cách có ý nghĩa (không hời hợt). – njyunis
Hi @njyunis, bài viết này rất thú vị trong thông điệp cốt lõi của nó: có rất nhiều giải thích tốc độ viết, đây không phải là câu trả lời –