Tôi lưu trữ dấu thời gian được sửa đổi lần cuối trong cơ sở dữ liệu trên cả bản ghi dữ liệu cốt lõi trên điện thoại và các bảng mysql trên máy chủ.
Điện thoại tìm kiếm mọi thứ đã thay đổi kể từ lần đồng bộ hóa cuối cùng và gửi nó đến máy chủ cùng với dấu thời gian của lần đồng bộ hóa cuối cùng và máy chủ sẽ phản hồi với mọi thứ đã thay đổi kể từ lần đồng bộ hóa cuối cùng.
Hiệu suất là một vấn đề khi rất nhiều bản ghi đã thay đổi. Tôi thực hiện đồng bộ hóa trên NSOpeartion nền có ngữ cảnh đối tượng được quản lý riêng. Khi luồng nền hoàn tất việc thực hiện các thay đổi đối với ngữ cảnh đối tượng được quản lý của nó, có một API để hợp nhất tất cả các thay đổi vào ngữ cảnh đối tượng được quản lý của luồng chính - có thể được định cấu hình để loại bỏ tất cả các thay đổi nếu có bất kỳ xung đột nào gây ra người dùng thay đổi dữ liệu trong khi quá trình đồng bộ hóa đang diễn ra. Trong trường hợp đó, tôi chỉ cần đợi vài giây rồi thử đồng bộ hóa lại.
Trên phần cứng cũ hơn, ngay cả sau nhiều lần tối ưu hóa, cần phải hủy đồng bộ hóa hoàn toàn nếu người dùng bắt đầu thực hiện các công việc trong ứng dụng. Nó chỉ đơn giản là sử dụng quá nhiều tài nguyên hệ thống. Tôi nghĩ rằng các thiết bị iOS hiện đại hơn có lẽ đã đủ nhanh nên bạn không cần phải làm như vậy nữa.
(Nhân tiện, khi tôi nói "rất nhiều bản ghi đã thay đổi", tôi có nghĩa là 30.000 hàng hoặc lâu hơn đang được cập nhật hoặc chèn trên điện thoại)