Java Technologies Transaction Isolation Level এর প্রকারভেদ গাইড ও নোট

225

JDBC (Java Database Connectivity) ডেটাবেসে ডেটার সঙ্গে কাজ করার সময় Transaction Isolation Level খুবই গুরুত্বপূর্ণ বিষয়। এটি transaction এর মধ্যে ডেটা পড়া, লেখার এবং আপডেট করার সময় concurrency issues (একাধিক ইউজারের একযোগভাবে ডেটা অ্যাক্সেস) নিয়ন্ত্রণ করে।

Transaction Isolation Level এমন একটি প্যারামিটার যা ডেটাবেসকে বলে দেয় কিভাবে একাধিক ট্রানজেকশন একে অপরের থেকে বিচ্ছিন্ন থাকবে এবং একে অপরকে কীভাবে প্রভাবিত করবে। JDBC ব্যবহার করে আমরা ট্রানজেকশন আইসোলেশন লেভেল নিয়ন্ত্রণ করতে পারি, যা আমাদের অ্যাপ্লিকেশনকে ডেটা অ্যাক্সেসের নিরাপত্তা এবং পারফরম্যান্স নিশ্চিত করতে সাহায্য করে।

Transaction Isolation Level এর প্রকারভেদ:

JDBC-এ ৪টি সাধারণ Transaction Isolation Level রয়েছে, যা SQL স্ট্যান্ডার্ডের উপর ভিত্তি করে ডেটাবেসের মধ্যে কনকারেন্ট এক্সিকিউশনের আচরণ নির্ধারণ করে। এই চারটি লেভেল হলো:

  1. READ UNCOMMITTED
  2. READ COMMITTED
  3. REPEATABLE READ
  4. SERIALIZABLE

এগুলি প্রত্যেকটি নির্ধারণ করে ট্রানজেকশনগুলো একে অপরের প্রভাব থেকে কতটুকু বিচ্ছিন্ন থাকবে। এই চারটি লেভেল তাদের পারফরম্যান্স এবং নিরাপত্তা স্তরের মধ্যে পার্থক্য রাখে।


1. READ UNCOMMITTED (সবচেয়ে কম আইসোলেশন)

ব্যাখ্যা:

এই লেভেলে এক ট্রানজেকশনের মধ্যে অপর ট্রানজেকশনের কাজ (অথবা অপ্রকাশিত পরিবর্তন) দেখা যেতে পারে। অর্থাৎ, এটি dirty reads অনুমোদন করে।

  • Dirty Read: এক ট্রানজেকশন যে ডেটা পড়বে, সেটা অন্য ট্রানজেকশন দ্বারা কনফার্ম হওয়ার আগে (commit হওয়ার আগে) পরিবর্তিত হতে পারে।
  • এটি সবচেয়ে কম নিরাপত্তা এবং পারফরম্যান্সের মধ্যে সবচেয়ে দ্রুত।

যখন ব্যবহার করবেন:

  • যখন আপনার দ্রুত পারফরম্যান্স প্রয়োজন, এবং ডেটার সামান্য পরিবর্তন বা অপর্যাপ্ততা গ্রহণযোগ্য।
  • সাধারণত এটি logging বা temporary data অ্যাক্সেসের জন্য ব্যবহার করা যেতে পারে।

উদাহরণ:

Connection conn = DriverManager.getConnection(url, username, password);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);

2. READ COMMITTED

ব্যাখ্যা:

এই লেভেলে, এক ট্রানজেকশন অন্য ট্রানজেকশনের কমিট হওয়া (commit) ডেটা ছাড়া কিছু দেখতে পারে না। এটি dirty reads প্রতিরোধ করে, কিন্তু non-repeatable reads অনুমোদন করে।

  • Non-repeatable Read: একটি ট্রানজেকশন একটি ভ্যালু পড়ে, তবে যখন পরবর্তী বার সেটি পড়ে, তখন ওই ভ্যালু পরিবর্তিত হয়ে যায়।
  • এটি সাধারণত ব্যবহার হয়, কারণ এটি ডেটাবেসের মধ্যে কিছু নিরাপত্তা প্রদান করে, কিন্তু এটির পারফরম্যান্স ও নিরাপত্তা স্তর মাঝারি।

যখন ব্যবহার করবেন:

  • যখন আপনি ডেটাবেসের মধ্যে একে অপরকে আংশিকভাবে নির্ভরশীল ডেটা অ্যাক্সেস করতে চান, তবে একই ডেটার মধ্যে পুনরাবৃত্তি না হওয়া নিশ্চিত করতে চান।

উদাহরণ:

Connection conn = DriverManager.getConnection(url, username, password);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

3. REPEATABLE READ

ব্যাখ্যা:

এই লেভেলে, dirty reads এবং non-repeatable reads উভয়ই প্রতিরোধ করা হয়। তবে এটি phantom reads অনুমোদন করতে পারে, যেখানে এক ট্রানজেকশন নতুন ডেটা (অথবা rows) যুক্ত করতে পারে, যা অন্য ট্রানজেকশনে আগে ছিল না।

  • Phantom Read: এক ট্রানজেকশন যখন একটি কন্ডিশন চেক করে, তখন অন্য ট্রানজেকশন নতুন রেকর্ড তৈরি করে বা মুছে ফেলে, ফলে পূর্ববর্তী ট্রানজেকশনটি নতুন রেকর্ডের সাথে আরও একটি ডেটা দেখতে পায়।
  • এটি READ COMMITTED থেকে আরও বেশি নিরাপত্তা প্রদান করে, তবে phantom reads এখনও সম্ভব।

যখন ব্যবহার করবেন:

  • যখন আপনি চান যে, ট্রানজেকশন চলাকালীন সময়ে ডেটা একটানা পড়ে এবং পরিবর্তন না হয়, তবে কিছু নতুন রেকর্ড বা রিলেটেড ডেটা অনুমোদিত না হয়।

উদাহরণ:

Connection conn = DriverManager.getConnection(url, username, password);
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

4. SERIALIZABLE (সবচেয়ে বেশি আইসোলেশন)

ব্যাখ্যা:

এই লেভেল সবচেয়ে বেশি নিরাপত্তা প্রদান করে, যেখানে dirty reads, non-repeatable reads, এবং phantom reads এর সমস্ত ধরনের সমস্যা প্রতিরোধ করা হয়। এটি একে অপরের প্রভাব থেকে সম্পূর্ণভাবে বিচ্ছিন্ন থাকে, অর্থাৎ একাধিক ট্রানজেকশন একে অপরকে প্রভাবিত করতে পারে না।

  • Serializable লেভেলে ট্রানজেকশনগুলো একে অপরের মতো সিরিয়ালি চলতে থাকে, একে অপরকে কোনো প্রভাব ফেলার আগে।
  • এটি নিরাপত্তার সবচেয়ে ভালো স্তর, তবে পারফরম্যান্সে অনেকটাই ধীর হয়।

যখন ব্যবহার করবেন:

  • যখন আপনার একাধিক ট্রানজেকশনের মধ্যে সম্পূর্ণ আইসোলেশন এবং সর্বোচ্চ নিরাপত্তা নিশ্চিত করা প্রয়োজন, যেমন ব্যাংকিং বা ফাইনান্সিয়াল অ্যাপ্লিকেশনগুলির ক্ষেত্রে।

উদাহরণ:

Connection conn = DriverManager.getConnection(url, username, password);
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

সারাংশ

Transaction Isolation Level ডেটাবেসে ডেটা অ্যাক্সেস এবং ব্যবস্থাপনার ক্ষেত্রে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। JDBC এর মাধ্যমে আপনি READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, এবং SERIALIZABLE এর মধ্যে একটিকে চয়ন করতে পারেন, যা ট্রানজেকশনগুলোর মধ্যে পারস্পরিক সম্পর্ক এবং ডেটার সুরক্ষা নির্ধারণ করবে।

  • READ UNCOMMITTED: কম নিরাপত্তা, দ্রুত পারফরম্যান্স।
  • READ COMMITTED: সাধারণত ব্যবহৃত, কিছু নিরাপত্তা এবং পারফরম্যান্সের মধ্যে ভারসাম্য।
  • REPEATABLE READ: বেশি নিরাপত্তা, তবে phantom reads হতে পারে।
  • SERIALIZABLE: সর্বোচ্চ নিরাপত্তা, তবে পারফরম্যান্স কম।
Content added By
Promotion

Are you sure to start over?

Loading...