• Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick
  • November - das bedeutet oftmals Herbstblues, grauer Himmel, Tristesse und Wetter, bei dem man gern im Warmen bleibt. Aber nur oftmals! Wir fordern Euch gern auf, gegen den Herbstblues anzukämpfen und hoffen, dabei hilft Euch unser aktuelles Monatsthema. Neugierig geworden? --> Zum Mitmachen bitte hier klicken

Strategie zur Synchronisierung von Daten über iCloud

redcoding

Alkmene
Registriert
17.03.13
Beiträge
32
Hallo,

ich entwickle gerade eine App, deren Daten über iCloud auf allen mobilen Endgeräten synchronisiert werden. Da mein Datenmodell nicht auf CoreData basiert, muss ich mich selbst um die Synchronisierung kümmern.

Prinzipiell funktioniert es so, dass jede Änderung ein SQL-Statement ist. Dieses wird mit einem lokalen Zeitstempel in ein Transaktions-Log geschrieben das dann automatisch vom iCloud-Dienst auf alle anderen Endgeräte verteilt wird. Dort angekommen, wird das SQL-Statement ausgeführt und die Datenbanken sind synchron.

Soweit die Theorie. Probleme gibt es, wenn ein neues Gerät dazu kommt. Dieses muss beim ersten Start alle bis dahin aufgelaufenen Modifikationen nachspielen (also alle bis dahin aufgezeichneten SQL-Statements aller anderen Geräte abarbeiten). Dazu müssen alle SQL-Statements in die korrekte zeitliche Reihenfolge gebracht werden. Und hier liegt nun mein Problem: Wenn der User auf einem Gerät nicht die automatische Zeitsynchronisierung aktiviert hat, liegen die Zeitstempel dieses Geräts entweder zu weit vorne oder zu weit hinten in der Zeit verglichen mit denen der anderen Geräte.

Wie kann man Zeitstempel generieren, die auf allen Endgeräten die korrekte zeitliche Reihenfolge wiedergeben?
 
Anstatt eines Zeitstempels eine Versionierung verwenden? Also 1, 2, 3.... bez. du nimmst das Modifikationsdatum deines SQL Statements und nicht das Systemdatum des Gerätes um den Stand deiner DB zu bestimmen.

Wenn aber die updates von verschiedenen Geräten kommen können und da die Uhren nie perfekt synchronisiert sind, musst Du eine Uhr als Master haben. Falls die Reihenfolge denn wirklich so wichtig ist.
 
Zuletzt bearbeitet: