SQLite Datenbank über die Dropbox synchronisieren

E

enrem

Erfahrenes Mitglied
29
Hallo,

ich möchte eine lokale SQLite-Datenbank (Tabellen) mit bzw. über die Dropbox synchronisieren. Dabei können mehrere Geräte den selben Account der Dropbox verwenden!

Diaro macht es genauso wie ich das gerne hätte. Dort kann ich bspw. An 3 Geräten gleichzeitig Daten erfassen und diese werden anschl. korrekt synchronisiert (kann man selbst anstoßen).

Und zwar legt Diaro (verschlüsselt mit SQLCipher) für jeden Datensatz eine Datei in der Dropbox an. Eine Tabelle mit 100 Datensätzen hätte somit in der Dropbox 100 Dateien.

Was ich mir auch überlege, wird am Ende durch Abhängigkeiten in den Tabellen (Referentielle Integrität) zu kompliziert, wenn ich das weiterdenke.

Eine Lösung wäre, nur bei einem Gerät eine Neuanlage zu gestatten und die anderen Geräte dürfen nur ändern. Dann könnte man es wie unten leicht und sicher umsetzen.

Beispiel (Tag und Sekunden lasse ich in Feld Update zum erklären einfachhalber weg):

Datenbank Gerät1 „stunden.sqlite“. Tabellenname „Kunde“. Felder _id, Name und update.

_id Name update
1 Homer 19:00
2 Marge 19:01
3 Bart 19:30


Datenbank Gerät2 „stunden.sqlite“. Tabellenname „Kunde“. Felder _id und Name.

_id Name update
1 Thomas 20:00
2 Michael 18:00
3 Heinz 17:00


Als erstes synchronisiert Gerät 1:

Ich möchte nun auf der Dropbox in den Ordner App/stundenapp/kunde folgende Dateien anlegen. Dabei steht die erste Zahl für die _id in der Tabelle und die zweite für die Zeit in Feld Update. In der Textdatei schreibe ich den kompletten Datensatz. Somit existiert Pro Datensatz eine Datei in der Dropbox. Der Ordnername „Kunde“ entspricht dem Tabellennamen.

Zuerst vergleiche ich die Daten von Gerät (Quelle) mit dem Server (Ziel). Da noch keine Dateien in der Dropbox existieren werden diese angelegt (_new.txt).

00000000001_1900_new.txt (Inhalt Homer..)
00000000002_1901_new.txt (Inhalt Marge..)
00000000003_1930_new.txt (Inhalt Bart..)

Jetzt synchronisiert Gerät 2:

_id 1 wird überschrieben da der Eintrag 20:00 Uhr Thomas jünger ist als 19:00 Uhr Homer.
00000000001_2000_update.txt (Inhalt Thomas..)

_id 2 wird nicht überschrieben da der Eintrag 18:00 Uhr Michael älter ist als 19:01 Marge.
00000000002_1901_neu.txt (Inhalt Marge..)

_id 3 wird nicht überschrieben da der Eintrag 17:00 Uhr (Heinz) älter ist al 19:30 Uhr Bart
00000000003_1930_new.txt (Inhalt Bart..)

Somit wurde nur 1 Datensatz geändert.

Bei den gelöschten Datensätzen würde in der Dropbox folgende Datei stehen.
00000000004_2100_del.txt (Inhalt leer oder lassen zum wiederherstellen)

Nun zu meinem Problem!

Ich möchte das andere Geräte Neuanlagen durchführen können. Dann jedoch muss ich die Tabellen mit den unterschiedlichen _id´s zusammenführen. Was bedeutet das ich für jede Tabelle eine zusätzliche ID einführen muss. Also für den Kunden gäbe es dann _id, idKunde, und Name.

Und nun bin ich am Ende. Ab jetzt sehe ich keine Bäume mehr. Bin total verwirrt. Keine Ahnung wie ich jetzt zwei SQLite-Datenbanken sicher zusammenfummeln kann.

Hab Ihr einen Lösungsansatz?

Freue mich über jeden Kommentar.

Nachtrag:
Was haltet Ihr davon wenn ich die IMEI Nr. vom Smartphone in die eigene ID´s packe. Beispielsweise wäre die IDKunde = _id+IMEI-Nr.

Gruß enrem
 
Zuletzt bearbeitet:
Hi also mit einzelnen Dateien für jeden Datensatz bei Dropbox wirst du das wohl nicht schaffen.
Finde dafür ist der Verwaltungs Aufwand viel zu hoch. Im Prinzip müsstest du dafür selber eine Daten Bank daraus bauen. Da stellt sich mir die Frage wo zu du da noch eine sqlite brauchst.. Für das was du willst sind online Datenbanken gedacht und geeignet. Wie zb Firebase, MySQL auf einem Server oder auch andere online DB.
Warum willst du das Rad neu erfinden?
 
Zuletzt bearbeitet:
Hallo jogimuc

Danke für die Antwort. Nein das Rad möchte ich bestimmt nicht neu erfinden. Zu MySQL fehlt mir die Erfahrung, da habe ich gleich noch einige Fragen.

Zu Firebase:

Davon bin ich ab zu abhängig. Mir sind die Daten meiner Kunden heilig.

Ausschnitt eines Artikel:

Worauf lasst ihr euch mit Firebase ein?

Bei den vielen Vorteilen und Möglichkeiten von Firebase könnten einige Aspekte schnell vergessen werden. Durch die Nutzung von Firebase kommen ähnliche Nachteile zum Tragen wie bei Cloud-Computing beziehungsweise Serverless Computing. Darunter die hohe Abhängigkeit von einem Anbieter, in diesem Fall Google, und ein hoher Kontrollverlust. So können beispielsweise keine beliebigen Änderungen an der Serverinfrastruktur vorgenommen werden, da alle Produkte auf den Google-Servern gehostet werden.

Außerdem übermittelt ihr ein Großteil der App-Nutzerdaten an Google. Ein faires Preismodell hat meistens eine derartige andere Seite der Medaille. So bezahlst du die Firebase-Services zum Teil mit den Daten deiner App. Aus diesen Informationen weiß Google durchaus Profit zu schlagen, wie beispielsweise mit gezielterer Werbung. Auch im Zuge der DSGVO sollte nicht ganz außer Acht gelassen werden, dass die Übermittlung von Nutzerdaten an das nichteuropäische Ausland immer genau durchdacht werden sollte.

Hier die Quelle: Das derzeit wohl mächtigste Tool für Entwickler heißt Firebase

Zu MySQL:

Soweit ich das verstehe benötige ich einen Online-Server (Web-Hoster) der mir eine MySQL-Datenbank zur Verfügung stellt (so wie bei Wordpress oder Joomla).

Das ist keine Option für mich aus folgenden Gründen:

1) Der Anwender muss sich zunächst einmal anmelden und seine sensiblen Daten in eine Cloud abgeben.

2) In dieser Datenbank kämen einige Tausend Kunden zusammen. Ich müsste den Hoster vertrauen und die Kunden mir. Zu viel Verantwortung. Und dann noch das mit der DSGVO.

3) Die App soll auch offline funktionieren. Der Aufwand schein groß zu sein dies mit MySQL zu realisieren.

Mein Wunsch ist es, dass jeder Kunde seine eigene Datenbank lokal behalten und nur auf Wunsch evtl. mit Mitarbeitern die Daten abgleichen kann. SQLite-DBMS sollte soetwas können. Leider wurde das Projekt eingestampft. SQLiteDBMS

Nach einiger Überlegungen versuche ich es folgendermaßen:

Jedes Gerät kann seine Datenbank in die Dropbox mit der 15 Stelligen IMEI und dem Änderungsdatum hochladen:

Beispiel:

123456789012345_01.01.2019.13:40.sqlite
456789012345678_05.01.2019.18:50.sqlite

usw.

In der App füge ich die Datenbanken in einer zusammen. Die Tabellen intern bestehen aus eigenen id´s an denen ich die IMEI dranhänge.

Beispiel:
_id idKunde
1 123456789012345 1
2 123456789012345 2

Auf diese Weise bekomme ich alle Daten zusammen. Der einzige Konflikt besteht in der Tabelle Kunde, dort sollten keine Duplikate (von anderen Geräten) auftauchen. Das löse ich evtl. über den Verwalter der zunächst einmal alle Kunden erfasst damit die Mitarbeiter Einträge durchführen können.

Sollte jemand eine andere saubere Lösung kennen würde ich mich freuen.
 
Zuletzt bearbeitet:

Ähnliche Themen

R
Antworten
6
Aufrufe
1.014
swa00
swa00
S
Antworten
33
Aufrufe
2.670
Sempervivum
S
Zurück
Oben Unten