Die Synchronisation einer lokalen sqlite-Datei zu iCloud

Ich Speichere einige Daten in meiner iOS-app direkt in ein lokal .sqlite-Datei.  ich wählte dazu statt CoreData, da die Daten benötigen, um die Kompatibilität mit nicht-Apple-Plattformen.

Nun, ich bin versucht zu kommen mit die beste Möglichkeit zum synchronisieren dieser Datei über iCloud.  ich weiß, Sie können nicht synchronisiert es direkt, aus vielen Gründen.  ich weiß, CoreData ist in der Lage, synchronisieren Sie Ihre Datenbanken, sondern auch ignoriert, dass die Verwendung von CD würde im wesentlichen zu sperren diese Datei in Apple-Plattformen (denke ich?! Ich habe nur geschaut in die CD ein bisschen), ich muss die iCloud-Synchronisierung für diese Datei für ALLE iCloud unterstützten Plattformen - das soll ja auch Windows.  ich muss davon ausgehen, dass es keine Kompatibilität für die CoreData-Dateien in der Windows-API.  die Planung der beste Weg, dies zu erreichen, wäre viel einfacher, wenn Apple Ihnen sagen würde, uns mehr als "Es wird ein Windows-API [irgendwann?]"

Darüber hinaus werde ich schließlich implementieren müssen, mindestens eine weitere sync-Dienst zur Unterstützung von Plattformen, die iCloud nicht.  Es wäre hilfreich, jedoch nicht zwingend erforderlich, wenn die Methode, die ich verwenden für die iCloud können meist wiederverwendet werden für die zukünftigen Leistungen.

Aus diesen Gründen, glaube ich nicht, CoreData kann mir dabei helfen.  Bin ich richtig im denken das?

Bewegt von dort aus, muss ich erarbeiten einen Algorithmus für dieses, oder finden Sie eine vorhandene oder eine vorhandene 3rd-party-Lösung.  habe ich noch nicht gestolpert noch nichts. Allerdings habe ich schon grübelte über ein paar mögliche Methoden, die ich umsetzen konnte:

Methode 1:

Etwas tun, ähnlich wie CoreData synchronisiert sqlite-DBs: senden Sie "transaction log" - iCloud statt und bauen jedes lokale sqlite-Datei, aus der diese.

Ich denke, jedes Gerät senden würde, der einen (den eindeutigen Namen) text-Datei mit der Auflistung aller sql-Befehle, die das Gerät ausgeführt,, mit Zeitstempel.  Das Gerät speichern, wie weit in jeder Liste der Befehle ausgeführt hat, und weiter von diesem Punkt jedes mal, wenn die Datei aktualisiert wird. Wenn es updates zu empfangen, um mehrere log-Dateien auf einmal, es würde ausführen der einzelnen Befehle in chronologischer Reihenfolge.

Dinge bekommen konnte "interessant" Effizienz-Weise, wenn diese Dateien sehr groß werden, aber wie es scheint, ein lösbares problem.  

Methode 2:

Regelmäßig synchronisieren kopieren der Datenbank auf "iCloud".  eine modification timestamp-Feld in jedem Datensatz.  Wenn Sie eine aktualisierte Kopie der DB kommt durch, Abfrage alle Datensätze mit neueren Zeitstempel als einige Referenz-Zeit und update der Datensatz in der lokalen DB aus den neuen Daten.

Sehe ich viele potentielle Probleme mit dieser Methode:

-Implementieren müssen, um etwas weiter zu erkennen, Datensatz löschen.

-Die DB-Datei bekommen könnte Konflikte. Es könnte möglich sein Umgang mit Ihnen durch die Bearbeitung eines jeden Konflikts version in chronologischer Reihenfolge.

-Bestimmung das Datum zu überprüfen, jedes update kann tückisch sein, wie es hängt davon ab, welche Geräte das update kommen wird.

Gibt es eine Menge potenzieller Probleme mit der Methode 2, Methode 1 scheint machbar für mich...

Hat jemand irgendwelche Vorschläge, was könnte die beste Vorgehensweise? Eine bessere Idee als meine "Methode 1" (oder Gründe warum es nicht funktionieren würde)?

InformationsquelleAutor JDR | 2011-11-15
Schreibe einen Kommentar