2016-08-12 2 views
0

Ich habe eine entfernte Datenbank, die jederzeit ändern kann. Ich muss einen Weg finden, mein sqlite-Datenbank-Update mit all den Änderungen in einer besseren und optimierten Weise zu halten.Datenbank Sync Cloud von MySql zu Sqlite Android

dachte ich pro Tabelle einen einzigen Zeitstempel mit und nur der aktualisierte Tabelle an den Client senden würde eine Lösung sein, oder vielleicht einen Zeitstempel pro Zeile mit und nur die aktualisierte Zeile an den Client ..

Aber Senden - Wie kann ich gelöschte Artikel verwalten? - Wie kann ich das technische Update auf Android verwalten?

Grundsätzlich, in ein paar Worten, muss ich irgendwann in der App die Änderungen mit einer API herunterladen und die lokale db aktualisieren.

Hat jemand einige Ideen?

Dank

+2

Wie viele Daten sprechen wir hier, wie viele Tabellen und Zeilen in jeder dieser Tabellen? Wir reden Dutzende von Reihen in jeder Tabelle oder Millionen? –

+0

Wir sprechen über 10-15 Tabellen und Hunderte oder Datensätze, wahrscheinlich bis zu 200-300 .. – dvdciri

Antwort

0

Ich habe beschlossen, einen anderen Ansatz zu folgen:

Ich habe eine api erstellt, die die Mysql db in einer SQLite-db auf der Server-Seite zu analysieren. Es gibt eine "last_update_timestap", die jedes Mal aktualisiert wird, wenn etwas geändert wird.

Ein weiterer API-Aufruf, gibt im Header ein zusätzliches Feld mit diesem Zeitstempel.

Auf der Clientseite gibt es einen Sync-Prozess, der die Folge tun, wenn nötig:

  1. Api Anruf nur die HEADER Abrufen der letzten Aktualisierung Zeitstempel erhalten und überprüft, ob ein Update erforderlich ist;

  2. Wenn Download die Datenbank von der anderen api

  3. Schreiben Sie die Datenbank in eine temporäre Datei benötigt wird, und kopieren Sie die temporäre Datei an der Position und mit dem gleichen Namen der realen Datenbank
  4. Verwenden Sie die Datenbank

Vielen Dank für die Hilfe, aber dies erwies sich als der geeignete Ansatz für meine Projektstruktur.

+0

können Sie zeigen, wie mysql db in sqlite db auf der Serverseite analysieren? Vielen Dank – Ilario

0

Da es scheint dies ein nur sync one-way ist, würde ich:

  • jede Tabelle auf dem Server Stellen DB eine UUID Spalte und eine letzte aktualisierte Datum/Uhrzeit Säule.

  • Erstellen Sie einen REST-Aufruf, der aktualisierte Daten anfordert. Idealerweise würde es dauern, bis der Client aktualisiert wurde. Dieses Datum sollte während des Aktualisierungsaufrufs vom Server stammen.

  • Der Server würde jede Tabelle nach Zeilen durchsuchen, die ein Datum> als das vergangene Datum haben. Serialisieren Sie die Daten und geben Sie sie als JSON zusammen mit dem Datum und der Uhrzeit des Servers für die nächste Anforderung zurück.

Jetzt Tracking Löschungen ist ein bisschen mehr Arbeit. Sie können entweder:

  1. Nie Daten löschen und nur die Zeilen als gelöscht markieren, dies ist die einfachste, aber abhängig von Ihren Daten kann mit vielen Zeilen in der DB enden.
  2. Löschen Sie die Daten und verfolgen Sie dann die gelöschten Zeilen in einer anderen Tabelle. Diese können nach einiger Zeit gelöscht werden, wenn alle Clients aktualisiert wurden.
  3. Haben Sie einen zweiten Update-Aufruf, der alle UUID-Werte und Zeitstempel für jede Zeile herunterdrückt. Der Client könnte dann herausfinden, welche Zeilen gelöscht werden müssen.

Obwohl es am komplexesten ist, würde ich mich wahrscheinlich für Option 3 entscheiden, da ich alte Daten nicht mag. Die Richtung, in die ich gehen würde, hängt auch davon ab, wie viele Clients mit der Datenbank synchronisiert werden.

+0

In welcher Art von JSON-Format würden Sie die Update-Anfrage an den Client senden? – dvdciri

+0

Ich würde wahrscheinlich ein POJO erstellen, das jede Tabelle und ein Objekt der obersten Ebene darstellt, das alle Tabellen enthält, die mehrere Zeilen in jeder Tabelle zulassen. Verwenden Sie Gson oder Jackson, um die Daten zu übertragen. –

Verwandte Themen