Tôi đang sử dụng pymongo để thực hiện cập nhật hàng loạt.
Danh sách tên dưới đây là một danh sách riêng biệt của tên (mỗi tên có thể có mutiple tài liệu trong bộ sưu tập)Cập nhật hàng loạt quá chậm
Mã 1:
bulk = db.collection.initialize_unordered_bulk_op()
for name in names:
bulk.find({"A":{"$exists":False},'Name':name}).update({"$set":{'B':b,'C':c,'D':d}})
print bulk.execute()
Mã 2:
bulk = db.collection.initialize_unordered_bulk_op()
counter = 0
for name in names:
bulk.find({"A":{"$exists":False},'Name':name}).update({"$set":{'B':b,'C':c,'D':d}})
counter =counter + 1
if (counter % 100 == 0):
print bulk.execute()
bulk = db.collection.initialize_unordered_bulk_op()
if (counter % 100 != 0):
print bulk.execute()
Tôi có 50000 tài liệu trong bộ sưu tập của mình. Nếu tôi loại bỏ bộ đếm và câu lệnh (Mã 1), mã sẽ bị kẹt! Với câu lệnh if (Mã 2), tôi giả sử rằng thao tác này sẽ không mất nhiều hơn một vài phút nhưng nó đang sử dụng nhiều hơn thế! Bạn có thể vui lòng giúp tôi làm cho nó nhanh hơn hoặc tôi sai trong giả định của tôi ?!
Cảm ơn sự giúp đỡ nhưng tôi nghĩ rằng thời gian bạn đã đưa ra ở trên không chính xác vì chúng không phải là 10000 tài liệu nhưng chỉ một nửa trong số đó (xem xét 0,5 và <= 0,5 đều bằng nhau có thể xảy ra). Ngoài ra, nó sẽ giúp ích nếu bạn có thể chia sẻ cách bạn lập chỉ mục các trường A và Tên cho người mới bắt đầu. Cảm ơn một lần nữa! – amazingCodingExperience
Ngoài ra, làm thế nào để lập chỉ mục sẽ buộc chặt quá trình? Bạn có thể chia sẻ lý thuyết đằng sau điều đó không? – amazingCodingExperience
Đã thêm thông tin vào câu trả lời của tôi. Tuy nhiên, mongodb cung cấp các khóa học trực tuyến khá tốt miễn phí: https://university.mongodb.com/courses/M101P/about Tôi đề nghị bạn nên thực hiện một trong số này để tăng tốc với mongo. – squanto773