14

Ich entwickle eine Anwendung, die verteilt funktioniert, und ich habe eine SQLite-Datenbank, die zwischen verteilten Servern geteilt werden muss. Wenn ich in ServerA bin und SQLite-Zeile ändern, muss diese Änderung in den anderen Servern sofort sein, aber wenn ein Server offline war und dann online ging, muss es alle Informationen gleich anderen Servern aktualisieren.Methode zum Replizieren von SQLite-Datenbank über mehrere Server

Ich versuche, einen HA-Service mit kleinen SQLite-Datenbanken zu entwickeln.

Ich denke an etwas wie MongoDB oder ReThinkDB, aufgrund der Replikation funktioniert gut und ich habe Daten unabhängig Server online ich hatte.

Gibt es eine Bibliothek oder eine andere SQL-Methode, um Daten zwischen Servern zu teilen?

Vielen Dank im Voraus.

+0

keine Überlegungen über Rennbedingungen oder andere Arten von Konflikten? – Ekevoo

Antwort

7

Ich habe das Raft-Konsens-Protokoll verwendet, um meine SQLite-Datenbank zu replizieren. Sie können das System finden Sie hier:

https://github.com/otoolep/rqlite

+0

ist die Erweiterung JSON1 mit Rqlite? –

2

Sie können SQLite-Datenbanken synchronisieren, indem Sie SymmetricDS in Ihre Anwendung einbetten. Es unterstützt gelegentlich verbundene Clients, so dass Änderungen erfasst und synchronisiert werden, wenn ein Server online geht. Es unterstützt mehrere verschiedene Datenbankplattformen und kann als Bibliothek oder als eigenständiger Dienst verwendet werden.

+0

Gibt es eine Möglichkeit, abweichende Datei-gehostete SQLite-Datenbanken zu synchronisieren? – neuviemeporte

1

Sie können auch CopyCat verwenden, die SQLite sowie einige andere Datenbanktypen unterstützen.

+0

Anscheinend unterstützt es nur SQLite unter sehr eingeschränkten Bedingungen (z. B. mit Delphi ?!) – Michael

5

Sie litereplica verwenden können:

Es unterstützt Master-Slave-Replikation für SQLite3 Datenbanken unter Verwendung eines einzigen Master (beschreibbar Knoten) und eine oder mehrere Repliken (Read- nur Knoten).

Wenn ein Gerät offline gegangen ist und dann online gegangen ist, werden die sekundären/slave dbs schrittweise mit dem primären/Master aktualisiert.

Oder litesync:

Es implementiert Multi-Master-Replikation, so dass wir an die DB in jedem Knoten schreiben kann, auch wenn das Gerät offline ist.

Auf beiden öffnen wir die Datenbank eine modifizierte URI, wie dies mit:

 
    “file:/path/to/app.db?replica=master&bind=tcp://0.0.0.0:4444”
+0

Würde dies für viele zu eins funktionieren? Bedeutung Ich habe viele Quellen (gleiche Layout/Tabellen) zu einem einzigen Slave? – Tacitus86

+1

Nein, es funktioniert mit einem einzigen Master. Es werden keine Daten aus vielen Quellen in einer einzelnen Datenbank zusammengeführt, aber Sie können für jede Quelle ein separates Replikat beibehalten. –