TinyDB তে Transactional Operations

Transactions এবং Data Consistency - টাইনিডিবি (TinyDB) - Database Tutorials

313

TinyDB একটি ছোট এবং হালকা-ওজনের NoSQL ডাটাবেস যা সাধারণত ছোট স্কেল অ্যাপ্লিকেশন এবং প্রোটোটাইপ ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এটি একটি সাধারণ ডেটাবেস হলেও, Transactional Operations বা লেনদেনীয় কার্যক্রম এর মতো বৈশিষ্ট্য সরাসরি সমর্থন করে না। তবে, TinyDB এর মধ্যে লেনদেনের কিছু মৌলিক ধারণা বাস্তবায়ন করা সম্ভব, বিশেষ করে কাস্টম স্টোরেজ এবং মিডলওয়্যার ব্যবহার করে।


TinyDB তে Transaction কী?

একটি transaction হল এমন একটি অপারেশন যেখানে একাধিক কাজ একসাথে সম্পন্ন হয় এবং অথবা সফলভাবে শেষ হয়, অথবা কোনো ত্রুটির ক্ষেত্রে সম্পূর্ণ অপারেশনটি বাতিল হয়ে যায়। এটি নিশ্চিত করে যে ডেটা সঠিকভাবে এবং একাধিক প্রক্রিয়া একে অপরকে প্রভাবিত না করে পরিচালিত হচ্ছে।

TinyDB তে সঠিক ট্রানজেকশন সমর্থন না থাকলেও, আপনি মেমরি স্টোরেজ বা কাস্টম স্টোরেজ ব্যবহার করে মৌলিক ট্রানজেকশনাল কার্যক্রম অর্জন করতে পারেন।


TinyDB তে Transactional Operations-এর মৌলিক ধারণা

TinyDB তে Transactional Operations বাস্তবায়ন করার জন্য কিছু কৌশল এবং পদ্ধতি ব্যবহার করা যেতে পারে:

  1. অপারেশনগুলো Atomic রাখা: এটি নিশ্চিত করে যে একাধিক কাজ একযোগে সফলভাবে সম্পন্ন হয়, বা একটি ত্রুটির কারণে সবকিছু বাতিল হয়ে যায়।
  2. Rollback বা Undo করা: যদি কোনো অপারেশন ব্যর্থ হয়, তবে আপনি পূর্ববর্তী অবস্থায় ফিরে যেতে পারেন।
  3. Savepoints এবং Commit: ট্রানজেকশনগুলো শেষ হওয়ার আগে মধ্যবর্তী পয়েন্টগুলোতে Savepoints তৈরি করা এবং সফল হলে Commit করা যেতে পারে।

TinyDB তে Atomic Operations (নমুনা)

TinyDB তে আপাতত, আপনি atomic operations বা পারস্পরিক সম্পর্কযুক্ত কাজগুলো একে একে পরিচালনা করতে পারেন এবং rollback-এর মতো কিছু কার্যক্রম সীমিতভাবে করতে পারেন।

উদাহরণ: Atomic Operations-এর ব্যবহার

from tinydb import TinyDB, Query
from tinydb.storages import MemoryStorage

# মেমরি স্টোরেজ ব্যবহার
db = TinyDB(storage=MemoryStorage)

# ডেটা যোগ করা
db.insert({'name': 'Rahim', 'age': 25})
db.insert({'name': 'Karim', 'age': 30})

# ট্রানজেকশন স্টাইল কার্যক্রম: সফল হলে ডেটা আপডেট করা
def perform_transaction():
    try:
        # ডেটা আপডেট
        db.update({'age': 26}, Query().name == 'Rahim')
        db.update({'age': 31}, Query().name == 'Karim')
        
        # কোনো ত্রুটি হলে ব্যতিক্রম তৈরি করা
        if True:  # উদাহরণস্বরূপ এখানে কোনো ত্রুটি শর্ত ব্যবহার করুন
            raise Exception("Some error occurred!")

        # যদি সফল হয় তবে কমিট করা
        db.commit()

    except Exception as e:
        print(f"Transaction failed: {e}")
        # রোলব্যাক: কোনো ত্রুটি হলে পূর্বাবস্থায় ফিরে যাওয়া
        db.rollback()

perform_transaction()

TinyDB তে Rollback এবং Commit

TinyDB সরাসরি commit এবং rollback সমর্থন না করলেও, আপনি custom storage ব্যবহার করে ট্রানজেকশন ম্যানেজমেন্ট তৈরি করতে পারেন। এটি সাধারণত ফাইলের উপর ভিত্তি করে কাজ করতে হবে, যেখানে পূর্বের অবস্থায় ফিরে যাওয়া সম্ভব।

from tinydb import TinyDB, Query
from tinydb.storages import JSONStorage
from tinydb.middlewares import CachingMiddleware

# একটি কাস্টম স্টোরেজে ট্রানজেকশন নিশ্চিত করা
class TransactionalStorage(JSONStorage):
    def __init__(self, path):
        super().__init__(path)
        self._backup = None

    def start_transaction(self):
        # প্রথমে ব্যাকআপ তৈরি করা
        self._backup = self.all()

    def rollback(self):
        # ব্যাকআপ থেকে রোলব্যাক করা
        if self._backup:
            self._store = self._backup

    def commit(self):
        # কোন পরিবর্তন না থাকলে ব্যাকআপ মুছে ফেলা
        self._backup = None

db = TinyDB('db.json', storage=TransactionalStorage)

# ট্রানজেকশন শুরু করা
db.storage.start_transaction()

# ডেটা যোগ করা
db.insert({'name': 'Aziz', 'age': 40})

# ত্রুটি ঘটলে রোলব্যাক করা
db.storage.rollback()

TinyDB তে Transactional Operations এর সুবিধা ও সীমাবদ্ধতা

সুবিধা:

  • একটি নির্ভরযোগ্য ডেটা আপডেট: সবকিছু একযোগে পরিবর্তন করা যায়, বা ব্যর্থ হলে পূর্বের অবস্থায় ফিরে যাওয়া যায়।
  • ডেটা Integrity: ডেটার অখণ্ডতা নিশ্চিত করা যায়, কারণ একাধিক পরিবর্তন একসাথে সম্পন্ন হয় বা বাতিল হয়।

সীমাবদ্ধতা:

  • সরাসরি ট্রানজেকশন সমর্থন না: TinyDB সঠিকভাবে ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন সমর্থন করে না।
  • মেমরি সীমাবদ্ধতা: যদি বেশি ডেটা আপডেট করা হয়, তবে মেমরি এবং ডিস্কের ব্যবহার বেড়ে যেতে পারে।

সারাংশ

TinyDB-তে সরাসরি ট্রানজেকশনাল সমর্থন না থাকলেও, কিছু কাস্টম স্টোরেজ এবং মিডলওয়্যার ব্যবহার করে মৌলিক ট্রানজেকশনাল কার্যক্রম বাস্তবায়ন করা যায়। Rollback এবং Commit পদ্ধতি ব্যবহার করে, আপনি একটি ট্রানজেকশন ব্যবস্থার মতো কাজ করতে পারেন, তবে এটি খুবই মৌলিক এবং সীমিত।

Content added By
Promotion

Are you sure to start over?

Loading...