PouchDB - Nhân rộng

Một trong những tính năng quan trọng nhất của PouchDB là sao chép, tức là bạn có thể tạo một bản sao của cơ sở dữ liệu. Bạn có thể sao chép một phiên bản PouchDB được lưu trữ cục bộ hoặc một phiên bản CouchDB được lưu trữ từ xa.

Cú pháp

Sau đây là cú pháp sao chép cơ sở dữ liệu trong PouchDB. Đây, một bản sao củasource databaselà mục tiêu. Với phương pháp này, bạn có thể chuyển trực tiếp vị trí của cơ sở dữ liệu nguồn và đích ở định dạng Chuỗi hoặc bạn có thể chuyển các đối tượng đại diện cho chúng.

PouchDB.replicate(source, target, [options])

Cả nguồn và đích đều có thể là bản sao PouchDB hoặc bản sao CouchDB.

Sao chép LocalDB sang CouchDB

Giả sử có một cơ sở dữ liệu với tên sample_database trong PouchDB, và nó chứa 3 tài liệu doc1, doc2 và doc3, có nội dung như hình dưới đây.

doc1 = {_id: '001', name: 'Ram', age: 23, Designation: 'Programmer'} 
doc2 = {_id: '002', name: 'Robert', age: 24, Designation: 'Programmer'} 
doc3 = {_id: '003', name: 'Rahim', age: 25, Designation: 'Programmer'}

Sau đây là một ví dụ tạo một bản sao của cơ sở dữ liệu có tên sample_database được lưu trữ cục bộ trong CouchDB.

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

var localdb = 'sample_database';

//Creating remote database object 
var remotedb = 'http://localhost:5984/sample_database';

//Replicating a local database to Remote 
PouchDB.replicate(localDB, remoteDB); 
console.log ("Database replicated successfully");

Lưu đoạn mã trên vào một tệp có tên Replication_example.js. Mở dấu nhắc lệnh và thực thi tệp JavaScript bằngnode như hình bên dưới.

C:\PouchDB_Examples >node Replication_example.js

Thao tác này tạo một bản sao của cơ sở dữ liệu có tên sample_database trong phiên bản CouchDB và hiển thị thông báo trên bảng điều khiển như hình dưới đây.

Database replicated successfully

Bạn có thể xác minh xem cơ sở dữ liệu có được sao chép trong phiên bản CouchDB của mình hay không bằng cách nhấp vào liên kết sau http://127.0.0.1:5984/_utils/index.html.

Khi nhấp vào, bạn có thể xem danh sách cơ sở dữ liệu trong CouchDB của mình. Bạn cũng có thể quan sát thấy rằng một bản sao của cơ sở dữ liệusample_database được tạo ở đây.

Nếu bạn chọn cơ sở dữ liệu sao chép, bạn có thể xem nội dung của nó như hình dưới đây.

Sao chép CouchDB sang PouchDB

Giả sử có một cơ sở dữ liệu với tên Remote_Database trong CouchDB và nó chứa 3 tài liệu doc1, doc2 và doc3, có nội dung như hình dưới đây.

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

Sau đây là một ví dụ tạo một bản sao của cơ sở dữ liệu có tên Remote_Database được lưu trữ trong CouchDB trong bộ nhớ cục bộ.

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

var localdb = 'sample_database';

var remotedb = 'http://localhost:5984/sample_database1';

//Replicating a local database to Remote
PouchDB.replicate(remotedb, localdb);
console.log("Database replicated successfully");

Lưu đoạn mã trên vào một tệp có tên Replication_example2.js. Mở dấu nhắc lệnh và thực thi tệp JavaScript bằngnode như hình bên dưới.

C:\PouchDB_Examples >node Replication_example2.js

Điều này tạo một bản sao của cơ sở dữ liệu có tên remote_database trong cá thể PouchDB và hiển thị thông báo trên bảng điều khiển như hình dưới đây.

Database replicated successfully

Bạn có thể xác minh xem cơ sở dữ liệu có được sao chép trong phiên bản Túi của bạn hay không bằng cách thực thi mã sau.

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

//Creating the database object
var db = new PouchDB('remote_database');

//Retrieving all the documents in PouchDB
db.allDocs({include_docs: true, attachments: true}, function(err, docs) {
   if (err) {
      return console.log(err);
   } else {
      console.log(docs.rows);
   }
});

Nếu cơ sở dữ liệu được nhân bản khi thực thi đoạn mã trên, bạn sẽ nhận được nội dung của cơ sở dữ liệu được nhân bản như hình dưới đây.

[ 
   { 
      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-c4cce025dbd30d21e40882d41842d5a4' }, 
      doc: { 
         name: 'Mary', 
         age: 23, 
         Designation: 'Admin', 
         _id: '003', 
         _rev: '1-c4cce025dbd30d21e40882d41842d5a4' 
      } 
   } 
]