PouchDB - Synchronisation

Vous pouvez synchroniser les bases de données stockées localement dans PouchDB avec celles stockées dans CouchDB. Dans le chapitre précédent, nous avons vu comment répliquer des bases de données à l'aide de PouchDB. Là, nous avons utilisé la méthodePouchDB.replicate(source, destination).

En plus de cela, nous pouvons également répliquer les données, de la base de données locale vers la base de données distante, et de la base de données distante vers la base de données locale en utilisant replicate.to() et replicate.from() méthodes comme indiqué ci-dessous.

//Replicating data from local database to remote database 
localDB.replicate.to(remoteDB);

//Replicating data from remote database to local database 
localDB.replicate.from(remoteDB);

Où, localDB est un objet de base de données stocké localement dans PouchDB et remoteDB est un objet d'une base de données stockée dans CouchDB.

Exemple

Supposons qu'il existe une base de données avec le nom local_database dans PouchDB, et il contient 3 documents, doc1, doc2 et doc3, dont le contenu est indiqué ci-dessous.

doc1 = {_id: '003', name: 'Ram', age: 26, Designation: 'Programmer'} 
doc2 = {_id: '004', name: 'Robert', age: 27, Designation: 'Programmer'} 
doc3 = {_id: '005', name: 'Rahim', age: 28, Designation: 'Programmer'}

Et il y a une base de données avec le nom Remote_Database dans CouchDB et il contient 2 documents doc1, doc2, dont le contenu est indiqué ci-dessous.

doc1 = {_id: '001', name: 'Geeta', age: 25, Designation: 'Programmer'} 
doc2 = {_id: '002', name: 'Zara Ali', age: 24, Designation: 'Manager'}

Voici un exemple de synchronisation de ces deux bases de données, l'une étant stockée dans PouchDB et l'autre stockée dans CouchDB, à l'aide du replicate.to() et replicate.from() méthodes.

//Requiring the package
var PouchDB = require('PouchDB');

//Creating local database object
var localDB = new PouchDB('local_database');

//Creating remote database object
var remoteDB = new PouchDB('http://localhost:5984/remote_database');

//Synchronising both databases
localDB.replicate.to(remoteDB);
remoteDB.replicate.from(localDB);
console.log("Databases synchronized successfully");

Enregistrez le code ci-dessus dans un fichier avec le nom Synchronising_databases.js. Ouvrez l'invite de commande et exécutez le fichier JavaScript en utilisantnode comme indiqué ci-dessous.

C:\PouchDB_Examples >node Synchronising_databases.js

Cela synchronise les deux bases de données remoteDB et localDB et affiche un message sur la console comme indiqué ci-dessous.

Databases synchronized successfully.

Après avoir synchronisé les deux bases de données, visitez le http://127.0.0.1:5984/_utils/index.html et sélectionnez le remote_database. Vous pouvez observer que les documents de la base de données locale (003, 004, 005) ont été copiés dans cette base de données comme indiqué ci-dessous.

De la même manière, si vous récupérez le contenu du local_database stockés dans PouchDB, vous pouvez observer que les documents de la base de données stockée dans CouchDB ont été copiés ici.

[ 
   { 
      id: '001',
      key: '001',
      value: { rev: '1-23cf3767e32a682c247053b16caecedb' },
      doc: { 
         name: 'Geeta',
         age: 25,
         Designation: 'Programmer',
         _id: '001',
         _rev: '1-23cf3767e32a682c247053b16caecedb' 
      } 
   },
   { 
      id: '002',
      key: '002',
      value: { rev: '1-d5bcfafbd4d4fae92fd7fc4fdcaa3a79' },
      doc: { 
         name: 'Zara Ali',
         age: 24,
         Designation: 'Manager',
         _id: '002',
         _rev: '1-d5bcfafbd4d4fae92fd7fc4fdcaa3a79' 
      } 
   },
   { 
      id: '003',
      key: '003',
      value: { rev: '1-bf4619471ac346fdde46cfa8fbf3587f' },
      doc: { 
         name: 'Ram',
         age: 26,
         Designation: 'Programmer',
         _id: '003',
         _rev: '1-bf4619471ac346fdde46cfa8fbf3587f' 
      } 
   },
   { 
      id: '004',
      key: '004',
      value: { rev: '1-29b8f803958c994e3eb37912a45d869c' },
      doc: { 
         name: 'Robert',
         age: 27,
         Designation: 'Programmer',
         _id: '004',
         _rev: '1-29b8f803958c994e3eb37912a45d869c' 
      } 
   },
   { 
      id: '005',
      key: '005',
      value: { rev: '1-0eb89f71998ffa8430a640fdb081abd2' },
      doc: { 
         name: 'Rahim',
         age: 28,
         Designation: 'Programmer',
         _id: '005',
         _rev: '1-0eb89f71998ffa8430a640fdb081abd2' 
      } 
   } 
]

Vous pouvez réécrire le programme ci-dessus en utilisant le sync() méthode fournie par PouchDB au lieu des deux méthodes replicate.to() et replicate.from() comme indiqué ci-dessous.

//Requiring the package
var PouchDB = require('PouchDB');

//Creating local database object
var localDB = new PouchDB('local');

//Creating remote database object
var remoteDB = new PouchDB('http://localhost:5984/remote_database');

//Synchronising Remote and local databases
localDB.sync(remoteDB, function(err, response) {
   if (err) {
      return console.log(err);
   } else {
      console.log(response);
   }
});

Lors de l'exécution du programme ci-dessus, il synchronise les deux bases de données affichant le message suivant.

{ 
   push: { 
      ok: true,
      start_time: Fri Mar 25 2016 15:54:37 GMT+0530 (India Standard Time),
      docs_read: 6,
      docs_written: 6,
      doc_write_failures: 0,
      errors: [],
      last_seq: 10,
      status: 'complete',
      end_time: Fri Mar 25 2016 15:54:37 GMT+0530 (India Standard Time) 
   },
   pull: { 
      ok: true,
      start_time: Fri Mar 25 2016 15:54:37 GMT+0530 (India Standard Time),
      docs_read: 0,
      docs_written: 0,
      doc_write_failures: 0,
      errors: [],
      last_seq: 2,
      status: 'complete',
      end_time: Fri Mar 25 2016 15:54:37 GMT+0530 (India Standard Time) 
   } 
}