Synchronisation @ mehrere Geräte

  • 1 Antworten
  • Letztes Antwortdatum
R

reneph

Dauer-User
367
Hallöchen,

ich wollte mal nachfragen, wer von euch sich schonmal intensiver mit dem Thema Synchronisation der App-Daten über mehrere Geräte hinweg befasst hat. Mir geht es hier also nicht um die Lösung eines Problems oder um die Implementierung bei mir, sondern um Erfahrungswerte von Entwicklern, welche sowas schonmal umgesetzt haben, um daraus ggf. best practices abzuleiten o.ä.!

Dazu würde mich natürlich interessieren, wie ihr eure Problemstellung gelöst habt. D.h. welche Techniken zum Einsatz kommen, welche Dienste genutzt werden (bzw. ob ggf. weitere Dienstleister (bspw. parse.com) in Anspruch genommen werden) usw.

:)
 
Hallo reneph, habe ich.

Technik: Java auf Android
Dienste: MySQL-Datenbankdienst

:cool2:

keine weiteren Softwarekomponenten.


Jedes Gerät+App bekommt _eine_ eindeutige ID von der Datenbank
zugewiesen.

So kann der Kunde mit _einer_ Serverdatenbank unterschiedliche
Apps individuell lizensiert nutzen.

Über diese ID in Kombination mit Timestamp/Datensatzversion und
Status ( synchronisiert/eingefügt/geändert/gelöscht ) und dem (mobile) PrimKey
können Datensätze zwischen Geräten und Server und infolge
zwischen den Apps auf einem Gerät synchronisiert werden.

Datensätze können nach "Ablaufdatum" wiederverwendet werden, was
interessant ist, wenn die Serverdatenbank wartungsfrei nicht permanent
anwachsen soll. Bzw. wenn es sich um Erfassungsdaten handelt, die nach
Weiterverarbeitung in der Serverdatenbank nicht mehr benötigt werden.

Idealfall wäre wenn die Datenquelle als ID eine UUID verwendet.
MSSQL-Server hat dies als nativen Datentyp. MySQL benötigt dafür
ein binary Blob von 16 Byte. Dann könnten mit geringer Konflikt-
wahrscheinlichkeit neue Datensätze problemlos erfasst werden.

Ist der Einsatz einer UUID nicht gegeben bleibt nur die ID um weitere
Komponenten je Synchronisationsstufe zu erweitern.

Datenquelle: PK (INT) ID, ...
Serverdatenbank: PK (INT,autoinc) SID, (INT) ID, ...
Client: PK (INT,autoinc) CID, (INT) SID, (INT) ID, ...

Daraus ergibt sich dann, dass der Datensatz in jeder Syncstufe direkt
angesprochen werden kann. Ein ID-Pool pro Gerät ist nicht nötig.

Für Tabellen mit Fremdschlüsseln würde es wie folgt ausschauen

Datenquelle: PK (INT) ID, (INT) FK, ...
Serverdatenbank: PK (INT,autoinc) SID (INT) FKSID, (INT) ID, FK, ...
Client: PK (INT,autoinc) CID, (INT) FKCID, (INT) SID, (INT FKSID) , (INT) ID, FK, ...

Die Synchronisation selbst habe ich generisch implementiert, so dass
nur eine Änderung des Datenbankschemas der Datenquelle bei Bedarf
nötig ist.

Steht die Forderung die Geräte gegen unterschiedliche Serverdatenbanken
abzugleichen muss das in jedem Datensatz zusätzlich zum Ausdruck kommen.
Denn irgendwann müssen die Serverdatenbanken wieder
gegeneinander abgeglichen werden. Bzw. sollen Geräte untereinander
direkt synchronisieren und dann beide Geräte jeweils gegen einen Server
und danach die Server untereinander ...

In einem solchen Szenario würde ich ungern auf UUID's verzichten :rolleyes2:

Microsoft hat so etwas in seinem SyncFramework umgesetzt. Das kann
auch einige Überlegungen anstoßen, wenn es nicht direkt verwendet
werden soll.
 
  • Danke
Reaktionen: reneph
Zurück
Oben Unten