PouchDB - Senkronizasyon

PouchDB'de yerel olarak depolanan veritabanlarını CouchDB'de depolananlarla senkronize edebilirsiniz. Önceki bölümde, PouchDB kullanılarak veritabanlarının nasıl kopyalanacağını gördük. Orada yöntemi kullandıkPouchDB.replicate(source, destination).

Buna ek olarak, verileri yerel veritabanından uzak veritabanına ve uzak veritabanından yerel veritabanına kopyalayabiliriz. replicate.to() ve replicate.from() aşağıda gösterildiği gibi yöntemler.

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

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

Nerede, localDB PouchDB'de yerel olarak depolanan bir veritabanı nesnesidir ve remoteDB CouchDB'de depolanan bir veritabanı nesnesidir.

Misal

İsminde bir veritabanı olduğunu varsayalım local_database PouchDB'de yer alır ve aşağıda gösterildiği gibi içeriğe sahip 3 belge, doc1, doc2 ve doc3 içerir.

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

Ve adında bir veritabanı var Remote_Database CouchDB'de bulunur ve içeriği aşağıda gösterildiği gibi olan 2 belge doc1, doc2 içerir.

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

Aşağıda, biri PouchDB'de, diğeri ise CouchDB'de depolanan bu iki veritabanının senkronizasyonuna bir örnek verilmiştir. replicate.to() ve replicate.from() yöntemler.

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

Yukarıdaki kodu adıyla bir dosyaya kaydedin Synchronising_databases.js. Komut istemini açın ve JavaScript dosyasını kullanarak çalıştırın.node Aşağıda gösterildiği gibi.

C:\PouchDB_Examples >node Synchronising_databases.js

Bu, remoteDB ve localDB iki veritabanını senkronize eder ve aşağıda gösterildiği gibi konsolda bir mesaj görüntüler.

Databases synchronized successfully.

İki veritabanını senkronize ettikten sonra, http://127.0.0.1:5984/_utils/index.html ve seçin remote_database. Yerel veri tabanına (003, 004, 005) ait dokümanların aşağıda gösterildiği gibi bu veri tabanına kopyalandığını gözlemleyebilirsiniz.

Aynı şekilde, içeriğin içeriğini getirirseniz local_database PouchDB'de depolanan CouchDB'de depolanan veritabanının belgelerinin burada kopyalandığını görebilirsiniz.

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

Yukarıdaki programı kullanarak yeniden yazabilirsiniz. sync() iki yöntem yerine PouchDB tarafından sağlanan yöntem replicate.to() ve replicate.from() Aşağıda gösterildiği gibi.

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

Yukarıdaki programı çalıştırırken, aşağıdaki mesajı görüntüleyerek iki veritabanını senkronize eder.

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