ACID in DBMS
ACID
ACID যার মানে হলো , Atomicity, Consistency, Isolation, Durability.
এই চারটা কনসেপ্ট হলো রিলেশনাল ডাটাবেজের সবচেয়ে গুরুত্বপূর্ণ প্রোপার্টি। যেকোন ইঞ্জিনিয়ারেরই এই চারটা জিনিস জানা উচিত। আপনি Postgres, MySQL, SQL Server, Oracle অথবা NoSQL বা Graph Database যেটা নিয়েই কাজ করেন না কেন এটা দরকার হবেই। এই আর্টিকেল সিরিজে এসব নিয়ে বিস্তারিত আলাপ করব।
এই বিষয়গুলো নিয়ে আলাপ করার আগে, একদম গোড়াতে যেই বিষয় নিয়ে আলাপ করতে হবে সেটা হলো Transaction. ডাটাবেস Transaction একদম ভালো মতো জানতে হবে। যেই মুহুর্তে আমরা এটা ভালো মত বুঝতে পারব, আমরা লাফ দিব প্রথম প্রোপার্টিতেঃ Atomicity.
Atomicity আসলে কি জিনিস? কি বুঝায় আসলে এটা দিয়ে? আর Consistencyর গ্যারান্টি দেয়ার জন্য এটা কেন এতো দরকার?
Consistencyর আলাপ যেহেতু চলেই আসলো, তাহলে আমাদের আগে জানতে হবে Transaction Isolation নিয়ে।
আমরা যদি একই সময়ে অনেক গুলো Transaction করতে চাই(Concurrently), সবাই আমার ডাটা অ্যাক্সেস করতে চাচ্ছে, সবাই একই সময়ে ডাটা চেঞ্জ করছে। প্রতিটা Transaction একে অপরের থেকে Isolated. এর মানে কি আসলে? Transaction গুলো আসলে কি দেখতে পায়? কি দেখতে পায় না? কি দেখতে পাওয়া উচিত না? এই সব কিছুর ফলাফল আসলে পাওয়া যাবে Consistency তে গিয়ে।
Atomicity, Isolation শেখার পর আসলে Consistency শেখা উচিত। এই দুইটা আগে না শিখলে বোঝা কঠিন হয়ে যাবে যে কিভাবে আপনার করা একটা Transaction আমার লেখা একটা কোন কিছুকে যদি পালটে ফেলে তাহলে Unexpected Result পাওয়া যাবে , যেটা Consistencyর উপর প্রভাব ফেলবে। এমন কোন ডাটা পাবেন, যেটা আপনি একদমই চাননি। অদ্ভুত আচরণ হয়ে যাবে।
সব শেষে আসবে Durability . সবচেয়ে গুরুত্বপূর্ণ বিষয়। যেটা অবশ্য NoSQL ডাটাবেস কিছুটা স্যাক্রিফাইস করে থাকে। বেসিক্যালি পার্ফমেন্সের জন্য। Trade-off বলতে পারেন। এটায় কোন দোষ নেই কিন্তু। Durability বলতে আসলে বোঝায় যে যখন আমি একটা Transaction comit করলাম, এবং যখন আমি save করলাম, তখন যাতে এটা এমন কোন জায়গায় থাকে যেটা নন-ভোলাটাইল অর্থ্যাৎ নষ্ট হবে না এমন। এমনকি যদি আমার ডাটাবেস ক্র্যাশ করে, আমার পাওয়ার অফ হয়ে যায় তাও যাতে ডাটা অ্যাক্সেস করা যায়।
আমরা এগুলো নিয়ে সামনে বিস্তারিত আলাপ করব।
চলেন পরের আর্টিকেলে যাওয়া যাক।