Transaction Management এবং ACID Properties

Transactions এবং Batch Processing - জাভা মাইএসকিউএল (Java MySQL) - Database Tutorials

298

Transaction Management হলো ডেটাবেসে এক বা একাধিক SQL ক্যোয়ারি একযোগে সম্পাদন করার প্রক্রিয়া, যা একটি নির্দিষ্ট স্টেটমেন্ট গ্রুপকে একক ইউনিট হিসেবে গণ্য করে। ট্রানজেকশনের মধ্যে একাধিক অপারেশন থাকতে পারে, এবং এগুলোর মধ্যে কোন একটি অপারেশন ব্যর্থ হলে, পুরো ট্রানজেকশনটি প্রত্যাহার (rollback) করা হয়। এতে ডেটাবেসের এককতা এবং ইন্টিগ্রিটি বজায় থাকে।

ACID Properties হলো ট্রানজেকশনের জন্য একটি সেট বৈশিষ্ট্য যা ডেটাবেসের উপর নির্ভরশীলতা, নিরাপত্তা এবং সঠিকতা নিশ্চিত করে। এই চারটি বৈশিষ্ট্য হল: Atomicity, Consistency, Isolation, এবং Durability


1. Transaction Management কী?

একটি ট্রানজেকশন হলো এক বা একাধিক SQL ক্যোয়ারি যা একত্রে একটি কার্য সম্পাদন করে। ট্রানজেকশন শুরু হলে, তার কার্যক্রম একসাথে সম্পন্ন করতে হয়। যদি এর মধ্যে কোনো ক্যোয়ারি ব্যর্থ হয়, তবে পুরো ট্রানজেকশনটি ব্যর্থ হয়ে যায় এবং সবকিছু পূর্বাবস্থায় ফিরে আসে (rollback)। ট্রানজেকশন শেষ হলে (commit) তখনই পরিবর্তনগুলো স্থায়ীভাবে ডেটাবেসে লেখা হয়।

ট্রানজেকশন এর মৌলিক স্টেটমেন্টসমূহ:

  • BEGIN TRANSACTION: ট্রানজেকশন শুরু হয়।
  • COMMIT: ট্রানজেকশন সফল হলে, সমস্ত পরিবর্তন ডেটাবেসে স্থায়ী করা হয়।
  • ROLLBACK: যদি কোনো ত্রুটি ঘটে, তবে সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়।

2. ACID Properties:

ACID হলো চারটি মৌলিক বৈশিষ্ট্যের সংমিশ্রণ, যা নিশ্চিত করে যে ট্রানজেকশন সম্পূর্ণ এবং সঠিকভাবে কার্যকর হবে:

1. Atomicity (অ্যাটমিকতা)

  • অ্যাটমিকতা মানে ট্রানজেকশনটি সম্পূর্ণভাবে সফল হবে বা পুরোপুরি ব্যর্থ হবে। অর্থাৎ, একটি ট্রানজেকশনের সব অপারেশন একত্রে কাজ করবে, অথবা কিছুই হবে না। যদি একটি অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশন বাতিল হয়ে যাবে এবং পূর্বের অবস্থায় ফিরে যাবে।
  • উদাহরণ: একটি ব্যাংক অ্যাকাউন্ট থেকে টাকা স্থানান্তর করা হলে, একসাথে টাকা কাটা এবং অপর অ্যাকাউন্টে জমা হওয়া দুটি অপারেশন সম্পূর্ণ হতে হবে। যদি কোনো কারণে টাকা কাটা অপারেশন সফল না হয়, তবে জমা অপারেশনটি বাতিল হবে।

2. Consistency (সঙ্গতি)

  • সঙ্গতি মানে ট্রানজেকশনটি শুরু হওয়ার আগে এবং পরে ডেটাবেস অবশ্যই একটি সঠিক অবস্থায় থাকবে। ডেটাবেসের কোনো নিয়ম বা কনস্ট্রেইন্ট (যেমন: ফরেন কী, ইউনিক কনস্ট্রেইন্ট) লঙ্ঘন করা যাবে না।
  • উদাহরণ: যদি একটি ট্রানজেকশন চালানোর পর কোনো কলাম তার কনস্ট্রেইন্ট (যেমন, নাল মান গ্রহণ করতে না পারে) লঙ্ঘন করে, তবে তা বাতিল হয়ে যাবে।

3. Isolation (বিভাজন)

  • বিভাজন মানে একাধিক ট্রানজেকশন একই সময় কার্যকর হলেও, প্রত্যেকটি ট্রানজেকশন একে অপর থেকে স্বাধীনভাবে কাজ করবে। এক ট্রানজেকশনের কার্যক্রম অন্য ট্রানজেকশনের সাথে মিলবে না, যতক্ষণ না ট্রানজেকশনটি কমপ্লিট হয়।
  • উদাহরণ: যদি দুটি ট্রানজেকশন একই ডেটাতে কাজ করে, তবে একটির প্রভাব অন্যটির উপরে পড়বে না যতক্ষণ না তারা সম্পূর্ণ হয়। এই বৈশিষ্ট্যটি নিশ্চিত করতে isolation level ব্যবহৃত হয়।
    • Read Uncommitted: এক ট্রানজেকশন অন্য ট্রানজেকশনের অপ্রকাশিত ডেটা দেখতে পারে।
    • Read Committed: একটি ট্রানজেকশন শুধুমাত্র অন্য ট্রানজেকশনের কমিটকৃত (পরিপূর্ণ) ডেটা দেখতে পারে।
    • Repeatable Read: একটি ট্রানজেকশন শুরু হওয়া থেকে শেষ হওয়া পর্যন্ত ডেটা পরিবর্তন করা যাবে না।
    • Serializable: সমস্ত ট্রানজেকশন একে অপরের সাথে সিরিয়ালি এক্সিকিউট হবে, যেন তাদের মধ্যে কোনো ধরণের কনফ্লিক্ট না হয়।

4. Durability (স্থায়িত্ব)

  • স্থায়িত্ব মানে ট্রানজেকশন সফলভাবে সম্পন্ন হওয়ার পর, তার পরিবর্তন ডেটাবেসে স্থায়ীভাবে সংরক্ষিত থাকবে। এমনকি যদি সিস্টেম ক্র্যাশ হয়ে যায়, তবে সেই পরিবর্তনগুলো ঠিক থাকবে এবং পুনরুদ্ধার করা সম্ভব হবে।
  • উদাহরণ: একটি টাকা স্থানান্তর ট্রানজেকশনের পর, সিস্টেম যদি হঠাৎ বন্ধ হয়ে যায়, তবে সেই স্থানান্তর তথ্য সিস্টেম পুনরায় চালু হলে এখনও সঠিকভাবে থাকবে।

3. Java-তে Transaction Management

Java-তে ট্রানজেকশন পরিচালনা করার জন্য JDBC (Java Database Connectivity) ব্যবহার করা হয়। সাধারণভাবে, auto-commit মোডটি বন্ধ করা হয় এবং commit() বা rollback() মেথডগুলো ব্যবহার করে ট্রানজেকশন পরিচালিত হয়।

উদাহরণ:

import java.sql.*;

public class TransactionExample {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;

        try {
            // ড্রাইভার লোড করা
            Class.forName("com.mysql.cj.jdbc.Driver");

            // ডেটাবেস সংযোগ স্থাপন
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "password");

            // ট্রানজেকশন অটো-কমিট বন্ধ করা
            conn.setAutoCommit(false);

            // স্টেটমেন্ট তৈরি
            stmt = conn.createStatement();

            // প্রথম অপারেশন
            stmt.executeUpdate("INSERT INTO Employees (Name, Age) VALUES ('John', 30)");

            // দ্বিতীয় অপারেশন
            stmt.executeUpdate("INSERT INTO Employees (Name, Age) VALUES ('Jane', 25)");

            // ট্রানজেকশন সফল হলে কমিট
            conn.commit();

        } catch (SQLException | ClassNotFoundException e) {
            try {
                // কোনো ত্রুটি ঘটলে রোলব্যাক
                if (conn != null) {
                    conn.rollback();
                }
            } catch (SQLException se) {
                se.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                // সংযোগ বন্ধ করা
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
}

এখানে:

  • setAutoCommit(false): ট্রানজেকশন পরিচালনার জন্য অটো-কমিট বন্ধ করা হয়।
  • commit(): সমস্ত ক্যোয়ারি সফলভাবে সম্পন্ন হলে, পরিবর্তনগুলো স্থায়ী করা হয়।
  • rollback(): কোনো ত্রুটি ঘটলে, সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরিয়ে আনা হয়।

সারাংশ

Transaction Management ডেটাবেসে একাধিক অপারেশন একত্রে পরিচালনা করার পদ্ধতি। ACID Properties ট্রানজেকশনের নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করে, যাতে ডেটাবেসের তথ্য সঠিকভাবে সংরক্ষিত থাকে এবং অপ্রত্যাশিত ত্রুটি বা সিস্টেম ক্র্যাশের পরেও ডেটাবেস সঠিক অবস্থায় থাকে। Java JDBC ব্যবহার করে আপনি সহজেই ট্রানজেকশন পরিচালনা করতে পারেন এবং commit()rollback() মেথড ব্যবহার করে কার্যকরভাবে ডেটাবেসের অখণ্ডতা বজায় রাখতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...