2008-11-07 8 views
36

Yêu cầu của tôi là tôi có ứng dụng web J2EE của máy chủ và ứng dụng web J2EE của ứng dụng khách. Đôi khi khách hàng có thể truy cập ngoại tuyến. Khi khách hàng trực tuyến, anh ấy sẽ có thể đồng bộ hóa các thay đổi và fro. Ngoài ra tôi sẽ có thể kiểm soát những hàng/bảng cần phải được đồng bộ hóa dựa trên một số bộ lọc/quy tắc. Có bất kỳ khung công tác Java hiện có nào để thực hiện nó không? Nếu tôi cần tự mình thực hiện, các chiến lược khác nhau mà bạn có thể đề xuất là gì?Chiến lược đồng bộ hóa dữ liệu ngoại tuyến/trực tuyến

Một giải pháp trong đầu tôi là duy trì nhật ký sql và thực hiện cùng một câu lệnh ở phía bên kia trong quá trình đồng bộ hóa. Bạn có thấy bất kỳ vấn đề nào với chiến lược này không?

Trả lời

26

Có một số thư viện Java để đồng bộ hóa/sao chép dữ liệu. Hai điều tôi biết là daffodilSymmetricDS. Trong một cuộc sống trước, tôi đã thực hiện một cách ngu xuẩn (trong Java) quá trình sao chép dữ liệu của riêng tôi. Nó có vẻ giống như một loại điều khá đơn giản, nhưng nếu dữ liệu có thể được cập nhật ở nhiều nơi cùng một lúc, thì nó phức tạp một cách khủng khiếp. Tôi khuyên bạn nên sử dụng một trong những dự án nói trên để thử và bỏ qua việc xử lý sự phức tạp này.

15

Vấn đề lớn nhất với đồng bộ hóa là khi người dùng chỉnh sửa nội dung nào đó ngoại tuyến và được chỉnh sửa trực tuyến cùng một lúc. Bạn cần hợp nhất hai phần dữ liệu đã thay đổi hoặc xử lý giao diện người dùng để cho phép người dùng nói phiên bản nào là chính xác. Nếu bạn loại bỏ khả năng của cả hai đang được chỉnh sửa cùng một lúc, sau đó bạn không phải giải quyết vấn đề này dính.

Phương pháp thường là thêm trường 'đã sửa đổi' vào tất cả các bảng và so sánh trường được sửa đổi của khách hàng cho một bản ghi đã cho trong một hàng nhất định, so với ngày sửa đổi của máy chủ. Nếu chúng không khớp, thì bạn thay thế dữ liệu của máy chủ.

Hãy cẩn thận với các phím được tạo tự động - bạn cần đảm bảo tính toàn vẹn dữ liệu của bạn được duy trì khi bạn sao chép từ máy khách sang máy chủ. Việc chạy đúng các câu lệnh SQL một lần nữa trên máy chủ có thể đưa bạn vào một tình huống mà khóa được tạo tự động đã thay đổi và đột nhiên các khóa ngoại của bạn trỏ đến các bản ghi khác với bạn dự định.

Thường khi nhập dữ liệu từ một nguồn khác, bạn theo dõi khóa chính từ nguồn nước ngoài cũng như khóa chính cá nhân của riêng bạn. Điều này giúp xác định những thay đổi và sự khác biệt giữa các tập dữ liệu dễ dàng hơn cho các tình huống đồng bộ hóa khó khăn.

+3

Tôi đã bỏ phiếu này (xin lỗi) vì tôi nghĩ rằng nó bao quát quá nhiều các vấn đề liên quan. Nó không giải quyết an ninh ở tất cả hoặc đồng bộ hóa chọn lọc. Luận án từ Stettler là một phần giới thiệu tốt cho các vấn đề (http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf) –

+0

Cảm ơn thông tin. Tôi nghĩ rằng liên kết của Hamlet là một tham khảo tuyệt vời. Những điểm mấu chốt được Kieveli trả lời là đủ tốt cho một đoạn mồi mất 30 giây để đọc. –

3

Trình đồng bộ hóa của bạn cần phải xác định khi nào dữ liệu chỉ có thể được cập nhật và khi một người cần phải hòa giải xung đột tiềm năng. Tôi đã viết một paper that explains how to do this using logging and algebraic laws.

+2

Ngoài ra còn có Luận văn Thạc sĩ của Christian Stettler về vấn đề này: http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf Có những mối quan ngại về bảo mật lớn cần được giải quyết và bài viết này bao gồm chúng độc đáo. –

+3

@Jen S. liên kết không thể truy cập được nữa – Gohan

+1

Máy Wayback có bản sao: https://web.archive.org/web/20101126093308/http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian .pdf –

0

Điều gì là phù hợp nhất với kho lưu trữ dữ liệu phía máy khách trong ứng dụng của bạn? Bạn có thể chọn từ một cơ sở dữ liệu nhúng như SQLite hoặc một hàng đợi thông báo hoặc một số kho lưu trữ đối tượng hoặc (nếu không có tệp nào trong số này có thể được sử dụng vì nó là ứng dụng web) tệp/tài liệu được lưu trên máy khách bằng Web DB hoặc IndexedDB thông qua API của LocalStorage của HTML 5 .

Kiểm tra giấy Gold Rush: Mobile Transaction Middleware with Java-Object Replication. Tài liệu của Microsoft về các hệ thống được kết nối đôi khi mô tả hai phương pháp: hướng dịch vụ hoặc định hướng thư và định hướng dữ liệu. Gold Rush có cách tiếp cận trước đó. Cách tiếp cận sau sử dụng cơ sở dữ liệu hợp nhất nhân rộng.