Datenbank Synchronisation (Web MySQL to Android SQLite)

11/02/2014 21:14 Schlumpf9#1
Hallo epvper,

ich bin gerade dabei eine App für Android zu programmieren.
Nun bin ich vor folgendem Problem:
Auf meinem Webserver verwende ich MySQL, wo Daten gespeichert sind, welche man über eine Website bearbeiten kann.
In der App für Android verwende ich SQLite und momentan ist es möglich Daten vom WebServer über eine API (mit Nutzerdaten) herunter zu laden... Dann hat man quasi eine Offline Version der Daten in der App.

Nun zu meinem Problem:
Natürlich ist es relativ doof nur live Änderungen online auf der Website zu tätigen und nicht auch von der App aus.
Wie würdet ihr am Besten diese Synchronisation aufbauen?

Meine Ideen:
1) Man kann entweder alle Daten hochladen und alles auf dem WebServer überschreiben oder umgekehrt alles runter laden und in der App alles überschreiben. Klar hat man oben und unten gleichzeitig Daten geändert, gehen Änderungen verloren, wenn man davor vergessen hat, die aktuelle Version zu holen.

2) Ich speichere jede Änderung, die pro Datensatz gemacht wurde - sprich eine Log Tabelle, in der alles protokolliert wird, was geändert, hinzugefügt oder gelöscht wurde.
Synchonisiert man, gleiche ich mit dem Server die Änderungen ab. Gibt es Konflikte, dass unten und oben der gleiche Datensatz geändert wurde muss ich mit dem Datum abgleichen, was aktueller ist und dementsprechend nacheinander die Änderung vornehmen...

In meinen Augen hört sich der zweite Vorschlag am Besten an, allerdings bin ich mir unsicher, wie ich das Ganze umsetzen soll. Gibt es Vorschläge, bzw. Hilfestellung von eurer Seite? Mache ich das am Besten über eine HTTP Verbindung mit GET/POST usw. ... Wäre über Hilfestellung dankbar! ;)

Grüße
11/06/2014 18:02 XxharCs#2
Das wird etwas kompliziert, da, wenn die Daten auf der Online und Offline DB geändert wurden, musst es mergen usw. Tue dir das nicht an, fast ein eigenes Framework dafür zu schreiben, damit du dein Problem löst und das ganze reibungslos funktioniert.
Hast versucht bisschen rum zu googeln? Gibts paar Frameworks die dir das um eniges(sogar sehr viel) aushelfen können.

Ein gutes Framework wär: [Only registered and activated users can see links. Click Here To Register...]
11/06/2014 21:58 MrDami123#3
Ich denke nicht, dass ein Framework dabei helfen kann. Immerhin geht es um ein Offline-Online Problem und nicht um das Format und Transfer der Daten.

Der zweite Ansatz erfüllt den richtigen Zweck, sofern der User die Einwilligung und anschließend eine Bestätigung erhält, dass die Daten syn. wurden.
Wenn er nämlich zwei oder mehr Geräte verwendet und die Offline Daten verarbeitet und dann sync. sollte er erfahren, obs geklappt hat.
Zudem sollte beachtet werden, dass er zwei Geräte verwendet und auf beiden den Datensatz bearbeitet, jedoch nur eins sync. und das andere Gerät ans WiFi angeschlossen wird und auto. den Offline Datensatz überschreibt, wär das ggf. auch ein fataler Ausgang.

Du brauchst also eine Sync. Bestätigung in beide Richtungen. Den download und upload kannst du mit GET/POST machen. Würde jedoch dafür sorgen, dass die Daten verschlüsselt sind. Ist kein muss und kann auch darauf verzichtet werden, sofern es sich nicht um kritische Daten handelt.
11/06/2014 22:26 XxharCs#4
Quote:
Originally Posted by MrDami123 View Post
Ich denke nicht, dass ein Framework dabei helfen kann. Immerhin geht es um ein Offline-Online Problem und nicht um das Format und Transfer der Daten.
Hast du dir das Framework angeschaut? Das Framework ist genau das was er braucht, und ja das Framework wird ihm helfen.
11/06/2014 22:28 Schlumpf9#5
Vielen Dank für die Antworten, ja sind keine sensiblen Daten, habe aber bereits das Backup mit mcrypt verschlüsselt, also verwende ich auch das für die Synchronisation. Sind aber keine sensiblen Daten, reiner Text zum lernen (Vokabeln) :D
Jetzt mal die nächsten Tage schauen, was ich mache...
11/07/2014 06:11 MrDami123#6
Quote:
Originally Posted by XxharCs View Post
Das wird etwas kompliziert, da, wenn die Daten auf der Online und Offline DB geändert wurden, musst es mergen usw. Tue dir das nicht an, fast ein eigenes Framework dafür zu schreiben, damit du dein Problem löst und das ganze reibungslos funktioniert.
Hast versucht bisschen rum zu googeln? Gibts paar Frameworks die dir das um eniges(sogar sehr viel) aushelfen können.

Ein gutes Framework wär: [Only registered and activated users can see links. Click Here To Register...]
Stimmt. :)
Würde es nutzten, vereinfacht die ganze Sache enorm, müsstest es aber erstmal lernen. Für zukünftige Applikationen auch brauchbar, deswegen ist es kein verschwendetes Wissen.