PouchDB - Sincronización

Puede sincronizar las bases de datos almacenadas localmente en PouchDB con las almacenadas en CouchDB. En el capítulo anterior, hemos visto cómo replicar bases de datos usando PouchDB. Allí hemos utilizado el métodoPouchDB.replicate(source, destination).

Además de esto, también podemos replicar los datos, desde la base de datos local a la base de datos remota, y desde la base de datos remota a la base de datos local usando replicate.to() y replicate.from() métodos como se muestra a continuación.

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

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

Dónde, localDB es un objeto de base de datos almacenado localmente en PouchDB y remoteDB es un objeto de una base de datos que se almacena en CouchDB.

Ejemplo

Supongamos que hay una base de datos con el nombre local_database en PouchDB, y contiene 3 documentos, doc1, doc2 y doc3, con los contenidos que se muestran a continuación.

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'}

Y hay una base de datos con el nombre Remote_Database en CouchDB y contiene 2 documentos doc1, doc2, con los contenidos que se muestran a continuación.

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

A continuación se muestra un ejemplo de la sincronización de estas dos bases de datos, donde una se almacena en PouchDB y la otra se almacena en CouchDB, utilizando el replicate.to() y replicate.from() métodos.

//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");

Guarde el código anterior en un archivo con el nombre Synchronising_databases.js. Abra el símbolo del sistema y ejecute el archivo JavaScript usandonode Como se muestra abajo.

C:\PouchDB_Examples >node Synchronising_databases.js

Esto sincroniza las dos bases de datos, remoteDB y localDB, y muestra un mensaje en la consola como se muestra a continuación.

Databases synchronized successfully.

Después de sincronizar las dos bases de datos, visite el http://127.0.0.1:5984/_utils/index.html y seleccione el remote_database. Puede observar que los documentos de la base de datos local (003, 004, 005) fueron copiados en esta base de datos como se muestra a continuación.

Del mismo modo, si recupera el contenido del local_database almacenados en PouchDB se puede llegar a observar que aquí se copiaron documentos de la base de datos que está almacenada en CouchDB.

[ 
   { 
      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' 
      } 
   } 
]

Puede reescribir el programa anterior usando el sync() método proporcionado por PouchDB en lugar de los dos métodos replicate.to() y replicate.from() Como se muestra abajo.

//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);
   }
});

Al ejecutar el programa anterior, sincroniza las dos bases de datos mostrando el siguiente mensaje.

{ 
   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) 
   } 
}