PouchDB - Đồng bộ hóa
Bạn có thể đồng bộ hóa cơ sở dữ liệu được lưu trữ cục bộ trong PouchDB với những cơ sở dữ liệu được lưu trữ trong CouchDB. Trong chương trước, chúng ta đã biết cách tái tạo cơ sở dữ liệu bằng cách sử dụng PouchDB. Ở đó chúng tôi đã sử dụng phương phápPouchDB.replicate(source, destination).
Ngoài ra, chúng ta cũng có thể sao chép dữ liệu, từ cơ sở dữ liệu cục bộ sang cơ sở dữ liệu từ xa và từ cơ sở dữ liệu từ xa sang cơ sở dữ liệu cục bộ bằng cách sử dụng replicate.to() và replicate.from() như hình bên dưới.
//Replicating data from local database to remote database
localDB.replicate.to(remoteDB);
//Replicating data from remote database to local database
localDB.replicate.from(remoteDB);
Ở đâu, localDB là một đối tượng của cơ sở dữ liệu được lưu trữ cục bộ trong PouchDB và remoteDB là một đối tượng của cơ sở dữ liệu được lưu trữ trong CouchDB.
Thí dụ
Giả sử có một cơ sở dữ liệu với tên local_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: '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'}
Và có một cơ sở dữ liệu với tên Remote_Database trong CouchDB và nó chứa 2 tài liệu doc1, doc2, có nội dung như hình bên dưới.
doc1 = {_id: '001', name: 'Geeta', age: 25, Designation: 'Programmer'}
doc2 = {_id: '002', name: 'Zara Ali', age: 24, Designation: 'Manager'}
Dưới đây là ví dụ về việc đồng bộ hóa hai cơ sở dữ liệu này, trong đó một cơ sở dữ liệu được lưu trữ trong PouchDB và cơ sở dữ liệu khác được lưu trữ trong CouchDB, sử dụng replicate.to() và replicate.from() các phương pháp.
//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");
Lưu đoạn mã trên vào một tệp có tên Synchronising_databases.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 Synchronising_databases.js
Thao tác này đồng bộ hóa hai cơ sở dữ liệu remoteDB và localDB, đồng thời hiển thị thông báo trên bảng điều khiển như hình dưới đây.
Databases synchronized successfully.
Sau khi đồng bộ hóa hai cơ sở dữ liệu, hãy truy cập http://127.0.0.1:5984/_utils/index.html và chọn remote_database. Bạn có thể thấy rằng các tài liệu của cơ sở dữ liệu cục bộ (003, 004, 005) đã được sao chép trong cơ sở dữ liệu này như được hiển thị bên dưới.
Theo cách tương tự, nếu bạn tìm nạp nội dung của local_database được lưu trữ trong PouchDB, bạn có thể quan sát rằng các tài liệu của cơ sở dữ liệu được lưu trữ trong CouchDB đã được sao chép ở đâ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-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'
}
}
]
Bạn có thể viết lại chương trình trên bằng cách sử dụng sync() phương thức do PouchDB cung cấp thay vì hai phương thức replicate.to() và replicate.from() như hình bên dưới.
//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);
}
});
Khi thực hiện chương trình trên, nó đồng bộ hóa hai cơ sở dữ liệu hiển thị thông báo sau.
{
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)
}
}