স্টোরেজ ইন্জিন : যখন আমরা একটি টেবিল তৈরী করি তখন টেবিল থেকে ডেটাতে কোন অপারেশন (যেমন এডিট,ডিলিট) করার জন্য কিছু নিয়ম আছে।এসব নিয়ম বা টেকনিকের উপর ভিত্তি করে স্টোরেজ ইন্জিন তৈরী করা হয়েছে।প্রতিটি টেবিল তৈরী করার সময় আমরা সেই টেবিলের জন্য একটা স্টোরেজ ইন্জিন ঠিক করে দিতে পারি।এতে করে ঐ টেবিলটি কি ধরনের তা বোঝা যাবে এবং ঐ স্টোরেজ ইন্জিনের যেসব নিয়ম আছে সেগুলি ব্যবহার করেই সেই টেবিলে ডেটা ঢুকানো,মোছা ইত্যাদি করা যাবে।
একদম সহজভাবে বলি ধরুন ১৩ ধরনের স্টোরেজ ইন্জিন আছে এর মধ্যে একটা হল “ARCHIVE”, আরেকটার নাম “MyISAM” এভাবে আরো আছে।যদি কোন টেবিলের স্টোরেজ ইন্জিন “ARCHIVE” ঠিক করে দেন তাহলে এই টেবিলে ইনিডেক্সিং করতে পারবেননা এবং INSERT, SELECT করতে পারবেন।ব্যাংক,লাইব্রেরী ইত্যাদির ডেটাবেসে এই ধরনের টেবিল ব্যবহার করে।
** স্টোরেজ ইন্জিনকে ডেটাবেস ইন্জিনও বলা হয়।
যেভাবে টেবিল তৈরীর সময় স্টোরেজ ইন্জিন ঠিক করবেন :
phpmyadmin দিয়ে:
ডেটাবেস নির্বাচন করে যেকোন টেবিলের উপর ক্লিক করে ডানদিকে উপরে “Opeartions” ট্যাবে ক্লিক করুন এতে যে পেজ আসবে সেখানে নিচের মত দেখতে পাবেন।
“Storage Engine” ড্রপডাউন থেকে ইচ্ছেমত ইন্জিন নির্বাচন করে দিতে পারেন। যেমন আমি “InnoDB” সিলেক্ট করেছি।
** এই পদ্ধতি হচ্ছে পূর্বে তৈরী কৃত টেবিলের স্টোরেজ ইন্জিন পরিবর্তনের জন্য। নতুন টেবিল তৈরীর সময় এরুপ স্টোরেজ ইন্জিন নির্বাচন করার অপশন আসে।
** উপরের ছবিতে আসা পেজ থেকে তৈরীকৃত টেবিলের উপর আরও অন্যান্য কাজ করা যায় যেমন টেবিলের নাম পরিবর্তন ইত্যাদি।
SQL দিয়ে
================
যেকোন টেবিল তৈরীর সময় স্টোরেজ ইন্জিন ঠিক করা যায় এভাবে –
01.
CREATE
TABLE
`users` (
02.
`user_id`
INT
(11)
NOT
NULL
AUTO_INCREMENT,
03.
`username`
VARCHAR
(100)
NOT
NULL
,
04.
`user_mail`
VARCHAR
(200)
NOT
NULL
,
05.
`join_date`
DATE
NOT
NULL
,
06.
`salary`
VARCHAR
(100)
NOT
NULL
,
07.
`age`
INT
(11)
NOT
NULL
,
08.
PRIMARY
KEY
(`user_id`)
09.
)
10.
COLLATE
=
'latin1_swedish_ci'
11.
ENGINE=InnoDB
12.
AUTO_INCREMENT=8;
নিচের বহুল ব্যবহৃত কিছু স্টোরেজ/ডেটাবেস ইন্জিনের বর্ননা, সুবিধা এবং কখন ব্যবহার করবেন তা আলোচনা করা হল
MyISAM
========
মাইসিক্যুয়েলে বাই ডিফল্ট এই ইন্জিনটি নির্বাচিত থাকে। এটি একটি non transactional ইন্জিন অর্থ্যাৎ এটি শুধু non transactional টেবিল ম্যানেজ করতে পারে। তবে এর সুবিধা অনেক দিয়ে বেশি যেমন খুব দ্রুত কাজ হয়, ফুল টেক্সট সার্চিং সমর্থন করে ইত্যাদি।
আর অসুবিধার মধ্যে আছে – ডেটাবেস ক্রাস করলে রিকভারি করা খুব কঠিন হয়ে যায়। এছাড়া এই ইন্জিনে টেবিলগুলির “সম্পর্কে বলপ্রয়োগ” করা যায়না। টেকনিকাল শব্দটি হবে “foreign key constraints” সমর্থন করেনা।
[বিশেষ টিপ্পনী]
** সব স্টোরেজ ইন্জিনগুলিকে মুলত দুটি বিভাগে ভাগ করা হয়েছে 1. Transaction , 2. Non-transaction
Transactional ইন্জিনগুলি ব্যবহার করা হয় ইকমার্স এপ্লিকেশনে কারন এগুলি অনেক নিরাপদ এবং ডেটাবেস বা সিস্টেমে কোন সমস্যা হলে রিকভারি করা যায়। আর non-transactional গুলি যদিও অনেক দ্রত কাজ করে এগুলি দিয়ে তৈরী করা টেবিলগুলি আপডেট হয়ে গেলে সেটা স্থায়ী হয়ে যায় আর পূর্বাবস্থা ফিরিয়ে আনা যায়না।
** transaction ইন্জিনগুলি দিয়ে বানানো টেবিলগুলিকে transaction-safe টেবিল বলুন আর non-transaction ইন্জিনগুলি দিয়ে বানানো টেবিলকে non-transaction-safe টেবিল বলুন।
InnoDB
ইন্নোডিবি হচ্ছে transaction-safe ইন্জিন, এটি খুব ব্যবহৃত হয়।এটা “foreign key constraints” সমর্থন করে।ডেটাবেস ক্রাস করলে এটা অটোমেটিক রিকভার করে। একটু ধীরগতির হলেও উল্লেখিত সুবিধার কারনে এই ইন্জিন বেশি ব্যবহৃত হয়। “foreign key constraints” এটা ব্যবহার করলে কি লাভ এবং কিভাবে করতে হয় তা পরের টিউটোরিয়ালে আসছে।
** ইন্নোডিবি একসাথে প্রচুর আপডেট রিকোয়েস্ট হ্যান্ডল করতে পারে।
Memory
এটাও অনেক দ্রুত কাজ করে এই ইন্জিন ডেটা হার্ডডিস্কে সেভ করেনা বরং RAM এ সেভ করে ফলে ডেটাবেস রিস্টার্ট করার সাথে সাথে সব হারিয়ে যায়।এটা transaction সমর্থন করেনা।
Archive
অনেক বেশি ডেটা রাখতে পারে।একসাথে অনেক ডেটা ইনসার্ট করা যায়।ট্রানজেকশন সমর্থন করেনা।লাইব্রেরী ইত্যাদির জন্য এই ইন্জিন ব্যবহার করা যেতে পারে।
Merge
একই ধরনের একাধিক MyISAM টেবিলকে একত্র করে এই ইন্জিন।একসাথে করে একটা টেবিলের মত তাদের উপর কাজ করা যায়।
CSV
এই ইন্জিন টেবিলে ডেটা “comma separated” ফরমেটে সেভ করে ফলে এটা অন্যান্য এপ্লিকেশন সাপোর্ট করে যেমন মাইক্রোসফট অফিস। এই ইন্জিন ইনডেক্সিং সমর্থন করেনা।MyISAM ইত্যাদি ইন্জিন দিয়ে তৈরী টেবিল যেমন PHPMyAdmin দিয়ে ম্যানেজ করতে পারেন CSV টেবিলও সেভাবে ম্যানিপুলেট করতে পারবেন তবে আসলে এটা টেবিল ডেটাগুলি টেক্সট ফরমেটে রাখে।
** একটা ডেটাবেস ডিজাইন করার সময় যদি ১০টা টেবিল বানান তাহলে ইচ্ছে মত প্রতিটি টেবিলের জন্য আলাদা আলাদা স্টোরেজ ইন্জিন ব্যবহার করতে পারেন।এটা ঠিক করবেন কোন টেবিলে কোন ধরনের অপারেশন করবেন সেটার উপর ভিত্তি করে।