Datenbank synchronisieren

  • Antworten:2
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 163

24.12.2019, 18:24:55 via Website

Hallo Liebes AndroitPit Team

Ich habe mittlerweile eigentlich ein gut funktionierendes App, und konnte unteranderem dank eurer Hilfe so zimlich jedes Problem lösen. Jetzt sind aber Feiertage und ich habe zeit für ein Update.
Ich habe folgendes Problem
Ich verwende Mysql auf dem server und sqlite auf dem Android.
Bissher habe ich es so gehandhabt.
-Datenbank zuerst Synchronisieren . Ich nehme ein Json mit allen einträgen vom Server, leere auf dem handy/tablet die sqlite, und fülle sie neu auf.
-wenn ich etwas eintrage,update oder lösche passiert das zuerst auf dem server. Sobald ich das ok bekomme, updatet es auch auf dem handy/tablet. falls ich offline bin, kann ich halt nur die sqlite auslesen, aber ich kann es trotzdem verwenden.

Nachteil (der mir von anfang an bewusst war, aber in diesem falle nicht tragisch ist) wenn zwei die Datenbank gleichzeitig befühlen, sieht der eine die einträge des anderen nicht, solange er nicht alles frisch synchronisiert.

Die Datenbanken sind im grunde genommen genau gleich, ausser das ich keine Autoinrement Id auf sqlite habe, da ich die Id vom Server übernehme. so vermutete ich das Problem (von oben) mit den gleichzeitigen einträgen zu vermeiden.

Nun, das funktioniert ganz gut, nur leider hat die eine Datenbank mittlerweile fast 15000 einträge, und jedesmal wird es mehr. Dementsprechend wird die ladezeit immer länger.

wie macht man das eigentlich im allgemeinen, das was ich gemacht habe wird wohl nicht die Regel sein ;)

Vielen dank schonmal im Vorraus

Diskutiere mit!
Beste Antwort
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.861

26.12.2019, 12:36:31 via Website

Das konzept kommt darauf an, wie schnell und genau synronisiert werden muss.
Müssen nur neue Einträge dazukommen oder werden alte auch aktualisisiert?
Du könntest entweder aktualisierungen diket per FCM (Push) abhandeln, dann kommen neue Einträge automatisch rein.

Wenn du nicht andauernd synchronisieren willst, könntest du dir auch eine Art Gerätestatus Tabelle bauen, in welcher drin steht, welche Daten auf welchem Gerät sind und daraus kann dann berechnet werden, was zu synchronisieren ist.

Alternativ hast du zwischen Server und SqLite eindeutige IDS (egal ob auto_increment oder GUID oder sonst was) und du schickst beim sync eine vollständige Liste alle GUIDs + Zeitstempel an den Server und der gibt dir alle neuen + geänderten Einträge zurück

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.291

26.12.2019, 09:32:28 via Website

Ein Ansatz wäre für die Einträge einen Zeitstempel mit zu speichern.
Dann könntest du aus der App immer mitsenden, was dein neuster Eintrag ist und der Server liefert nur die Datensätze, die seitdem hinzu gekommen sind.

Wenn du eine fortlaufende auto-increment ID hättest, könntest du es auch damit machen. Das wäre sogar besser, weil die eindeutig ist. Allerdings hast du die ja nicht auf dem Server.

Hilfreich?
Diskutiere mit!
Beste Antwort
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.861

26.12.2019, 12:36:31 via Website

Das konzept kommt darauf an, wie schnell und genau synronisiert werden muss.
Müssen nur neue Einträge dazukommen oder werden alte auch aktualisisiert?
Du könntest entweder aktualisierungen diket per FCM (Push) abhandeln, dann kommen neue Einträge automatisch rein.

Wenn du nicht andauernd synchronisieren willst, könntest du dir auch eine Art Gerätestatus Tabelle bauen, in welcher drin steht, welche Daten auf welchem Gerät sind und daraus kann dann berechnet werden, was zu synchronisieren ist.

Alternativ hast du zwischen Server und SqLite eindeutige IDS (egal ob auto_increment oder GUID oder sonst was) und du schickst beim sync eine vollständige Liste alle GUIDs + Zeitstempel an den Server und der gibt dir alle neuen + geänderten Einträge zurück

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
Empfohlene Artikel