Tôi đang làm việc trên một ứng dụng iPhone thông thường để lấy dữ liệu từ máy chủ (XML, JSON, v.v ...) và tôi tự hỏi cách tốt nhất để triển khai dữ liệu đồng bộ hóa là gì . Tiêu chí là tốc độ (ít trao đổi dữ liệu mạng), mạnh mẽ (khôi phục dữ liệu trong trường hợp cập nhật thất bại), truy cập ngoại tuyến và tính linh hoạt (có thể thích ứng khi cấu trúc của cơ sở dữ liệu thay đổi một chút, như cột mới). Tôi biết nó thay đổi từ ứng dụng đến ứng dụng, nhưng các bạn có thể chia sẻ một số chiến lược/kinh nghiệm của bạn không?Chiến lược tốt nhất để đồng bộ hóa dữ liệu trong ứng dụng iPhone
Đối với tôi, tôi đang nghĩ đến một cái gì đó như thế này:
1) cửa hàng cuối Date Modified trong iPhone
2) Khi tung ra, gửi một thông báo như getNewData.php lastModifiedDate = ...?
3) Máy chủ sẽ xử lý và gửi lại chỉ dữ liệu đã sửa đổi từ lần trước.
4) Những thông tin này được định dạng như vậy:
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
Tôi không muốn làm cho < +>, < ->, <%> ... cho mỗi thuộc tính là tốt, bởi vì nó sẽ quá phức tạp, vì vậy có lẽ khi nhận được một trường <%>, tôi sẽ chỉ xóa dữ liệu với id được chỉ định và sau đó thêm lại nó (giả sử id ở đây không phải là một số trường tự động tăng dần).
5) Sau khi mọi thứ được tải xuống và cập nhật, tôi sẽ cập nhật trường Ngày sửa đổi lần cuối.
Vấn đề chính với chiến lược này là: Nếu mạng bị hỏng khi tôi cập nhật nội dung nào đó => Ngày sửa đổi cuối cùng chưa được cập nhật => lần tiếp theo tôi khởi chạy lại ứng dụng, tôi sẽ phải trải qua cùng một điều lần nữa. Chưa kể đến dữ liệu không phù hợp tiềm năng. Nếu tôi sử dụng một bảng tạm thời để cập nhật và làm cho toàn bộ nguyên tử, nó sẽ hoạt động, nhưng sau đó một lần nữa, nếu bản cập nhật quá dài (nhiều thay đổi dữ liệu), người dùng phải chờ một thời gian dài cho đến khi có dữ liệu mới. Tôi có nên sử dụng Last-Modified-Date cho từng trường dữ liệu và cập nhật dần dữ liệu không?