PouchDB - Sincronização

Você pode sincronizar os bancos de dados armazenados localmente no PouchDB com aqueles armazenados no CouchDB. No capítulo anterior, vimos como replicar bancos de dados usando PouchDB. Lá nós usamos o métodoPouchDB.replicate(source, destination).

Além disso, também podemos replicar os dados, do banco de dados local para o banco de dados remoto, e do banco de dados remoto para o banco de dados local usando replicate.to() e replicate.from() métodos como mostrado abaixo.

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

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

Onde, localDB é um objeto de banco de dados armazenado localmente no PouchDB e remoteDB é um objeto de um banco de dados armazenado no CouchDB.

Exemplo

Suponha que haja um banco de dados com o nome local_database no PouchDB, e contém 3 documentos, doc1, doc2 e doc3, tendo o conteúdo mostrado abaixo.

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

E há um banco de dados com o nome Remote_Database no CouchDB e contém 2 documentos doc1, doc2, tendo o conteúdo mostrado abaixo.

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

A seguir está um exemplo de sincronização desses dois bancos de dados, onde um é armazenado no PouchDB e o outro é armazenado no CouchDB, usando o replicate.to() e 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");

Salve o código acima em um arquivo com o nome Synchronising_databases.js. Abra o prompt de comando e execute o arquivo JavaScript usandonode como mostrado abaixo.

C:\PouchDB_Examples >node Synchronising_databases.js

Isso sincroniza os dois bancos de dados remoteDB e localDB e exibe uma mensagem no console conforme mostrado abaixo.

Databases synchronized successfully.

Depois de sincronizar os dois bancos de dados, visite o http://127.0.0.1:5984/_utils/index.html e selecione o remote_database. Você pode observar que os documentos do banco de dados local (003, 004, 005) foram copiados neste banco de dados conforme mostrado abaixo.

Da mesma forma, se você buscar o conteúdo do local_database armazenado no PouchDB você pode começar a observar que os documentos do banco de dados que está armazenado no CouchDB foram copiados aqui.

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

Você pode reescrever o programa acima usando o sync() método fornecido pelo PouchDB em vez dos dois métodos replicate.to() e replicate.from() como mostrado abaixo.

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

Ao executar o programa acima, ele sincroniza as duas bases de dados exibindo a seguinte mensagem.

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