Trường hợp sử dụng của tôi như sau - Tôi có một bộ sưu tập tài liệu trong mongoDB mà tôi phải gửi để phân tích. Định dạng của các văn bản như sau -Giải pháp cho tìm kiếm hàng loạt và sửa đổi trong MongoDB
{_id: ObjectId ("517e769164702dacea7c40d8"), date: "1359911127494", status: "có sẵn", other_fields ...}
Tôi có quy trình đọc chọn 100 tài liệu đầu tiên có trạng thái : có sẵn được sắp xếp theo ngày và sửa đổi chúng với trạng thái : xử lý. ReaderProcess gửi tài liệu để phân tích. Khi phân tích hoàn tất, trạng thái được đổi thành được xử lý.
Hiện nay quá trình đọc đầu tiên lấy 100 tài liệu được sắp xếp theo ngày và sau đó cập nhật tình trạng -chế biến cho mỗi tài liệu trong một vòng lặp. Có giải pháp nào tốt hơn/hiệu quả hơn cho trường hợp này không?
Ngoài ra, trong tương lai cho khả năng mở rộng, chúng tôi có thể thực hiện nhiều quy trình đọc. Trong trường hợp này, tôi muốn 100 tài liệu được chọn bởi một quy trình đọc không nên được chọn bởi một quy trình đọc khác. Nhưng tìm nạp và cập nhật là các truy vấn riêng biệt ngay bây giờ, vì vậy rất có thể là nhiều quy trình đọc sẽ chọn cùng một tài liệu.
Số lượng lớn findAndModify (có giới hạn) sẽ giải quyết được tất cả các sự cố này. Nhưng tiếc là nó không được cung cấp trong MongoDB. Có giải pháp nào cho vấn đề này?
Bạn viết viết là nguyên tử, tôi giả sử viết cho một tài liệu vì cập nhật bước 2 với nhiều cờ đúng sẽ không nguyên tử trừ khi được sử dụng với cách ly (chỉ với thiết lập không bị chặn). Đúng nếu tôi đã sai lầm. Ngoài câu trả lời tuyệt vời đó. – ameykpatil
Không hoạt động viết nào là nguyên tử. Vì vậy, nếu bạn cập nhật 100 tài liệu như tôi đề nghị toàn bộ hoạt động là nguyên tử. Nó đang sharding an toàn. –
Bạn có chắc MongoDB cập nhật nhiều tài liệu nguyên tử không? Nó là sharding an toàn nhưng đó là vì sharding hoạt động theo một cách cụ thể, với các hoạt động định tuyến mongos đến mongod appropiate trong bộ này. – Sammaye