এই সেকশনে, আমরা PouchDB এর ব্যাকআপ এবং রিস্টোর কৌশল সম্পর্কে একটি বাস্তব উদাহরণ এবং ডেমো তৈরি করব, যেখানে একটি Angular অ্যাপ্লিকেশনে PouchDB ডেটাবেসের ব্যাকআপ নেওয়া হবে এবং পরে সেটি রিস্টোর করা হবে।
১. PouchDB ব্যাকআপ নেওয়া
আমরা একটি Angular অ্যাপ্লিকেশনে PouchDB ব্যবহার করে ডেটাবেস থেকে সমস্ত ডকুমেন্ট এক্সপোর্ট করব এবং সেটি JSON ফাইল আকারে সেভ করব।
Step 1: Angular অ্যাপে PouchDB ইন্টিগ্রেশন
প্রথমে, PouchDB ইনস্টল করতে হবে:
npm install pouchdb
এটি ইনস্টল করার পর, Angular অ্যাপ্লিকেশনে PouchDB ইমপোর্ট করুন।
import PouchDB from 'pouchdb';
Step 2: ব্যাকআপ ফাংশন তৈরি করা
এখন, backup নামের একটি ফাংশন তৈরি করব যা সমস্ত ডকুমেন্ট এক্সপোর্ট করবে এবং JSON ফাইল হিসেবে সেভ করবে।
import { Component, OnInit } from '@angular/core';
import PouchDB from 'pouchdb';
@Component({
selector: 'app-pouchdb-backup',
templateUrl: './pouchdb-backup.component.html',
styleUrls: ['./pouchdb-backup.component.css']
})
export class PouchdbBackupComponent implements OnInit {
private db: any;
constructor() { }
ngOnInit(): void {
// PouchDB ডাটাবেস তৈরি
this.db = new PouchDB('my_database');
}
// ব্যাকআপ ফাংশন
backupDatabase(): void {
this.db.allDocs({ include_docs: true }).then((result) => {
// ডেটাবেস থেকে সমস্ত ডকুমেন্ট
const docs = result.rows.map(row => row.doc);
// JSON ফাইল হিসেবে ব্যাকআপ ডেটা তৈরি
const backupData = JSON.stringify(docs);
// ফাইল সেভ করার জন্য ফাইল সিস্টেমে সংরক্ষণ করতে পারেন
console.log(backupData); // এখানে আপনি ফাইল সেভ করার কোড দিতে পারেন
}).catch((err) => {
console.error("ব্যাকআপ তোলার সময় ত্রুটি:", err);
});
}
}
এটি ব্যাকআপ ফাংশন তৈরি করবে যা allDocs() মেথড ব্যবহার করে সমস্ত ডকুমেন্ট বের করবে এবং JSON ফাইল আকারে তৈরি করবে। আপনি এই ডেটা পরে ফাইল সিস্টেমে সংরক্ষণ করতে পারবেন।
Step 3: ব্যাকআপ বাটন তৈরি করা
এখন, একটি HTML বাটন তৈরি করব যা ব্যাকআপ প্রক্রিয়া ট্রিগার করবে।
<!-- pouchdb-backup.component.html -->
<button (click)="backupDatabase()">ব্যাকআপ নিন</button>
এটি একটি বাটন তৈরি করবে, যা ক্লিক করলে backupDatabase() ফাংশনটি চালু হবে এবং ডেটা ব্যাকআপ হবে।
২. PouchDB ডেটা রিস্টোর করা
ব্যাকআপ নেওয়ার পর, আমাদের একটি রিস্টোর ফাংশন তৈরি করতে হবে, যা ব্যাকআপ করা ডেটা আবার ডাটাবেসে ইমপোর্ট করবে।
Step 1: রিস্টোর ফাংশন তৈরি করা
restoreDatabase(backupData: string): void {
const docs = JSON.parse(backupData); // ব্যাকআপ JSON ডেটা প্যার্স করা
// ব্যাকআপ ডেটা থেকে ডকুমেন্টগুলো রিস্টোর করা
this.db.bulkDocs(docs).then((response) => {
console.log("ডেটা রিস্টোর সম্পন্ন হয়েছে:", response);
}).catch((err) => {
console.error("ডেটা রিস্টোর করার সময় ত্রুটি:", err);
});
}
এটি bulkDocs() মেথড ব্যবহার করে ব্যাকআপ ডেটা রিস্টোর করবে। এখানে backupData হলো সেই JSON ফাইল যা আপনি ব্যাকআপ হিসেবে তৈরি করেছিলেন।
Step 2: রিস্টোর বাটন তৈরি করা
এখন, রিস্টোর করার জন্য একটি বাটন তৈরি করা হবে।
<!-- pouchdb-backup.component.html -->
<button (click)="restoreDatabase(backupData)">রিস্টোর করুন</button>
এটি রিস্টোর বাটন তৈরি করবে, যা ক্লিক করলে restoreDatabase() ফাংশনটি চালু হবে।
৩. ব্যাকআপ এবং রিস্টোরের সম্পূর্ণ কোড
এখন, সম্পূর্ণ কোডটি দেখতে পারেন:
import { Component, OnInit } from '@angular/core';
import PouchDB from 'pouchdb';
@Component({
selector: 'app-pouchdb-backup',
templateUrl: './pouchdb-backup.component.html',
styleUrls: ['./pouchdb-backup.component.css']
})
export class PouchdbBackupComponent implements OnInit {
private db: any;
constructor() { }
ngOnInit(): void {
// PouchDB ডাটাবেস তৈরি
this.db = new PouchDB('my_database');
}
// ব্যাকআপ ফাংশন
backupDatabase(): void {
this.db.allDocs({ include_docs: true }).then((result) => {
// ডেটাবেস থেকে সমস্ত ডকুমেন্ট
const docs = result.rows.map(row => row.doc);
// JSON ফাইল হিসেবে ব্যাকআপ ডেটা তৈরি
const backupData = JSON.stringify(docs);
// ব্যাকআপ ডেটা লগ করা (এখানে আপনি ফাইল সেভ করার কোড দিতে পারেন)
console.log(backupData);
}).catch((err) => {
console.error("ব্যাকআপ তোলার সময় ত্রুটি:", err);
});
}
// ডেটা রিস্টোর ফাংশন
restoreDatabase(backupData: string): void {
const docs = JSON.parse(backupData); // ব্যাকআপ JSON ডেটা প্যার্স করা
// ব্যাকআপ ডেটা থেকে ডকুমেন্টগুলো রিস্টোর করা
this.db.bulkDocs(docs).then((response) => {
console.log("ডেটা রিস্টোর সম্পন্ন হয়েছে:", response);
}).catch((err) => {
console.error("ডেটা রিস্টোর করার সময় ত্রুটি:", err);
});
}
}
এটি একটি বাস্তব উদাহরণ যেখানে আপনি PouchDB এর সাথে ব্যাকআপ এবং রিস্টোর প্রক্রিয়া কার্যকরভাবে সম্পন্ন করতে পারবেন।
সারাংশ
এই উদাহরণে, আমরা দেখেছি কিভাবে Angular অ্যাপে PouchDB ব্যবহার করে ডেটাবেস ব্যাকআপ নেওয়া এবং রিস্টোর করা যায়। এর মধ্যে ব্যাকআপ ফাংশন এবং রিস্টোর ফাংশন তৈরি করা হয়েছে, এবং HTML বাটন ব্যবহার করে এগুলি কার্যকর করা হয়েছে। এর মাধ্যমে আপনি সহজেই PouchDB ডেটাবেসের ডেটা ব্যাকআপ এবং রিস্টোর করতে পারবেন।
PouchDB একটি ক্লায়েন্ট-সাইড ডেটাবেস লাইব্রেরি যা আপনাকে ব্রাউজারে ডেটা সংরক্ষণ এবং পরিচালনা করার সুবিধা দেয়। এর সাহায্যে আপনি খুব সহজেই Create, Read, Update, এবং Delete (CRUD) অপারেশন সম্পাদন করতে পারবেন। এই টিউটোরিয়ালে, আমরা একটি React Native অ্যাপে PouchDB দিয়ে একটি সম্পূর্ণ CRUD অ্যাপ্লিকেশন তৈরি করব।
ধাপ ১: PouchDB ইনস্টল করা
প্রথমে, আপনার প্রজেক্টে PouchDB ইনস্টল করতে হবে। React Native প্রজেক্টে PouchDB ইনস্টল করার জন্য নিচের কমান্ডটি ব্যবহার করুন:
npm install pouchdb-react-native
এটি ইনস্টল হওয়ার পর, pouchdb-react-native লাইব্রেরি ইমপোর্ট করুন:
import PouchDB from 'pouchdb-react-native';
ধাপ ২: ডেটাবেস তৈরি এবং কনফিগারেশন
PouchDB ব্যবহার করতে প্রথমে একটি ডেটাবেস তৈরি করতে হবে। এখানে একটি ডেটাবেস তৈরি করা হচ্ছে এবং ডেটাবেসের সাথে CRUD অপারেশন করা হবে।
// ডেটাবেস তৈরি
const db = new PouchDB('my_database');
ধাপ ৩: Create (ডকুমেন্ট তৈরি)
এখন, ডেটাবেসে নতুন ডকুমেন্ট যোগ করার জন্য put() ফাংশন ব্যবহার করা হবে:
// একটি ডকুমেন্ট তৈরি করা
const createDoc = async () => {
const doc = {
_id: '1', // ডকুমেন্টের ইউনিক আইডি
name: 'John Doe',
age: 25,
};
try {
const response = await db.put(doc);
console.log('Document created:', response);
} catch (err) {
console.error('Error creating document:', err);
}
};
এখানে, put() ফাংশনটি নতুন ডকুমেন্ট সন্নিবেশ করবে।
ধাপ ৪: Read (ডেটা পড়া)
PouchDB তে ডেটা পড়তে get() ফাংশন ব্যবহার করা হয়। নিচে একটি ডকুমেন্ট রিট্রিভ করার উদাহরণ দেওয়া হল:
// ডকুমেন্ট রিট্রিভ করা
const readDoc = async (docId) => {
try {
const doc = await db.get(docId);
console.log('Document retrieved:', doc);
} catch (err) {
console.error('Error retrieving document:', err);
}
};
এখানে, get() ফাংশনটি docId দিয়ে ডকুমেন্ট রিট্রিভ করবে।
ধাপ ৫: Update (ডেটা আপডেট)
PouchDB তে ডেটা আপডেট করতে put() ফাংশন ব্যবহার করা হয়, তবে আপডেট করার আগে ডকুমেন্টের _rev মানটি সংগ্রহ করা প্রয়োজন। নিচে একটি ডকুমেন্ট আপডেট করার উদাহরণ দেওয়া হল:
// ডকুমেন্ট আপডেট করা
const updateDoc = async () => {
try {
const doc = await db.get('1'); // প্রথমে ডকুমেন্টটি রিট্রিভ করা
doc.age = 26; // ডেটা আপডেট করা
const response = await db.put(doc); // আপডেট করা ডকুমেন্টটি পুনরায় সেভ করা
console.log('Document updated:', response);
} catch (err) {
console.error('Error updating document:', err);
}
};
এখানে, আমরা প্রথমে ডকুমেন্টটি রিট্রিভ করেছি এবং তারপরে age ফিল্ড আপডেট করেছি।
ধাপ ৬: Delete (ডেটা মুছে ফেলা)
PouchDB তে ডেটা মুছে ফেলতে remove() ফাংশন ব্যবহার করা হয়, তবে মুছে ফেলার জন্য ডকুমেন্টের _rev মানটি প্রয়োজন। নিচে একটি ডকুমেন্ট মুছে ফেলার উদাহরণ দেওয়া হলো:
// ডকুমেন্ট মুছে ফেলা
const deleteDoc = async () => {
try {
const doc = await db.get('1'); // ডকুমেন্ট রিট্রিভ করা
const response = await db.remove(doc); // ডকুমেন্ট মুছে ফেলা
console.log('Document deleted:', response);
} catch (err) {
console.error('Error deleting document:', err);
}
};
এখানে, প্রথমে ডকুমেন্টটি রিট্রিভ করা হয়েছে এবং তারপর remove() ফাংশন দিয়ে সেটি মুছে ফেলা হয়েছে।
ধাপ ৭: React Native UI তে CRUD অপারেশন যুক্ত করা
এখন, আমরা React Native UI তে CRUD অপারেশনগুলো কার্যকরীভাবে যুক্ত করব। নিচে একটি উদাহরণ দেওয়া হলো যেখানে UI ব্যবহারকারীকে ডকুমেন্ট তৈরি, পড়া, আপডেট এবং মুছে ফেলার সুবিধা দেয়:
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
import PouchDB from 'pouchdb-react-native';
// ডেটাবেস তৈরি
const db = new PouchDB('my_database');
export default function App() {
const [doc, setDoc] = useState(null);
// ডকুমেন্ট তৈরি
const handleCreate = async () => {
const doc = {
_id: '1',
name: 'John Doe',
age: 25,
};
await db.put(doc);
console.log('Document created');
};
// ডকুমেন্ট পড়া
const handleRead = async () => {
const doc = await db.get('1');
setDoc(doc);
};
// ডকুমেন্ট আপডেট
const handleUpdate = async () => {
const doc = await db.get('1');
doc.age = 26;
await db.put(doc);
console.log('Document updated');
};
// ডকুমেন্ট মুছে ফেলা
const handleDelete = async () => {
const doc = await db.get('1');
await db.remove(doc);
console.log('Document deleted');
};
return (
<View>
<Button title="Create Document" onPress={handleCreate} />
<Button title="Read Document" onPress={handleRead} />
<Button title="Update Document" onPress={handleUpdate} />
<Button title="Delete Document" onPress={handleDelete} />
{doc && (
<Text>
Document: {doc.name}, Age: {doc.age}
</Text>
)}
</View>
);
}
এখানে, আমরা Button ব্যবহার করে বিভিন্ন CRUD অপারেশন পরিচালনা করেছি এবং ডকুমেন্টের তথ্য UI তে প্রদর্শন করেছি।
সারাংশ
এই টিউটোরিয়ালে, আমরা দেখেছি কিভাবে PouchDB ব্যবহার করে React Native অ্যাপে একটি সম্পূর্ণ CRUD অ্যাপ্লিকেশন তৈরি করা যায়। PouchDB এর সাহায্যে আপনি ক্লায়েন্ট-সাইড ডেটাবেসে Create, Read, Update, এবং Delete অপারেশনগুলো খুব সহজে সম্পাদন করতে পারবেন। PouchDB এর put(), get(), remove() এবং find() ফাংশনগুলি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে কার্যকরীভাবে ডেটা ম্যানিপুলেট করতে পারেন।
CouchDB এবং PouchDB একটি শক্তিশালী ডেটাবেস সিঙ্ক্রোনাইজেশন সমাধান প্রদান করে। PouchDB, CouchDB এর সাথে সামঞ্জস্যপূর্ণ একটি ক্লায়েন্ট-সাইড ডাটাবেস, যা অফলাইনে ডেটা সঞ্চয় এবং পরবর্তী সময়ে ইন্টারনেট সংযোগ পাওয়ার পর সিঙ্কিং করতে সক্ষম। এই উদাহরণে আমরা দেখব কিভাবে PouchDB এবং CouchDB এর মধ্যে সিঙ্ক্রোনাইজেশন করা যায়।
১. PouchDB এবং CouchDB সম্পর্কে সংক্ষিপ্ত ধারণা
- PouchDB: এটি একটি ওপেন সোর্স JavaScript ডাটাবেস লাইব্রেরি, যা ব্রাউজারে এবং Node.js এ ডেটা সঞ্চয় করতে ব্যবহৃত হয়। এটি CouchDB এর সাথে একযোগভাবে কাজ করতে পারে এবং অফলাইন সিঙ্ক্রোনাইজেশন সাপোর্ট দেয়।
- CouchDB: এটি একটি ওপেন সোর্স NoSQL ডাটাবেস সিস্টেম, যা HTTP REST API ব্যবহার করে ডেটা পরিচালনা করে। CouchDB ক্লাউড বা সার্ভারে ব্যবহৃত হয় এবং PouchDB এর সাথে ডেটা সিঙ্ক্রোনাইজ করতে সক্ষম।
২. PouchDB এবং CouchDB Sync করার জন্য প্রস্তুতি
- CouchDB ইনস্টলেশন: প্রথমে নিশ্চিত করুন যে আপনার সিস্টেমে CouchDB ইনস্টল করা আছে এবং এটি কনফিগার করা হয়েছে। CouchDB সাধারণত
localhost:5984এ চলে থাকে। এটি ব্রাউজারে অ্যাক্সেস করতে হবে। PouchDB ইনস্টলেশন: PouchDB ইনস্টল করতে নিচের কোড ব্যবহার করুন:
npm install pouchdbCouchDB তে একটি ডেটাবেস তৈরি করা: CouchDB তে একটি নতুন ডেটাবেস তৈরি করুন, যেমন
tasks.- আপনি
curlবাCouchDB's web interfaceব্যবহার করে নতুন ডেটাবেস তৈরি করতে পারেন:
curl -X PUT http://localhost:5984/tasks- আপনি
৩. PouchDB এবং CouchDB এর মধ্যে সিঙ্ক্রোনাইজেশন
এখন, আমরা দেখব কিভাবে PouchDB ব্যবহার করে ব্রাউজারে একটি লোকাল ডেটাবেস তৈরি করতে এবং তারপর সেটি CouchDB এর সাথে সিঙ্ক করতে হবে।
PouchDB তে ডেটাবেস তৈরি এবং সিঙ্কিং শুরু করা
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PouchDB & CouchDB Sync Example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pouchdb/7.0.0/pouchdb.min.js"></script>
</head>
<body>
<h1>PouchDB & CouchDB Sync Example</h1>
<script>
// লোকাল PouchDB ডেটাবেস তৈরি
var localDB = new PouchDB('local_tasks');
// CouchDB এর URL
var remoteDB = new PouchDB('http://localhost:5984/tasks');
// সিঙ্ক্রোনাইজেশন সেটআপ করা
localDB.sync(remoteDB, {
live: true, // লাইভ সিঙ্কিং
retry: true // পুনরায় চেষ্টা
}).on('change', function(info) {
console.log('Sync changed:', info);
}).on('paused', function(info) {
console.log('Sync paused:', info);
}).on('active', function() {
console.log('Sync resumed');
}).on('error', function(err) {
console.log('Sync error:', err);
});
// ডেটা যোগ করা
function addTask() {
var task = {
_id: new Date().toISOString(),
task: 'Sample Task',
completed: false
};
localDB.put(task).then(function(response) {
console.log('Task added:', response);
}).catch(function(err) {
console.log('Error adding task:', err);
});
}
// নতুন টাস্ক যোগ করতে ফাংশন কল করুন
addTask();
</script>
</body>
</html>
৪. কোড ব্যাখ্যা:
লোকাল ডেটাবেস (PouchDB):
var localDB = new PouchDB('local_tasks');এটি PouchDB তে একটি নতুন ডেটাবেস তৈরি করবে যেটি ব্রাউজারে স্টোর হবে। এখানে
local_tasksনামক ডেটাবেসটি তৈরি করা হয়েছে।CouchDB রিমোট ডেটাবেস:
var remoteDB = new PouchDB('http://localhost:5984/tasks');এটি CouchDB তে অবস্থিত
tasksডেটাবেসের সাথে কানেক্ট করবে।সিঙ্ক্রোনাইজেশন:
localDB.sync(remoteDB, { live: true, retry: true });এই লাইনটি লাইভ সিঙ্ক্রোনাইজেশন শুরু করবে, অর্থাৎ ডেটা পরিবর্তন হলে তা স্বয়ংক্রিয়ভাবে আপডেট হবে।
retry: trueঅপশন ব্যবহার করা হলে, সিঙ্ক্রোনাইজেশন ব্যর্থ হলে এটি পুনরায় চেষ্টা করবে।ডেটা যোগ করা:
var task = { _id: new Date().toISOString(), task: 'Sample Task', completed: false }; localDB.put(task).then(function(response) { console.log('Task added:', response); });এখানে একটি নতুন টাস্ক ডকুমেন্ট তৈরি করা হচ্ছে এবং সেটি লোকাল ডেটাবেসে সংরক্ষণ করা হচ্ছে। এই টাস্কটি পরে CouchDB এর সাথে সিঙ্ক হয়ে যাবে।
৫. সার্ভার এবং ব্রাউজার সিঙ্ক:
- যখন আপনি ব্রাউজারে নতুন টাস্ক যোগ করবেন, সেটি PouchDB তে সংরক্ষণ হবে এবং CouchDB তে সিঙ্ক হয়ে যাবে।
- CouchDB তে যদি কোনো পরিবর্তন ঘটে (যেমন নতুন ডেটা যোগ করা বা কোনো ডেটা পরিবর্তিত হওয়া), তবে PouchDB তে সেই পরিবর্তনটি স্বয়ংক্রিয়ভাবে সিঙ্ক হয়ে যাবে।
সারাংশ
এই উদাহরণে, আমরা দেখেছি কিভাবে PouchDB এবং CouchDB এর মধ্যে ডেটা সিঙ্ক্রোনাইজেশন করা যায়। PouchDB ব্রাউজারে একটি লোকাল ডেটাবেস তৈরি করে এবং CouchDB সার্ভারের সাথে সেটি সিঙ্ক হয়ে যায়। PouchDB দিয়ে আপনি অফলাইনে কাজ করতে পারেন এবং পরে ইন্টারনেট কানেকশন পাওয়ার পর ডেটা CouchDB এর সাথে সিঙ্ক হয়ে যাবে।
ArangoDB এবং PouchDB, দুটি NoSQL ডেটাবেসের মধ্যে Mango Query এবং Indexed Query এর মাধ্যমে আপনি ডেটার উপর অনুসন্ধান (queries) চালাতে পারেন। Mango Query PouchDB এবং CouchDB এর একটি শক্তিশালী কুয়েরি ইঞ্জিন যা SQL-এর মতো কাজ করে, তবে NoSQL ডেটাবেসের জন্য উপযুক্ত। আর Indexed Query এর মাধ্যমে ডেটা দ্রুত অনুসন্ধান এবং ফিল্টার করা সম্ভব হয়।
এখানে PouchDB ব্যবহার করে Indexed Query এবং Mango Query এর বাস্তব উদাহরণ দেখানো হয়েছে।
১. Indexed Query
Indexed Query হল একটি অনুসন্ধান পদ্ধতি যেখানে একটি ইনডেক্স তৈরি করে নির্দিষ্ট ফিল্ডে ডেটা অনুসন্ধান করা হয়। এটি পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে, বিশেষত যখন ডাটাবেসে বড় পরিমাণে ডেটা থাকে।
Indexed Query উদাহরণ:
ধরা যাক, আপনি age এবং city ফিল্ডের ভিত্তিতে ডেটা অনুসন্ধান করতে চান। এর জন্য প্রথমে আপনাকে ইনডেক্স তৈরি করতে হবে।
Step 1: ইনডেক্স তৈরি
const db = new PouchDB('my_database');
// age এবং city ফিল্ডে ইনডেক্স তৈরি করা
db.createIndex({
index: {
fields: ['age', 'city']
}
}).then(() => {
console.log('Index created successfully');
}).catch(err => {
console.error('Error creating index:', err);
});
এখানে, createIndex() ফাংশন ব্যবহার করে আমরা age এবং city ফিল্ডের উপর ইনডেক্স তৈরি করেছি।
Step 2: Indexed Query ব্যবহার করা
db.find({
selector: {
age: { $gte: 20 },
city: { $eq: 'Dhaka' }
},
fields: ['_id', 'name', 'age', 'city'],
sort: [{ age: 'desc' }]
}).then(result => {
console.log('Query result:', result.docs);
}).catch(err => {
console.error('Error executing query:', err);
});
এখানে:
selectorব্যবহার করে আমরাageএবংcityফিল্ডের উপর শর্ত দিয়েছি।sortঅপশন ব্যবহার করেageফিল্ডের ভিত্তিতে ফলাফল সাজানো হয়েছে।
এইভাবে Indexed Query ব্যবহার করে দ্রুত এবং কার্যকরীভাবে ডেটা অনুসন্ধান করা সম্ভব।
২. Mango Query
Mango Query হল PouchDB এবং CouchDB এর একটি ডেটাবেস কুয়েরি ইঞ্জিন, যা JSON ফরম্যাটে কুয়েরি স্ট্রিং তৈরি করে এবং SQL-এর মতো স্টাইলের কুয়েরি অপারেশন সম্পাদন করতে সক্ষম।
Mango Query উদাহরণ:
ধরা যাক, আমাদের একটি ডেটাবেস আছে যেখানে বিভিন্ন ব্যবহারকারীর ডেটা আছে এবং আমরা age এবং name ফিল্ডের ভিত্তিতে অনুসন্ধান করতে চাই।
Step 1: Mango Query ব্যবহার করা
db.find({
selector: {
age: { $gte: 18 },
name: { $eq: 'John Doe' }
},
fields: ['_id', 'name', 'age'],
sort: [{ age: 'asc' }]
}).then(result => {
console.log('Mango query result:', result.docs);
}).catch(err => {
console.error('Error executing Mango query:', err);
});
এখানে:
selectorএর মাধ্যমে আমরাageএবংnameফিল্ডের শর্ত দিয়ে ডেটা খুঁজে বের করেছি।fieldsব্যবহার করে আমরা কেবলমাত্র_id,name, এবংageফিল্ড দেখতে চেয়েছি।sortঅপশন দিয়ে ফলাফলগুলোageফিল্ড অনুযায়ী সজ্জিত করা হয়েছে।
Step 2: MongoDB এর মতো ব্যবহার
Mango Query ব্যবহার করে MongoDB এর মতো ডেটা অনুসন্ধান করা সম্ভব। এখানে $gte (Greater Than or Equal) এবং $eq (Equal) অপারেটর ব্যবহার করা হয়েছে। Mango Query এর মাধ্যমে JSON অবজেক্টের শর্ত অনুসারে ডেটা খোঁজা হয়, যা MongoDB এর স্টাইলের মতো।
৩. Mango Query এর আরো জটিল উদাহরণ
ধরা যাক, আপনি age এবং name ফিল্ডের উপর আরো জটিল শর্ত ব্যবহার করতে চান:
db.find({
selector: {
age: { $gte: 20, $lte: 40 }, // বয়স ২০ থেকে ৪০ এর মধ্যে
name: { $regex: 'John' } // নামের মধ্যে "John" থাকা
},
fields: ['_id', 'name', 'age'],
sort: [{ name: 'asc' }]
}).then(result => {
console.log('Complex Mango query result:', result.docs);
}).catch(err => {
console.error('Error executing Mango query:', err);
});
এখানে:
$gteএবং$lteব্যবহার করেageফিল্ডের জন্য রেঞ্জ নির্ধারণ করা হয়েছে।$regexব্যবহার করেnameফিল্ডের মধ্যেJohnশব্দটি থাকা ডেটা অনুসন্ধান করা হয়েছে।
সারাংশ
- Indexed Query: এটি ইনডেক্স তৈরি করে নির্দিষ্ট ফিল্ডে ডেটা দ্রুত অনুসন্ধান করতে সাহায্য করে। এটি পারফরম্যান্স বৃদ্ধির জন্য আদর্শ।
- Mango Query: এটি JSON অবজেক্টের মতো শর্ত দিয়ে কুয়েরি পরিচালনা করতে সক্ষম। Mango Query PouchDB-তে SQL-স্টাইল অনুসন্ধান এবং জটিল শর্ত দিয়ে ডেটা খুঁজে বের করতে সাহায্য করে।
PouchDB তে Indexed Query এবং Mango Query ব্যবহার করে আপনি ডেটা অনুসন্ধানকে আরও দ্রুত এবং কার্যকরী করতে পারবেন।
Offline-First অ্যাপ্লিকেশন ডিজাইন একটি পদ্ধতি যেখানে অ্যাপ্লিকেশনটি সর্বপ্রথম অফলাইনে কার্যকরী হতে সক্ষম, এবং পরবর্তীতে ইন্টারনেট কানেকশন পাওয়া গেলে তা সিঙ্ক হয়ে যায়। PouchDB এর সাহায্যে Offline-First অ্যাপ্লিকেশন তৈরি করা সহজ, কারণ PouchDB ডেটাবেসটি ব্রাউজারের মধ্যে ডেটা সঞ্চয় করে এবং অফলাইনে কাজ করার পর ইন্টারনেট কানেকশনের সাথে সিঙ্ক হয়।
এই ডেমোতে আমরা একটি টাস্ক ম্যানেজমেন্ট অ্যাপ্লিকেশন তৈরি করব যেখানে ব্যবহারকারীরা টাস্ক অ্যাড করতে, দেখতে এবং সম্পাদনা করতে পারবে, এবং এই সমস্ত ডেটা ব্রাউজারে সংরক্ষিত হবে এবং ইন্টারনেট কানেকশনের মাধ্যমে সার্ভারে সিঙ্ক হবে।
ডেমো: Offline-First টাস্ক ম্যানেজমেন্ট অ্যাপ্লিকেশন
1. HTML কোড (index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Offline-First Task Manager</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pouchdb/7.0.0/pouchdb.min.js"></script>
</head>
<body>
<h1>Offline-First Task Manager</h1>
<div>
<h3>Add Task</h3>
<input type="text" id="taskInput" placeholder="Enter a task">
<button onclick="addTask()">Add Task</button>
</div>
<div>
<h3>Tasks</h3>
<ul id="taskList"></ul>
</div>
<script>
// PouchDB ডাটাবেস তৈরি
var localDb = new PouchDB('tasks_db');
// ডেটা অ্যাড করা
function addTask() {
var taskInput = document.getElementById('taskInput').value;
if (taskInput) {
var task = {
_id: new Date().toISOString(),
task: taskInput
};
localDb.put(task).then(function(response) {
console.log('Task added:', response);
loadTasks(); // টাস্ক লোড করা
document.getElementById('taskInput').value = ''; // ইনপুট ফিল্ড ক্লিয়ার করা
}).catch(function(err) {
console.log('Error adding task:', err);
});
}
}
// টাস্ক লোড করা
function loadTasks() {
localDb.allDocs({ include_docs: true, descending: true }).then(function(result) {
var taskList = document.getElementById('taskList');
taskList.innerHTML = ''; // পুরনো টাস্কগুলো মুছে ফেলা
result.rows.forEach(function(row) {
var li = document.createElement('li');
li.textContent = row.doc.task;
taskList.appendChild(li);
});
}).catch(function(err) {
console.log('Error loading tasks:', err);
});
}
// পেজ লোড হওয়ার সময় টাস্ক লোড করা
loadTasks();
// ক্লাউড ডেটাবেস সিঙ্ক করার জন্য (যদি থাকে)
var remoteDb = new PouchDB('https://your-cloud-db-url.com/tasks_db');
// পাউচডিবি সিঙ্ক সেটআপ করা
localDb.sync(remoteDb, {
live: true,
retry: true
}).on('change', function(info) {
console.log('Sync change detected:', info);
}).on('error', function(err) {
console.log('Sync error:', err);
});
</script>
</body>
</html>
কোডের ব্যাখ্যা
- PouchDB ডাটাবেস:
localDb = new PouchDB('tasks_db');এই কোড লাইনে একটি লোকাল পাউচডিবি ডাটাবেস তৈরি করা হচ্ছে যার নামtasks_db।- এই ডাটাবেসে টাস্কগুলি অফলাইনে সঞ্চিত হবে এবং ইন্টারনেট কানেকশন পাওয়ার পর তা সার্ভারের সাথে সিঙ্ক হবে।
- টাস্ক অ্যাড করা:
- ব্যবহারকারী যখন টাস্ক ইনপুট ফিল্ডে কিছু লিখে "Add Task" বোতামে ক্লিক করবে, তখন
addTask()ফাংশনটি চালু হবে। - ফাংশনটি একটি নতুন টাস্ক তৈরি করবে এবং সেটি পাউচডিবি ডাটাবেসে সংরক্ষণ করবে।
- ব্যবহারকারী যখন টাস্ক ইনপুট ফিল্ডে কিছু লিখে "Add Task" বোতামে ক্লিক করবে, তখন
- টাস্ক লোড করা:
loadTasks()ফাংশনটি পাউচডিবি ডাটাবেস থেকে সমস্ত টাস্ক নিয়ে আসে এবং সেগুলি UI তে প্রদর্শন করে।localDb.allDocs({ include_docs: true, descending: true })ব্যবহার করে সমস্ত ডকুমেন্ট লোড করা হয়।
- Syncing with Cloud:
localDb.sync(remoteDb, { live: true, retry: true });এই কোডটি ডেটাবেসের লোকাল কপি এবং রিমোট ক্লাউড ডাটাবেসের মধ্যে সিঙ্কিং নিশ্চিত করে।- যখন ব্রাউজার অফলাইন থাকে, তখন ডেটা লোকাল ডাটাবেসে সঞ্চিত হবে এবং যখন ইন্টারনেট কানেকশন ফিরে আসবে, তখন এটি ক্লাউড ডাটাবেসের সাথে সিঙ্ক হবে।
PouchDB এর Syncing ব্যবস্থার ব্যাখ্যা
PouchDB এর sync() ফাংশনটি দুইটি ডেটাবেসের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন করে। এটি বিশেষত Offline-First অ্যাপ্লিকেশনগুলির জন্য গুরুত্বপূর্ণ, যেখানে ডেটা সার্ভারের সাথে সিঙ্ক না হয়ে পর্যন্ত ব্রাউজারের লোকাল স্টোরেজে সঞ্চিত থাকে।
- live: true: এই অপশনটি সিঙ্কিং প্রক্রিয়াটি লাইভ রাখে। এর মানে হল যে, যদি কোনো পরিবর্তন হয় (যেমন নতুন টাস্ক অ্যাড করা), সেগুলি স্বয়ংক্রিয়ভাবে সিঙ্ক হয়ে যাবে।
- retry: true: যদি সিঙ্ক্রোনাইজেশন ব্যর্থ হয়, তবে এটি পুনরায় চেষ্টা করবে।
সুবিধাসমূহ
- Offlne-First: ব্যবহারকারী ইন্টারনেট সংযোগের না থাকার পরেও টাস্ক যোগ এবং সম্পাদনা করতে পারে।
- Automatic Sync: যখন ইন্টারনেট কানেকশন ফিরে আসে, তখন ডেটা স্বয়ংক্রিয়ভাবে সিঙ্ক হয়ে যাবে।
- Real-Time Updates: টাস্কগুলির মধ্যে কোনো পরিবর্তন হলে তা লাইভ সিঙ্কিংয়ের মাধ্যমে ক্লাউডে আপডেট হবে।
- Simple Data Management: PouchDB ব্যবহার করে ডেটা পরিচালনা করা সহজ এবং ব্রাউজারের মধ্যে সঞ্চয় করা যায়।
সারাংশ
এটি একটি Offline-First Web Application যেখানে PouchDB ব্যবহার করে টাস্ক ম্যানেজমেন্ট অ্যাপ্লিকেশন তৈরি করা হয়েছে। এখানে ডেটা লোকাল ডাটাবেসে সঞ্চিত হয় এবং ইন্টারনেট কানেকশন ফিরে আসলে তা ক্লাউড ডাটাবেসের সাথে সিঙ্ক হয়। PouchDB-এর sync() ফাংশনটি এই সিঙ্ক্রোনাইজেশন নিশ্চিত করে, যা অফলাইন-অফলাইন মোডে ব্যবহারের জন্য খুবই কার্যকরী।
Read more