Mục đích chính của phiên bản là khóa lạc quan.
Khi được bật, giá trị phiên bản được tăng nguyên tử bất cứ khi nào tài liệu được cập nhật.
Điều này cho phép mã ứng dụng của bạn kiểm tra xem các thay đổi đã được thực hiện giữa lần tìm nạp (ví dụ:đưa vào khóa phiên bản 42) và bản cập nhật do đó (đảm bảo giá trị phiên bản vẫn là 42). đã được cập nhật cho tài liệu), mã ứng dụng của bạn có thể xử lý sửa đổi đồng thời.
Khái niệm tương tự thường được sử dụng trong cơ sở dữ liệu quan hệ thay vì khóa bi quan có thể mang lại hiệu suất khủng khiếp. Tất cả các ORM tốt đều cung cấp một tính năng như vậy. Ví dụ:nó được mô tả độc đáo trong tài liệu ObjectDB . Đó là một cơ sở dữ liệu đối tượng được triển khai bằng Java nhưng áp dụng khái niệm tương tự.
bài đăng trên blog được liên kết trong nhận xét của Behlül chứng minh tính hữu ích của khóa lạc quan với một ví dụ cụ thể, nhưng chỉ đối với các thay đổi mảng, hãy xem bên dưới.
Ngược lại, đây là một trường hợp đơn giản mà nó vô dụng:một hồ sơ người dùng có thể được chính chủ nhân của nó chỉnh sửa. Tại đây, bạn có thể loại bỏ việc khóa lạc quan và cho rằng lần chỉnh sửa cuối cùng luôn thắng.
Vì vậy, chỉ bạn mới biết ứng dụng của bạn có cần khóa lạc quan hay không. Trường hợp sử dụng theo trường hợp sử dụng.
Tình huống của Mongoose hơi đặc biệt.
Khóa lạc quan chỉ được bật cho các mảng vì định dạng bộ nhớ trong sử dụng chỉ mục vị trí. Đây là sự cố được mô tả bởi bài đăng trên blog
được liên kết trong bình luận của câu hỏi. Tôi đã tìm thấy giải thích
được đưa ra trong mongoose-orm
danh sách gửi thư khá rõ ràng:nếu bạn cần khóa lạc quan cho các trường khác, bạn cần tự xử lý.
Đây là ý chính
hiển thị cách triển khai chiến lược thử lại cho add
hoạt động. Một lần nữa, cách bạn muốn xử lý nó phụ thuộc vào các trường hợp sử dụng của bạn nhưng nó phải đủ để bạn bắt đầu.
Tôi hy vọng điều này sẽ làm sáng tỏ mọi thứ.
Chúc mừng