Comment ça marche?

Votre application utilisera une version modifiée de la bibliothèque SQLite qui contient le code LiteSync pour accéder à votre base de données.

Les modifications sur la bibliothèque SQLite sont internes et l'interface est la même.

Les bibliothèques LiteSync communiqueront entre elles, échangeant des données de transaction.






Réplication

La première fois que l'application est ouverte, elle se connectera à l'autre nœud(s) et téléchargera une nouvelle copie de la base de données.

Dans une topologie centralisée, le nœud principal enverra la copie de la base de données aux nœuds secondaires.

Une fois téléchargé, le nœud démarrera la synchronisation.



Synchronisation

Une fois que les nœuds ont la même base de données, ils échangent des transactions qui ont été exécutées alors qu'elles étaient hors ligne.

Après cela, ils entrent en mode en ligne et une fois qu'une nouvelle transaction est exécutée dans un nœud, elle est transférée pour être exécutée dans les nœuds connectés.

Si le nœud n'est pas en ligne, la transaction est stockée dans un journal local pour être échangée ultérieurement.



EST-CE QUE J'AI BESOIN DE MODIFIER MON CODE D'APPLICATION ?

Il y a quelques étapes mais, fondamentalement, nous devons changer la chaîne URI dans l'ouverture de la base de données à partir de ce-ci :

“file:/path/to/app.db”

à quelque chose comme cette-ci :

“file:/path/to/app.db?node=secondary&connect=tcp://server.ip:1234”

La bonne nouvelle est que LiteSync utilise l'interface native SQLite3. Cela signifie que nous n'avons pas besoin d'utiliser une autre API.



Connexion

Il y a 2 options pour chaque nœud :

lier à une adresse
connecter à l'adresse du pair

Vous pouvez donc choisir quel côté se connectera à l'autre. Ceci est utile lorsqu'un côté se trouve derrière un routeur ou un pare-feu.



Topologies prises en charge


Topologie en étoile centralisée


Dans cette topologie, nous avons un nœud auquel tous les autres nœuds seront connectés, il doit donc être en ligne pour que la synchronisation ait lieu.

Voici quelques exemples de configurations :


Le nœud principal peut se lier à une adresse et les nœuds secondaires s'y connectent.

Nœud principal :

"file:/home/user/app.db?node=primary&bind=tcp://0.0.0.0:1234"

Nœud secondaire : (dans un autre appareil)

"file:/home/user/app.db?node=secondary&connect=tcp://server:1234"


Le nœud principal peut également se connecter aux nœuds secondaires.

Nœud principal :

"file:/home/user/app.db?node=primary&connect=tcp://address1:port1,tcp://address2:port2"

Nœuds secondaires : (chacun sur un appareil séparé)

"file:/home/user/app.db?node=secondary&bind=tcp://0.0.0.0:1234"


Nous pouvons même utiliser un mélange de ces 2 options.

Nœud principal :

"file:/home/user/app.db?node=primary&bind=tcp://0.0.0.0:1234&connect=tcp://address1:port1"

Nœud secondaire 1:

"file:/home/user/app.db?node=secondary&connect=tcp://server:1234"

Nœud secondaire 2:

"file:/home/user/app.db?node=secondary&bind=tcp://0.0.0.0:1234"



État de synchronisation

Nous pouvons vérifier l'état de synchronisation à l'aide de cette commande :

PRAGMA sync_status

Il renvoie une chaîne JSON.



Vérifier si la base de données est prête

Si l'application est ouverte pour la première fois sur un appareil, elle peut télécharger une nouvelle copie de la base de données à partir d'un autre nœud. Tant que ce n'est pas fait, nous ne pouvons pas accéder à la base de données.

Nous pouvons récupérer l'état de synchronisation et vérifier la variable db_is_ready.

Consultez les exemples d'application de base ci-dessous.



Comment l'utiliser dans mon application ?

Il y a 3 étapes :

1  Remplacer la bibliothèque SQLite par celle contenant LiteSync

2  Modifier la chaîne de connexion URI

3  Vérifier l'état de la base de données prête

Lors de la compilation des applications C et C ++, vous devez lier votre application à la bibliothèque LiteSync.

Pour les autres langues, vous devez avoir le wrapper approprié installé.



Exemple de nœud principal

Le nœud principal peut être une application normale, exactement la même application que les nœuds secondaires mais en utilisant un URI différent.

Ou nous pouvons utiliser une application dédiée pour être le nœud principal.

Une application autonome de base utilisée uniquement dans le but de conserver un nœud de base de données centralisé ressemblerait à ce-ci :

Select a language -->



Exemple d'application de base

Une application de base qui écrit dans la base de données locale ressemblerait à ceci :

Select a language -->



LIMITATIONS ACTUELLES

1  Évitez d'utiliser des fonctions qui renvoient des valeurs différentes à chaque appel, comme random() et date('now')

2  Le mot clé AUTOINCREMENT n'est pas pris en charge

3  Nous devons utiliser une seule connexion à chaque fichier de base de données. Ne laissez pas accéder beaucoup de applications au même fichier de base de données. Chaque instance doit utiliser son propre fichier de base de données, puis elles seront répliquées et synchronisées à l'aide de LiteSync