Est-ce que SQLite supporte la réplication?

dans une application qui intègre SQLite3 et utilise une base de données en mémoire, est-il possible de répliquer la base de données entre deux instances en cours d'exécution de l'application? Je pourrais le faire à la main avec un protocole homebrew dupliquant tous mes accès DB, mais il semble que quelque chose qui devrait être fait à l'intérieur de la couche DB.

24
demandé sur Hassan Syed 2009-12-11 16:58:34

6 réponses

approche par la force Brute: envoyez-lui le ".commande dump " pour créer une représentation texte des données. Lire les données dans la deuxième base de données. Pas sûr que vous pouvez utiliser.

si vous avez besoin d'une mise à jour fine (envoi d'une copie de chaque copie à l'autre), jetez un oeil à sqlite3_update_hook

Mais comment comptez-vous gérer les erreurs? Par exemple, que se passe-t-il lorsque la copie de la base de données dans app2 ne peut pas faire une mise à jour pour une raison quelconque?

Pour résoudre ce, déplacez la base de données vers un processus serveur et demandez aux deux applications de lui parler.

12
répondu Aaron Digulla 2009-12-11 14:08:30

Lsyncd - Live Synchronisation (Miroir) Démon peut être utile ici. Il utilise rsync pour faire une réplication continue au niveau du fichier.

2
répondu cyrus.y 2015-04-07 15:34:39

si vous voulez la réplication dans une base de données en mémoire, vous devez regarder berkeley DB (BDB). Cependant le modèle de données pour BDB est le dictionnaire de chaîne de caractères, donc vous perdez la flexibilité de SQL. de plus, il a une licence à trois clauses, donc si votre projet est commercial, vous devez obtenir des licences.

1
répondu Hassan Syed 2009-12-11 14:15:26

Hors de la boîte, pas de. Il existe un petit nombre d'options de tiers:

SQLite sync:https://ampliapps.com/sqlite-sync/ celui-ci semble attrayant parce qu'il peut se répliquer à d'autres bases de données aussi bien que SQLite, et ne modifie pas le moteur de SQLite. Je n'ai pas encore essayé.

Litereplica: http://litereplica.io/ d'Une seule façon. Semble avoir été un peu autour de lui.

LiteSync: http://litesync.io/ Réplication bidirectionnelle. Assez nouveau, mais une évolution de Litereplica donc probablement plus mature qu'il n'y paraît. J'ai essayé cela un peu et cela semble fonctionner en douceur, avec quelques bugs que le développeur est en train de regarder. Vous devez utiliser le moteur SQLite modifié du développeur, qui ressemble à une dépendance concernant. Vous n'avez pas non plus beaucoup de contrôle, par exemple vous ne pouvez pas dire Répliquer maintenant sans rouvrir la base de données.

1
répondu O'Rooney 2018-01-18 22:02:23

non, ce n'est pas parce que la portée du projet est une simple base de données en cours de réalisation. Mais parce que la base de données n'est qu'un seul fichier, vous pouvez écrire votre propre script de réplication basé sur des opérations de copie de fichiers simples, rsync ou quelque chose de similaire.

si vous voulez vraiment un client/serveur basé sur SQLite type de RDBMS, vous pouvez jeter un oeil à SQLiteDBMS.

0
répondu Taneli Waltari 2009-12-11 14:09:36

l'Unisson? Tout ce que vous pouviez faire, c'était hot spare, parce que SQLite db dans un fichier monolithique. Vous ne pouviez pas faire le tour entre les deux "instances". De secours n'est pas mauvais, il vous suffit de ramasser les autres app+db sans trop de chichi, le comparer à MySQL maître-esclave ou actif-passif où il y a une intervention manuelle qui n'est pas facile. La réplication MySQL passe autour de SQL, pas seulement des diffs comme unison/rsync. Mais avec unison vous avez le maître-maître.

0
répondu Rich K. 2012-02-21 22:24:48