Frage

In einer Anwendung, die SQLite3 bettet und verwendet eine In-Memory-Datenbank, ist es möglich, die Datenbank zwischen zwei laufenden Instanzen der Anwendung zu replizieren? Ich konnte dies mit einem Homebrew-Protokoll von Hand tun Duplizieren alle meine DB zugreift, aber es scheint, wie etwas, das in der DB-Schicht durchgeführt werden sollte.

War es hilfreich?

Lösung

Brute-Force-Ansatz: Senden sie die „.dump“ Befehl eine Textdarstellung der Daten zu erstellen. Lesen Sie, dass die Daten in in die zweite Datenbank. Nicht sicher, Sie können diese verwenden.

Wenn Sie ein feinkörniges Update benötigen (Senden eine Kopie von jedem bis zu der anderen Kopie), hat einen Blick auf sqlite3_update_hook

Aber wie wollen Sie Fehler behandeln? Zum Beispiel, was passiert, wenn die Kopie des DB in app2 kein Update aus irgendeinem Grunde machen kann?

Um dies zu lösen, bewegen Sie die Datenbank auf einen Server-Prozess und hat die beiden Anwendungen mit ihm sprechen.

Andere Tipps

Aus dem Kasten heraus, nein. Es gibt eine kleine Anzahl von Optionen von Drittanbietern:

SQLite sync: https://ampliapps.com/sqlite-sync/ Dies scheint attraktiv, weil es auf andere Datenbanken sowie SQLite replizieren kann, und die SQLite-Engine nicht ändern. Ich habe es noch nicht probiert.

Litereplica: http://litereplica.io/ Eine Möglichkeit, nur. Es scheint ein wenig herum zu haben.

LiteSync: http://litesync.io/ Zwei-Wege-Replikation. Ziemlich neu, sondern eine Evolution von Litereplica so wahrscheinlich reifen, als es scheint. Ich habe diese ein wenig versucht, und es scheint reibungslos zu arbeiten, mit ein paar Bugs, die der Entwickler auf sucht. Sie haben die Entwickler-modifizierte SQLite-Engine zu verwenden, die wie eine in Bezug auf die Abhängigkeit scheint. Sie nicht auch viel Kontrolle bekommen, zum Beispiel Sie kann jetzt nicht sagen replizieren, ohne die Datenbank wieder zu öffnen.

lsyncd - Live-Syncing (Mirror) Daemon nützlich sein können Hier. Es nutzt rsync kontinuierliche Replikation auf Dateiebene zu tun.

Unison? Best Sie aber tun konnten, war Ersatz, weil SQLite db in einer monolithischen Datei. Sie könnten nicht Round-Robin zwischen den beiden „Instanzen“. Hot-Spare ist nicht schlecht, Sie einfach die anderen App abholen + db ohne viel Aufheben, zu vergleichen, zu MySQL Master-Slave oder aktiv-passiv, wo es einige manuellen Eingriffe, die nicht einfach ist. MySQL-Replikation läuft um SQL, nicht nur diffs wie unisono / rsync. Aber mit Unisono haben Sie Master-Master.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top