Tuyên bố miễn trừ Đây là tất cả những điều thú vị nhất của tôi, vì vậy xin đừng đóng đinh tôi nếu tôi có lỗi. Tuy nhiên, hãy sửa tôi.
Tại sao phải không?
- Tiền đề: Cơ sở dữ liệu, theo định nghĩa, không được kết nối với nhau
- oplog entries are always idempotent
- Các Oplog là một capped collection, with a guarantee of preserving the insert order
Giả sử lý song song thực sự của các truy vấn được áp dụng. Vì vậy, chúng tôi có hai truy vấn đến cùng một lúc và chúng tôi cần phải quyết định cái nào để chèn vào oplog trước. Người đầu tiên lấy khóa sẽ viết đầu tiên, phải không? Ngoại trừ, có một vấn đề. Giả sử truy vấn đầu tiên là một truy vấn đơn giản db.collection.update({_id:"foo"},{$set:{"bar":"baz"}})
trong khi truy vấn khác phức tạp hơn và mất nhiều thời gian hơn để đánh giá tính chính xác. Vì vậy, để ngăn chặn điều đó, một khóa phải được thực hiện khi đến và được phát hành sau khi mục nhập oplog idempotent được viết.
Đây là nơi tôi phải dựa vào trí nhớ của tôi
Tuy nhiên, các truy vấn không được áp dụng song song. Truy vấn được xếp hàng đợi và được đánh giá theo thứ tự đến. Cơ sở dữ liệu bị khóa khi áp dụng các truy vấn sau khi chúng chạy qua trình tối ưu hóa truy vấn. Trong khóa đó, các truy vấn oplog idempotent được ghi vào oplog. Vì cơ sở dữ liệu không được kết nối với nhau và chỉ có một truy vấn có thể được áp dụng cho cơ sở dữ liệu tại bất kỳ thời điểm nào, khóa trên cơ sở dữ liệu là đủ.
Không có hai truy vấn thay đổi dữ liệu có thể được áp dụng cho cùng một cơ sở dữ liệu đồng thời, vậy tại sao một khóa phải được đặt trên oplog?
Rõ ràng, một khóa được thực hiện trên cơ sở dữ liệu cục bộ. Tuy nhiên, kể từ khi một khóa đã được thực hiện trên dữ liệu, tôi không thấy lý do tại sao.* scratchingMyHead *
Nguồn
2015-11-16 22:43:42
Hm, tôi đã đọc tài liệu, nhưng tôi vẫn không thể tin được. Vì các mục nhập oplog là idempotent và cơ sở dữ liệu bị khóa trên ứng dụng, sẽ thực sự không cần nó ... Tôi thực sự không hiểu. –
Bài đăng trên blog này cũng đáng để đọc. Tác giả đã gặp phải 'khóa toàn cầu' này khi phát triển một hệ thống số liệu thời gian thực. – Jaco
Quên thêm liên kết: link: http: //daprlabs.com/blog/blog/2014/04/19/mongodb/. Xin lưu ý rằng blogger làm việc cho Microsoft và một số kết luận của ông dường như hơi thiên vị. – Jaco