2010-04-09 43 views
11

CouchDB xử lý xung đột khi thực hiện sao chép hai chiều như thế nào?Độ phân giải xung đột Couchdb

Ví dụ: Cho phép nói có hai cơ sở dữ liệu sổ địa chỉ (trong máy chủ A và B). Có một tài liệu cho Jack chứa các chi tiết liên lạc của Jack.

  1. Máy chủ A và B được sao chép và cả hai đều có cùng một phiên bản tài liệu Jack.
  2. Trong máy chủ A, không có điện thoại di động của Jack.
  3. Trong máy chủ B, địa chỉ của Jack được cập nhật.
  4. Bây giờ khi chúng tôi thực hiện sao chép hai chiều, có xung đột.

Làm thế nào để couchDB xử lý? Nếu chúng ta bắt đầu sao chép trong một chương trình Java, có cách nào để biết liệu có bất kỳ xung đột nào từ chương trình java không?

Trả lời

17

Các CouchDB wiki có một explanantion chi tiết: http://wiki.apache.org/couchdb/Replication_and_conflicts

Tóm lại: CouchDB không cố gắng kết hợp các phiên bản xung đột. Cả hai phiên bản được sao chép vào cả hai bản sao. Một thuật toán xác định (nhưng từ một quan điểm ứng dụng có thể tùy ý) chọn một trong số chúng là phiên bản "chính thức". Nó sẽ chọn cùng một phiên bản trên cả hai bản sao. Chỉ phiên bản này sẽ hiển thị theo mặc định và trong chế độ xem. Ứng dụng của bạn có thể truy vấn các phiên bản khác và hợp nhất chúng theo nhu cầu của nó (có thể liên quan đến người dùng bằng cách hiển thị tất cả các phiên bản trên màn hình). Nếu ứng dụng của bạn không tìm kiếm xung đột, một trong hai bản cập nhật sẽ bị mất hiệu quả.

Nếu bạn không sử dụng API sao chép hoặc tải hàng loạt (nhưng API REST cho mỗi tài liệu), bản cập nhật xung đột sẽ không đưa nó vào cơ sở dữ liệu, nhưng sẽ bị từ chối với lỗi 409. Bạn phải hợp nhất trước khi cố cập nhật lại (giống như trong Subversion).

Các vấn đề liên quan