Tôi đang làm việc với MongoDB trên dự án hiện tại của tôi và một chút nhầm lẫn về cách thích hợp để xây dựng hỗ trợ cho các sửa đổi đồng thời.MongoDB Mối quan tâm về nguyên tử - Sửa đổi tài liệu trong bộ nhớ
Tôi có một mảng đối tượng. Khi có yêu cầu, tôi muốn kiểm tra phần tử cuối cùng trong mảng đó và đưa ra quyết định có điều kiện về cách phản hồi. Mã của tôi trông giống như sau:
# Find the last object ID in the array.
last_element_id = str(document['objects'][-1])
if last_element_id != the_element_id_the_request_is_responding_to:
db.documents.insert({
...
})
else:
# Append the response to the end of the array.
document['objects'].append(new_element_id)
db.documents.save(document)
Tôi lo ngại về tình hình ở đó:
- Trong xử lý yêu cầu A, tôi tìm ra last_element_id là hợp lệ, và phản ứng nên được nối thêm vào cuối danh sách.
- Trước khi các hoạt động chắp thêm() và lưu() hoàn tất, một yêu cầu khác, B, là được xử lý.
- B cũng thấy last_element_id là hợp lệ, gắn thêm() các phản hồi và tiết kiệm().
- Bây giờ, câu trả lời của A được đặt vào cuối của mảng, nhưng phản hồi không còn theo sau được cho là 'last_element_id' vì phản hồi của B bị giật trước.
Cách thích hợp để xử lý loại logic này trong mô hình nguyên tử của Mongo là gì? Tôi không muốn sử dụng khóa nếu tôi có thể tránh chúng, vì ứng dụng WSGI có thể chạy trong nhiều quá trình cùng một lúc.
Cảm ơn!
Dường như điều này có thể phù hợp với những gì tôi đang làm! Cảm ơn! Sẽ báo cáo lại. –
Hoàn hảo. Cảm ơn! –
@Shekar, bạn có thể dễ dàng đạt được điều này với findandmodify (trường hợp này). kiểm tra câu trả lời của tôi để biết thêm thông tin – RameshVel