Mysql
 sql >> Datenbank >  >> RDS >> Mysql

iOS – Best Practices für die Synchronisierung von Kerndaten und Serverdatenbanken

Ich speichere einen zuletzt geänderten Zeitstempel in der Datenbank sowohl in den Kerndatensätzen auf dem Telefon als auch in den MySQL-Tabellen auf dem Server.

Das Telefon sucht nach allem, was sich seit der letzten Synchronisierung geändert hat, und sendet es zusammen mit einem Zeitstempel der letzten Synchronisierung an den Server, und der Server antwortet mit allem, was sich seit dem bereitgestellten Synchronisierungszeitstempel geändert hat.

Die Leistung ist ein Problem, wenn sich viele Datensätze geändert haben. Ich mache die Synchronisierung auf einer NSOpartion im Hintergrund, die über einen eigenen verwalteten Objektkontext verfügt. Wenn der Hintergrundthread die Änderungen an seinem verwalteten Objektkontext abgeschlossen hat, gibt es eine API zum Zusammenführen aller Änderungen in den verwalteten Objektkontext des Hauptthreads – die so konfiguriert werden kann, dass sie einfach alle Änderungen verwirft, wenn Konflikte verursacht werden der Benutzer ändert Daten, während die Synchronisierung läuft. In diesem Fall warte ich einfach ein paar Sekunden und versuche dann erneut, eine Synchronisierung durchzuführen.

Auf älterer Hardware war es auch nach vielen Optimierungen notwendig, die Synchronisierung vollständig abzubrechen, wenn der Benutzer anfängt, Dinge in der App zu tun. Es wurden einfach zu viele Systemressourcen verwendet. Ich denke, modernere iOS-Geräte sind wahrscheinlich schnell genug, dass Sie das nicht mehr tun müssen.

(Übrigens, als ich sagte "viele Datensätze haben sich geändert", meinte ich ungefähr 30.000 Zeilen, die auf dem Telefon aktualisiert oder eingefügt werden)