SQL Frage, Abgleich oder Sync zwischen MySQL und SQLite möglich?

Domi83

Rear Admiral
Registriert
Feb. 2010
Beiträge
5.204
Hallo Leute der Programmiertechnischen Kunst :)

Ein Kollege von mir programmiert eine Android App mit einer eigenständigen Datenbank. Die Datenbank ist für den Fall der Fälle, dass das Internet mal nicht erreichbar ist. Nun haben wir einen virtuellen Server im Rechenzentrum auf dem ich irgend welche Tools installieren könnte, möchte ich aber (wenn möglich) nicht.

Auf diesem Server ist Apache, PHP und MySQL eingerichtet und wenn möglich, möchte ich eine Art Master-Master Replikation für bestimmte Datensätze erstellen.

Folgendes Beispiel, auf dem Android System befindet sich ein logging Script. Drücke ich nun auf "log", wird ein Eintrag in der SQLite Datenbank auf dem Tablet vorgenommen ('tablet','log','2001-01-01 01:00:00'), das funktioniert auch alles bis hierhin! Nun soll aber auch in der MySQL Datenbank dieser Eintrag auftauchen. Und wenn ich am PC nun über ein Webinterface "log" drücke, soll dies in der MySQL Datenbank auftauchen, aber NICHT auf dem Tablet.

Wenn ich nun aber auf dem PC im Webinterface ein "log" und "tablet" mache, soll dieser Tablet Eintrag auch in der SQLite Datenbank vom Tablet auftauchen.

Ich hatte erst ganz simple an eine Master-Master Replikation gedacht, es sollen ja auch Daten von A -> B und B -> A ausgetauscht oder Synchronisiert werden. Aber nur bestimmte Daten, und nicht alle Daten.

Hat jemand von Euch schon einmal so etwas gebaut und kann mir einen Tipp geben?
Ganz stumpf würde ich eine PHP Datei erstellen, über die es möglich ist vom Tablet, Handy etc. die Daten entsprechend in die Datenbank zu schieben und auch entsprechend wieder abzurufen. Das einzige was die Android Software machen müsste ist, mit dem PHP Skript kommunizieren.

Ist die Denkweise so korrekt, oder bin ich da auf dem Holzweg und es gibt noch eine komfortablere Möglichkeit?
Grund der Frage ist, Chef möchte ungern das wir nun zu zweit so viel Energie dort hinein stecken und stundenlang testen, wenn das gar nicht funktionieren könnte und es bessere Möglichkeiten gibt. Darum wollte ich mal Eure Meinung hören :)

Gruß, Domi
 
Bau dir eine Middleware für die DB Connection die sich um die Synchronisation kümmert. Statt direkt die DB anzusprechen wird die Middleware angesprochen die sich dann um die native Verarbeitung der Queries kümmert wie auch die Synchronisation der gewollten Daten.
 
Die Middleware, wäre doch dann PHP oder sehe ich das falsch? Die Android-Software spricht das PHP Skript an, schickt die Daten dort hin und PHP macht anschließend nur noch den Insert in die MySQL Datenbank. Und umgekehrt spricht die Android App PHP an und lässt sich die Daten ausgeben und fügt diese dann in die SQLite Datenbank... :freak:
 
Jep, so in etwa würde es klappen. Eine richtige native Replikation wird nichts, du wirst mit Kompromissen leben müssen. Wenn einer der Kompromisse heißt, dass du die Daten z.B. als JSON-Strings über ne RESTful API verbreitest... who cares?
 
Okay, so etwas dachte ich mir schon fast. Mein Kollege hat sich gestern irgendwann zu dem Thema auch noch schlau gemacht und ist dabei auf SymmetricDS gestoßen, aber so wie ich das sehe ist das eine komplette Datenbank Replikation. Und das war ja an sich, so nicht gedacht... Kennt jemand diese Software?
 
Daaron schrieb:
Jep, so in etwa würde es klappen. Eine richtige native Replikation wird nichts, du wirst mit Kompromissen leben müssen. Wenn einer der Kompromisse heißt, dass du die Daten z.B. als JSON-Strings über ne RESTful API verbreitest... who cares?
Ich würde auch den Einsatz einer (REST-)API andenken. Zum einen hast Du dann sowohl in der Android-App als auch im Webinterfache lediglich die Aufrufe der API drin und musst Dich bei Anpassungen an der API nur mit dieser rumschlagen. Der Android-App kann es ja dann egal sein, solange der Aufruf der API identisch bleibt. Die App sendet/empfängt ja dann nur die Daten.

Weiterer Vorteil: Sollte dann mal eine weitere App/Client (Windows, iOS) dazu kommen, kannst Du die gleiche API benutzen und musst dann für diese Version nicht wieder das ganze Rad neu erfinden.
 
Zurück
Oben