Điều đầu tiên bạn phải quyết định là một chính sách chung về việc bên nào được coi là "có thẩm quyền" trong trường hợp có những thay đổi mâu thuẫn.
Tức là: giả sử Bản ghi số 125 được thay đổi trên máy chủ vào 10 giờ tối ngày 5 tháng 1 và bản ghi tương tự được thay đổi trên một trong các điện thoại (hãy gọi là Máy khách A) vào lúc 11 giờ đêm ngày 5 tháng 1. Lần đồng bộ cuối cùng là vào ngày 3 tháng 1. Sau đó, người dùng kết nối lại vào ngày 8 tháng 1.
Việc xác định những gì cần thay đổi là "dễ dàng" theo nghĩa là cả máy khách và máy chủ đều biết ngày của đồng bộ cuối cùng, vì vậy bất kỳ thứ gì được tạo hoặc cập nhật (xem bên dưới để biết thêm về điều này) kể từ đồng bộ cuối cùng cần được điều chỉnh.
Vì vậy, giả sử rằng bản ghi được thay đổi duy nhất là # 125. Bạn có thể quyết định rằng một trong hai phiên bản tự động "thắng" và ghi đè phiên bản kia hoặc bạn cần hỗ trợ giai đoạn điều hòa trong đó người dùng có thể quyết định phiên bản nào (máy chủ hoặc máy khách) là phiên bản chính xác, ghi đè phiên bản còn lại.
Quyết định này là cực kỳ quan trọng và bạn phải cân nhắc "vai trò" của khách hàng. Đặc biệt nếu có xung đột tiềm ẩn không chỉ giữa máy khách và máy chủ, mà trong trường hợp các máy khách khác nhau có thể thay đổi (các) bản ghi giống nhau.
[Giả sử rằng # 125 có thể được sửa đổi bởi một ứng dụng khách thứ hai (Ứng dụng khách B) thì có khả năng là Ứng dụng khách B, chưa được đồng bộ hóa, sẽ cung cấp một phiên bản khác của cùng một bản ghi, khiến cho việc giải quyết xung đột trước đó trở nên sôi nổi]
Về điểm " đã tạo hoặc cập nhật " ở trên ... làm cách nào bạn có thể xác định đúng một bản ghi nếu nó được bắt nguồn từ một trong các ứng dụng khách (giả sử điều này có ý nghĩa trong miền sự cố của bạn)? Giả sử ứng dụng của bạn quản lý một danh sách các liên hệ công việc. Nếu Khách hàng A nói rằng bạn phải thêm một John Smith mới được tạo và máy chủ có một John Smith được tạo ngày hôm qua bởi Khách hàng D ... bạn có tạo hai bản ghi vì bạn không thể chắc chắn rằng chúng không phải là những người khác nhau? Bạn sẽ yêu cầu người dùng hòa giải xung đột này chứ?
Khách hàng có "quyền sở hữu" một tập hợp con dữ liệu không? Tức là nếu Khách hàng B được thiết lập để trở thành "thẩm quyền" về dữ liệu cho Khu vực số 5 thì Khách hàng A có thể sửa đổi / tạo bản ghi cho Khu vực số 5 hay không? (Điều này sẽ giúp giải quyết xung đột dễ dàng hơn, nhưng có thể không khả thi đối với tình huống của bạn).
Tóm lại, các vấn đề chính là:
- Cách xác định "danh tính" khi xem xét rằng các máy khách tách rời có thể không truy cập vào máy chủ trước khi tạo bản ghi mới.
- Tình huống trước đó, bất kể giải pháp phức tạp đến đâu, có thể dẫn đến việc trùng lặp dữ liệu, vì vậy bạn phải thấy trước cách giải quyết các vấn đề này theo định kỳ và cách thông báo cho khách hàng rằng những gì họ coi là "Bản ghi # 675" đã thực sự được hợp nhất với / thay thế bởi Bản ghi # 543
- Quyết định xem xung đột sẽ được giải quyết bằng fiat (ví dụ: "Phiên bản máy chủ luôn chiếm ưu thế của máy khách nếu phiên bản cũ đã được cập nhật kể từ lần đồng bộ cuối cùng") hoặc bằng cách can thiệp thủ công
- Trong trường hợp fiat , đặc biệt nếu bạn quyết định rằng ứng dụng khách được ưu tiên, bạn cũng phải quan tâm đến cách đối phó với các ứng dụng khách khác, chưa được đồng bộ hóa có thể có một số thay đổi sắp tới.
- Các mục trước đây không tính đến mức độ chi tiết của dữ liệu của bạn (để làm cho mọi thứ đơn giản hơn để mô tả). Chỉ cần nói rằng thay vì lập luận ở cấp "Bản ghi", như trong ví dụ của tôi, bạn có thể thấy thích hợp hơn để ghi lại sự thay đổi ở cấp trường. Hoặc để làm việc trên một tập hợp các bản ghi (ví dụ: Bản ghi cá nhân + Bản ghi địa chỉ + Bản ghi danh bạ) tại một thời điểm coi tổng hợp của chúng như một loại "Bản ghi Meta".
Thư mục:
Tất nhiên, nhiều hơn về điều này trên Wikipedia .
Một thuật toán đồng bộ hóa đơn giản của tác giả Vdirsyncer
Bài viết OBJC về đồng bộ hóa dữ liệu
SyncML®: Đồng bộ hóa và quản lý dữ liệu di động của bạn (Đặt trên O'Reilly Safari)
Các loại dữ liệu được sao chép không có lỗi
Nhân rộng lạc quan YASUSHI SAITO (Phòng thí nghiệm HP) và MARC SHAPIRO (Microsoft Research Ltd.) - Khảo sát điện toán ACM, Vol. V, số N, 3 2005.
Alexander Traud, Juergen Nagler-Ihlein, Frank Kargl và Michael Weber. 2008. Đồng bộ hóa dữ liệu theo chu kỳ thông qua sử dụng lại SyncML. Trong Kỷ yếu của Hội nghị Quốc tế lần thứ IX về Quản lý Dữ liệu Di động (MDM '08). Hiệp hội Máy tính IEEE, Washington, DC, Hoa Kỳ, 165-172. DOI = 10.1109 / MDM.2008.10 http://dx.doi.org/10.1109/MDM.2008.10
Lam, F., Lam, N., and Wong, R. 2002. Đồng bộ hóa hiệu quả cho dữ liệu XML di động. Trong Kỷ yếu của Hội nghị quốc tế lần thứ 11 về quản lý thông tin và tri thức (McLean, Virginia, Hoa Kỳ, 04-09 tháng 11 năm 2002). CIKM '02. ACM, New York, NY, 153-160. DOI = http://doi.acm.org/10.1145/584792.584820
Cunha, PR và Maibaum, TS 1981. Tài nguyên & sự đều; kiểu dữ liệu trừu tượng + đồng bộ hóa - Một phương pháp luận cho lập trình hướng thông điệp -. Trong Kỷ yếu của Hội nghị quốc tế lần thứ 5 về Kỹ thuật Phần mềm (San Diego, California, Hoa Kỳ, 09 - 12 tháng 3 năm 1981). Hội nghị quốc tế về kỹ thuật phần mềm. IEEE Press, Piscataway, NJ, 263-272.
(Ba mục cuối cùng là từ thư viện kỹ thuật số ACM, không biết bạn có phải là thành viên hay không hay bạn có thể lấy chúng qua các kênh khác).
Từ trang Dr.Dobbs :
- Tạo ứng dụng với SQL Server CE và SQL RDA bởi Bill Wagner ngày 19 tháng 5 năm 2004 (Các phương pháp hay nhất để thiết kế ứng dụng cho cả máy tính để bàn và máy tính di động - Windows / .NET)
Từ arxiv.org:
- Loại dữ liệu JSON được sao chép không có xung đột - bài báo mô tả việc triển khai JSON CRDT (Các kiểu dữ liệu được sao chép không có xung đột - CRDT - là một họ cấu trúc dữ liệu hỗ trợ sửa đổi đồng thời và đảm bảo sự hội tụ của các bản cập nhật đồng thời như vậy).