3.1 ACID এর উদ্ভব

সংক্ষিপ্ত রূপ ACID প্রথম 1983 সালে Theo Haerder এবং Andreas Reuter এর একটি নিবন্ধে প্রকাশিত হয়েছিল। টেক্সটটি সহজ করার জন্য এবং এটিকে আরও বিশ্বাসযোগ্য করতে, আমি এই নিবন্ধটির একটি অংশের অনুবাদ দেব (সামান্য হ্রাস সহ)। এই স্নিপেটটি একটি ব্যাঙ্ক লেনদেনের উদাহরণ ব্যবহার করে যেখানে টাকা এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে স্থানান্তর করা হয়।

$BEGIN_TRANSACTIONএকটি লেনদেনের ধারণা, যা উদাহরণে এবং এর মধ্যে ডাটাবেসের সাথে সমস্ত মিথস্ক্রিয়া অন্তর্ভুক্ত করে $COMMIT_TRANSACTION, সমস্ত ক্রিয়াগুলি অবিভাজ্যভাবে সম্পাদন করা প্রয়োজন: হয় সমস্ত ক্রিয়াগুলি ডাটাবেসের অবস্থায় সঠিকভাবে প্রতিফলিত হয়, বা কিছুই ঘটে না। $COMMIT_TRANSACTIONব্যবহারকারীর কাছে পৌঁছানোর আগে কোনো সময়ে যদি ERRORধারণ করে একটি বিবৃতি প্রবেশ করে $RESTORE_TRANSACTION, তাহলে ডাটাবেসে কোনো পরিবর্তন প্রতিফলিত হয় না।

এই অবিভাজ্যতা অর্জন করতে, একটি লেনদেনের নিম্নলিখিত চারটি বৈশিষ্ট্য থাকতে হবে:

Atomicity (পরমাণু)। লেনদেনটি উপরে বর্ণিত সমস্ত-অথবা-কিছুই না হওয়া আবশ্যক, এবং যাই ঘটুক না কেন, ব্যবহারকারীকে অবশ্যই জানতে হবে যে লেনদেনটি কোন অবস্থায় আছে।

সামঞ্জস্য (সংগতি)। একটি লেনদেন যা লেনদেনের স্বাভাবিক প্রান্তে পৌঁছায় (EOT) এবং এর ফলে তার ফলাফল ডাটাবেসের ধারাবাহিকতা বজায় রাখে। অন্য কথায়, প্রতিটি সফল লেনদেন, সংজ্ঞা অনুসারে, শুধুমাত্র বৈধ ফলাফল দেয়। এই শর্ত চতুর্থ সম্পত্তি সমর্থন করার জন্য প্রয়োজনীয় - স্থায়িত্ব।

বিচ্ছিন্নতা (বিচ্ছিন্নতা)। একটি লেনদেনের মধ্যে ঘটতে থাকা ইভেন্টগুলিকে অন্য একযোগে কার্যকরী লেনদেন থেকে লুকিয়ে রাখতে হবে। যদি এই শর্তটি পূরণ না করা হয়, তবে উপরে উল্লিখিত কারণে, লেনদেনটি তার শুরুতে ফিরে আসা অসম্ভব হবে। বিচ্ছিন্নতা অর্জনের জন্য, সিঙ্ক্রোনাইজেশন নামক পদ্ধতিগুলি ব্যবহার করা হয় ...

স্থায়িত্ব (স্থায়িত্ব)। একবার একটি লেনদেন শেষ হয়ে গেলে এবং তার ফলাফল ডাটাবেসে প্রতিশ্রুতিবদ্ধ হয়ে গেলে, সিস্টেমটিকে অবশ্যই নিশ্চিত করতে হবে যে সেই ফলাফলগুলি পরবর্তী যে কোনও ব্যর্থতা থেকে বেঁচে থাকবে। যেহেতু লেনদেনের সেটগুলিকে বিস্তৃত নিয়ন্ত্রণের কোনো সুযোগ নেই, তাই ডাটাবেস ম্যানেজমেন্ট সিস্টেম (DBMS) এর লেনদেনের সীমানার বাইরে কোনো নিয়ন্ত্রণ নেই।

অতএব, ব্যবহারকারীকে অবশ্যই নিশ্চিত করতে হবে যে যদি সিস্টেম তাকে জানায় যে কিছু ঘটেছে, তাহলে এই "কিছু" সত্যিই ঘটেছে। যেহেতু, সংজ্ঞা অনুসারে, যেকোনো (সফলভাবে সম্পন্ন - S.K.) লেনদেন সঠিক, তাই অনিবার্যভাবে ভুল লেনদেন প্রদর্শিত হওয়ার ফলাফল (অর্থাৎ ভুল তথ্য ধারণকারী লেনদেন) শুধুমাত্র সংশ্লিষ্ট "কাউন্টার" লেনদেন (কাউন্টার লেনদেন) দ্বারা নির্মূল করা যেতে পারে।

3.2 লেনদেনের উত্থান

এই চারটি বৈশিষ্ট্য — পারমাণবিকতা, সামঞ্জস্য, বিচ্ছিন্নতা এবং স্থায়িত্ব (ACID) — লেনদেনমূলক দৃষ্টান্তের মূল বৈশিষ্ট্যগুলি বর্ণনা করে যা ডাটাবেস সিস্টেম ডিজাইনের অনেক দিককে প্রভাবিত করে। অতএব, আমরা বিশ্বাস করি যে লেনদেন সমর্থন করার জন্য যে কোনও সিস্টেমের ক্ষমতা এই সিস্টেমের মানের টাচস্টোন (ACID পরীক্ষা)।

একটি সাধারণ PL/1-SQL প্রোগ্রাম যা এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে তহবিল স্থানান্তর করে।

FUNDS_TRANSFER. PROCEDURE,
 $BEGIN_TRANSACTION;
 ON ERROR DO;                                   /* in case of error */
          $RESTORE_TRANSACTION,                 /* undo all work */
          GET INPUT MESSAGE;                    /* reacquire input */
          PUT MESSAGE ('TRANSFER FAILED');      /* report failure */
          GO TO COMMIT;
          END;
 GET INPUT MESSAGE;                             /* get and parse input */
 EXTRACT ACCOUNT_EBIT, ACCOUNT_CREDIT,
  AMOUNT FROM MESSAGE,
 $UPDATE ACCOUNTS                               /* do debit */
              SET BALANCE ffi BALANCE - AMOUNT
     WHERE ACCOUNTS.NUMBER = ACCOUNT_DEBIT;
 $UPDATE ACCOUNTS                               /* do credit */
              SET BALANCE = BALANCE + AMOUNT
     WHERE ACCOUNTS.NUMBER = ACCOUNT_CREDIT;
 $INSERT INTO HISTORY                           /* keep audit trail */
    <DATE, MESSAGE>;
 PUT MESSAGE ('TRANSFER DONE');                 /* report success */
COMMIT:                                         /* commit updates */
 $COMMIT_TRANSACTION;
 END;                                           /* end of program */

আমি আপনাকে মনে করিয়ে দেওয়ার জন্য এই কোডের একটি উদাহরণ দিয়েছি যে, প্রকৃতপক্ষে, ACID বৈশিষ্ট্যগুলি, একদিকে, লেনদেন সমর্থন করার দাবি করে এমন যেকোনো DBMS-এর জন্য প্রয়োজনীয়তা হিসাবে বিবেচনা করা যেতে পারে, এবং অন্যদিকে, একটি লেনদেনের সংজ্ঞা হিসাবে একটি ডাটাবেস সিস্টেম । এই সংজ্ঞা জাগতিক অনুশীলনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ। এটি কল্পনা করা কঠিন, উদাহরণস্বরূপ, একজন গ্রাহক যে একটি ব্যাঙ্কিং লেনদেন সম্পাদন করেন (তাই একজন জীবিত মানব টেলারের সহায়তায় বা ইন্টারনেট ব্যাঙ্কিং ব্যবহার করে) ব্যাঙ্কটি ACID-এর সমস্ত বৈশিষ্ট্য পূরণ করবে বলে আশা করে না৷ একটি ব্যাঙ্ক যেটি তার লেনদেনের জন্য ACID বৈশিষ্ট্য সমর্থন করে না, সর্বোত্তমভাবে গ্রাহক হারাবে এবং সবচেয়ে খারাপভাবে দেউলিয়া হয়ে যাবে৷

3.3 ACID সংযোগ

এটি অত্যন্ত গুরুত্বপূর্ণ যে ACID বৈশিষ্ট্যগুলি অবিচ্ছেদ্য, তাদের যেকোনও বাদ দিলে বাকি সংমিশ্রণটি অর্থহীন হয়ে যায়। বিশেষ করে, যদি আমরা সামঞ্জস্যতা সম্পত্তি (যে অর্থে এটি উপরের উদ্ধৃতিতে ব্যবহার করা হয়েছিল) বাতিল করি, তাহলে আমরা একটি লেনদেনের সঠিকতার মানদণ্ড হারাবো। ডাটাবেস সিস্টেম কোন অর্থপূর্ণ উপায়ে সিদ্ধান্ত নিতে সক্ষম হবে না যে লেনদেনের অনুমতি দেওয়া হবে কি না, এবং ডাটাবেসের বর্তমান অবস্থায় সঞ্চালিত ক্রিয়াকলাপের সঠিকতার জন্য সমস্ত চেক অ্যাপ্লিকেশন কোডে সম্পাদন করতে হবে।

আপনাকে বুঝতে হবে যে এই ক্ষেত্রে আমরা যৌক্তিক সামঞ্জস্যের কথা বলছি। ব্যাঙ্কের ক্লায়েন্টকে ব্যাঙ্ককে তার দ্বারা প্রতিষ্ঠিত এবং ক্লায়েন্টদের পরিচিত নিয়ম অনুসারে কাজ করতে হবে, যাতে এই নিয়মগুলি লঙ্ঘন করে এমন কোনও লেনদেন করা অসম্ভব হয়, যাতে একই ক্লায়েন্টের পরবর্তী লেনদেনটি সম্পাদিত হয় পরিবেশ এই নিয়ম অনুযায়ী সম্মত.

অনলাইন স্টোরের ক্লায়েন্টের অর্ডার করা এবং তার জন্য অর্থপ্রদান করা পণ্যগুলি তাকে সময়মত বিতরণ করা প্রয়োজন (ক্লায়েন্টের কাছে প্রতিষ্ঠিত এবং পরিচিত নিয়ম অনুসারে)। অন্যথায়, তিনি এই দোকান বিশ্বাস করবে না. একই সময়ে, ব্যাঙ্কের ক্লায়েন্ট বা ইন্টারনেট স্টোরের ক্লায়েন্ট কেউই এন্টারপ্রাইজের অভ্যন্তরীণ রান্নাঘর সম্পর্কে চিন্তা করে না, এর লেনদেন সম্পূর্ণ করতে কী অভ্যন্তরীণ পদক্ষেপ নেওয়া হয়। ক্লায়েন্ট এই এন্টারপ্রাইজের শারীরিক সামঞ্জস্য কিভাবে বজায় রাখা হয়, কিভাবে শারীরিক স্তরে অপারেশন সঞ্চালিত হয় সেদিকে খেয়াল রাখে না।

যদি DBMS লেনদেনের (এবং ডাটাবেস) যৌক্তিক সামঞ্জস্য বজায় রাখার যত্ন নেয়, তাহলে অ্যাপ্লিকেশনগুলি সহজ, আরও বোধগম্য এবং আরও নির্ভরযোগ্য হয়ে ওঠে। লেনদেন এবং ডেটার বৈধ অবস্থা সম্পর্কিত অ্যাপ্লিকেশন এলাকার সমস্ত যুক্তি (ব্যাঙ্ক, স্টোর, গুদাম, ইত্যাদি) ডাটাবেস সিস্টেমে যায়। এবং এই সিস্টেমের প্রয়োজনীয়তাগুলি খুব সহজ: এসিআইডি লেনদেনের জন্য সমর্থন, অ্যাপ্লিকেশন দ্বারা ডেটাবেসে প্রদত্ত সামঞ্জস্যের নিয়মগুলি বিবেচনায় নিয়ে। আমার দৃষ্টিকোণ থেকে, ACID লেনদেন প্রত্যাখ্যান অ্যাপ্লিকেশন ডেভেলপারদের জন্য অত্যধিক অসুবিধা সৃষ্টি করে, যারা, আপনি এটি পছন্দ করুন বা না করুন, তাদের গ্রাহকদের স্বাভাবিক চাহিদা মেটানোর জন্য নিজেকে একই রকম কিছু বাস্তবায়ন করতে হবে।

এবং আবারও আমি লক্ষ্য করি যে ACID বৈশিষ্ট্যগুলি আসলে, একটি লেনদেনের ধারণাকে সংজ্ঞায়িত করে। আমার মতে, লেনদেন সংক্রান্ত ডেটা ম্যানেজমেন্ট সিস্টেম সম্পর্কে কথা বলার অন্তত কিছু সম্ভাবনা থাকার জন্য যেখানে লেনদেনের সামঞ্জস্যের সম্পত্তি সমর্থিত নয়, এই ক্ষেত্রে লেনদেন শব্দটি দ্বারা কী বোঝানো হয়েছে তা সংজ্ঞায়িত করা একেবারেই প্রয়োজন।

দুর্ভাগ্যবশত, আজকে অনেক ক্ষেত্রে (বিশেষ করে, এটি NoSQL দিকনির্দেশের বৈশিষ্ট্য), লোকেরা কোন ধরনের লেনদেন মানে তা নির্দিষ্ট না করেই OLTP অ্যাপ্লিকেশন সমর্থন করার কথা বলে। অতএব, এই নিবন্ধে, আমি বাস্তব লেনদেনগুলিকে বোঝাতে সমন্বয় ACID লেনদেন ব্যবহার করব, এবং অযোগ্য শব্দ লেনদেন একটি অনানুষ্ঠানিক অর্থে ব্যবহার করা হবে, বিভিন্ন প্রসঙ্গে ভিন্ন।

আসুন এখন CAP-এর "তত্ত্ব" নিয়ে কাজ করি এবং ব্রুরের অর্থে সামঞ্জস্যের অর্থ কী তা বের করার চেষ্টা করি।