TinyDB একটি হালকা-ওজনের ডাটাবেস, যা সাধারণত ছোট স্কেল অ্যাপ্লিকেশন এবং প্রোটোটাইপ ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। তবে, এটি ছোট থেকে মাঝারি আকারের ডেটাবেসের জন্য কার্যকরী, এবং ডেটাবেস ব্যাকআপের জন্য Automated Backup System তৈরি করা সম্ভব।
Automated Backup System এর মাধ্যমে, আপনি নির্দিষ্ট সময়ে বা নির্দিষ্ট অবস্থায় আপনার ডাটাবেসের একটি ব্যাকআপ তৈরি করতে পারেন। TinyDB এর storage এবং middlewares ব্যবহার করে এই ব্যবস্থা সহজে তৈরি করা যায়। এখানে ব্যাকআপ তৈরি, ব্যাকআপের সময় নির্ধারণ এবং ব্যাকআপের সংরক্ষণ প্রক্রিয়া ব্যাখ্যা করা হবে।
Automated Backup System এর কনসেপ্ট
- Backup Creation: যখনই ডেটা পরিবর্তিত হয় (ইনসার্ট, আপডেট, ডিলিট), তখন একটি ব্যাকআপ তৈরি হবে।
- Scheduled Backup: নির্দিষ্ট সময়ে (যেমন প্রতি ২৪ ঘণ্টায়) ব্যাকআপ তৈরি করা।
- Backup Storage: ব্যাকআপ ফাইলটি একটি নির্দিষ্ট ফোল্ডারে সংরক্ষণ করা হবে, এবং অতীত ব্যাকআপগুলোও নিরাপদ থাকবে।
Automated Backup System তৈরি করার প্রক্রিয়া
১. ব্যাকআপ স্টোরেজ কাস্টম স্টোরেজ ক্লাস তৈরি
TinyDB-তে ব্যাকআপ সিস্টেম তৈরি করতে Custom Storage ব্যবহার করা যাবে। আমরা JSONStorage স্টোরেজের উপর ভিত্তি করে একটি কাস্টম স্টোরেজ ক্লাস তৈরি করব, যা ডেটা পরিবর্তন হলে অথবা নির্দিষ্ট সময়ে ব্যাকআপ তৈরি করবে।
import shutil
import os
from tinydb import TinyDB
from datetime import datetime
class BackupStorage:
def __init__(self, path, backup_path):
self.db_path = path
self.backup_path = backup_path
self.db = TinyDB(path)
def backup(self):
"""ব্যাকআপ তৈরি করার পদ্ধতি"""
timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
backup_file = os.path.join(self.backup_path, f"backup_{timestamp}.json")
# ব্যাকআপ ফাইল কপি করা
shutil.copy(self.db_path, backup_file)
print(f"Backup created at {backup_file}")
def insert(self, data):
"""ডেটা ইনসার্ট এবং ব্যাকআপ তৈরি"""
self.db.insert(data)
self.backup() # ডেটা ইনসার্টের পর ব্যাকআপ তৈরি
def update(self, data, query):
"""ডেটা আপডেট এবং ব্যাকআপ তৈরি"""
self.db.update(data, query)
self.backup() # ডেটা আপডেটের পর ব্যাকআপ তৈরি
def remove(self, query):
"""ডেটা ডিলিট এবং ব্যাকআপ তৈরি"""
self.db.remove(query)
self.backup() # ডেটা ডিলিটের পর ব্যাকআপ তৈরি
২. ব্যাকআপ ফোল্ডার তৈরি
ব্যাকআপ ফাইলগুলো সংরক্ষণ করার জন্য একটি ফোল্ডার তৈরি করতে হবে:
# ব্যাকআপ সংরক্ষণের জন্য ফোল্ডার তৈরি
if not os.path.exists('backups'):
os.makedirs('backups')
৩. ব্যাকআপ সিস্টেমের ব্যবহার
এখন আমরা ব্যাকআপ সিস্টেমটি ব্যবহার করতে পারি:
# কাস্টম স্টোরেজ তৈরি এবং ডেটাবেসে সংযোগ
db = BackupStorage('db.json', 'backups')
# ডেটা ইনসার্ট করা
db.insert({'name': 'Aziz', 'age': 25, 'city': 'Dhaka'})
# ডেটা আপডেট করা
db.update({'age': 26}, Query().name == 'Aziz')
# ডেটা মুছে ফেলা
db.remove(Query().name == 'Aziz')
এখন, প্রতিবার যখনই ডেটা ইনসার্ট, আপডেট বা মুছে ফেলা হয়, তখন একটি ব্যাকআপ তৈরি হবে এবং backups ফোল্ডারে সংরক্ষিত হবে।
৪. নির্দিষ্ট সময়ে ব্যাকআপ তৈরি (Scheduled Backup)
আপনি Python's sched বা APScheduler লাইব্রেরি ব্যবহার করে নির্দিষ্ট সময়ে (যেমন প্রতি ২৪ ঘণ্টায়) ব্যাকআপ তৈরি করতে পারেন।
এখানে APScheduler ব্যবহার করে একটি Scheduled Backup উদাহরণ দেওয়া হলো:
pip install apscheduler
from apscheduler.schedulers.background import BackgroundScheduler
def scheduled_backup():
db.backup() # নির্দিষ্ট সময়ে ব্যাকআপ তৈরি
# ব্যাকআপ সিস্টেম এবং স্কেজ্যুলার শুরু করা
scheduler = BackgroundScheduler()
scheduler.add_job(scheduled_backup, 'interval', hours=24) # প্রতি ২৪ ঘণ্টায় ব্যাকআপ হবে
scheduler.start()
# এভাবে ব্যাকআপ চলতে থাকবে
এটি প্রতি ২৪ ঘণ্টায় স্বয়ংক্রিয়ভাবে ব্যাকআপ তৈরি করবে।
ব্যাকআপ কৌশল
- Timestamped Backup: ব্যাকআপ ফাইলের নামের মধ্যে টাইমস্ট্যাম্প (যেমন
backup_2024-11-27_10-30-00.json) ব্যবহার করা উচিত, যাতে পূর্ববর্তী ব্যাকআপগুলোও সংরক্ষিত থাকে এবং সময় অনুসারে ব্যাকআপ পুনরুদ্ধার করা যায়। - ব্যাকআপ রিটেনশন পলিসি: পুরনো ব্যাকআপগুলো মুছে ফেলার জন্য একটি রিটেনশন পলিসি স্থাপন করতে পারেন। উদাহরণস্বরূপ, আপনি সর্বশেষ ৭টি ব্যাকআপ সংরক্ষণ করতে পারেন এবং পুরনো ব্যাকআপগুলো মুছে ফেলতে পারেন।
সারাংশ
TinyDB তে Automated Backup System তৈরি করতে, আপনি কাস্টম স্টোরেজ এবং APScheduler লাইব্রেরি ব্যবহার করতে পারেন। ব্যাকআপ ফাইলগুলো timestamped ভাবে তৈরি হবে এবং নির্দিষ্ট সময়ে ব্যাকআপ তৈরি করা যাবে। এটি একটি কার্যকর পদ্ধতি ছোট স্কেল প্রজেক্টের জন্য, যাতে ডেটাবেসের সব পরিবর্তন স্বয়ংক্রিয়ভাবে ব্যাকআপ করা যায়।
Read more