আমরা প্রত্যেকেই কম বেশি বিভিন্ন প্রয়োজনে সফটওয়্যার, ওয়েবসাইট এবং ওয়েব অ্যাপ ব্যবহার করে থাকি। এসকল সফটওয়্যার, ওয়েবসাইট এবং ওয়েব অ্যাপের কাজ ভিন্ন হলেও প্রত্যেকেই বিভিন্ন ধরনের ডেটা স্টোর করে এবং সেগুলো তাদের কাস্টমারদের প্রভাইড করে থাকে।
আপনি এখন প্রযুক্তির অভিযাত্রি’র যে ওয়েবসাইট টিতে আছেন এখানে অনেক কনটেন্ট ও ডেটা রয়েছে (যেমন আর্টিকেল)। এগুলো আপডেট, মেইনটেনেন্স এবং আপনাদের সামনে তুলে ধরার জন্য আমাদের নিজস্ব সার্ভারে সব ডেটা স্টোর করে রাখতে হয়েছে। এই ফুল প্রসেসটাই হলো ডেটাবেজ ম্যানেজমেন্ট সিস্টেমের কাজ।
ডেটাবেজ ম্যানেজমেন্ট সিস্টেম কি?
তাই একুরেটলি ডেটা স্টোর বা রেকর্ড রাখা, আপডেট করা, দক্ষতার সাথে ডেটা নিয়মিত আপডেট করা এবং কুয়েরির মাধ্যমে সেগুলো ইউজারের সামনে উপস্থাপন করা অত্যন্ত জটিল একটি কাজ। আর পুরো কার্যক্রমই পরিচালিত হয় বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজের মাধ্যমে। ব্যাক-এন্ড ডেভেলপমেন্টের প্রধান কাজ গুলোর মধ্যে একটি হলো সার্ভার বা ডেটাবেজ ম্যানেজমেন্ট করা।
মডার্ন ডেটাবেজ ম্যানেজমেন্ট সিস্টেম যে সকল প্রোগ্রামিং ল্যাঙ্গুয়েজের ওপর নির্ভরশীল তাদের স্ট্রাকচার্ড কুয়েরি ল্যাঙ্গুয়েজ বা এসকিউএল (SQL) বলা হয়। এসকল ল্যাঙ্গুয়েজ একটি সিস্টেমের ডেটা এক্সেস, আপডেট এবং ডিলিট করতে ব্যবহৃত হয়।
ডেটাবেজ ম্যানেজমেন্ট সিস্টেম সব সময়ই ডেটাকে স্বাধীনভাবে পরিচালনা করার সুযোগ দেয়। ডেটাবেজ ম্যানেজমেন্ট সিস্টেমের সুবিধা হলো এর মাধ্যমে অ্যাপ্লিকেশনের ইন্টারনাল কোনো মডিফাই ছাড়াই স্টোরেজ মেকানিজমের পরিবর্তন, পরিমার্জন ও পরিবর্ধন করা যায়। ডেটাবেজ অর্গানাইজেশনের জন্য প্রধান চারটি পদ্ধতি রয়েছে। যেমন:
- রিলেশনাল ডেটাবেজ
- ফ্ল্যাট ডেটাবেজ
- অবজেক্ট-অরিয়েন্টেড ডেটাবেজ
- হায়ারারকিক্যাল ডেটাবেজ
এদের ডেটা স্ট্রাকচার এবং স্টোরেজ পদ্ধতি ভিন্ন ভিন্ন ধরণের হয়ে থাকে। ওয়েবসাইট এবং সফটওয়্যার ডেভেলপমেন্টে ডেটাবেজ ম্যানেজমেন্ট সিস্টেমের গুরুত্ব অনেক। তাই আজকে আমাদের আলোচনা দুটি পাওয়ারফুল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম MySQL এবং MongoDB নিয়ে।
যারা ডেটাবেজ ম্যানেজমেন্ট সিস্টেমকে অনেক বেশি রিলেবল এবং সিকিউর করেছে। এদের স্ট্রাকচার্ড কুয়েরি ল্যাঙ্গুয়েজ, ডেটাবেজ ম্যানেজমেন্ট সিস্টেমকে হাই সিকিউর এবং সিস্টেম প্রসেসকে অনেক দ্রুততর করেছে। আসুন জেনে নেয়া যাক MySQL এবং MongoDB কি? এবং এদের মধ্যে কি কি পার্থক্য বিদ্যমান।
MySQL কি?
MySQL একটি জনপ্রিয় ওপেন-সোর্স রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম (RDBMS) যা ওরাকল কর্পোরেশন (Oracle Corporation) দ্বারা ডেভেলপ, ডিসট্রিবিউশন এবং ইউজার সাপোর্ট দিয়ে থাকে। এটি রিলেশনাল ডেটাবেজে মডেল অনুযায়ী কাজ করে। টেবিলের মধ্যে থাকা ফাইল পরিচালনার জন্য ইউজারের রিকোয়ারমেন্ট অনুযায়ী স্কীমা প্রি-ডিফাইন করে রুলস সেট-আপ করে নিতে হয়।
MySQL এর ফিচার সমূহ:
এখানে MySQL এর অনেক ফিচারের মধ্যে গুরুত্বপূর্ণ কিছু ফিচার নিয়ে আলোচনা করা হলো:
- MySQL একটি কমিউনিটি পরিচালিত ডেটাবেজ ম্যানেজমেন্ট সিস্টেম
- অনেক ধরনের প্ল্যাটফর্ম এবং মেজর প্রোগ্রামিং ল্যাঙ্গুয়েজ ও মিডলওয়্যারের (Middleware) সাথে একযোগে কাজ করা যায়।
- এটি মাল্টি-ভার্সন কনকারেন্সি কন্ট্রোল সাপোর্ট করে।
- এএনএসআই (ANSI) এসকিউএল (SQL) স্ট্যান্ডার্ড মেনে কাজ করে।
- এটিতে লগ-বেসড (Log-based) এবং ট্রিগার-বেসড (trigger-based) রেপ্লিকেশন সাপোর্ট করে।
- এটি একটি অবজেক্ট-অরিয়েন্টেড ডেটাবেজ।
- মাল্টি-লেয়ার ডিজাইন এবং স্বাধীন মডিউল রয়েছে।
- কার্নেল এবং মাল্টি-থ্রেড ইউজ করা যায়।
- এমবেডেড ডেটাবেজে ক্লায়েন্ট-সার্ভার মডেলে অ্যাপ্লিকেশন ও সফটওয়্যার সার্ভার রাখা হয়।
- যে কোনো এমাউন্টের ডেটা (৫০ মিলিওনের বেশি রো) এটি হ্যান্ডেল করতে পারে।
- MySQL ইউনিক্স (UNIX) এবং লিনাক্সে (Linux) রান করে।
MongoDB কি?
MongoDB একটি ওপেন-সোর্স ডকুমেন্ট অরিয়েন্টেড নোএসকিউএল (NoSQL) ডেটাবেজ এবং এটি ডেভেলপ করেছে MongoDB ইনকর্পোরেশন। এটি একটি ডাইনামিক স্কিমা ডেটাবেজ, তারমানে আপনাকে ডেটা রেকর্ড তৈরী করার জন্য পূর্বে কোনো স্ট্রাকচার ডিফাইন করে নিতে হয় না।
MongoDB এর ফিচার সমূহ:
এখানে MongoDB এর গুরুত্বপূর্ণ কিছু ফিচার নিয়ে আলোচনা করা হলো:
- প্রতিটি ডাটাবেজে আলাদা ডেটা স্টোর করা যায়, এগুলো ডকুমেন্টের মধ্যে স্টোর থাকে।
- প্রত্যেকটি ডকুমেন্টের আলাদা আলাদা ফাইল হতে পারে এবং ফাইল গুলোর সাইজ ও কন্টেন্ট একে অন্যের থেকে ভিন্ন হতে পারে।
- MongoDB তে ডকুমেন্টের স্ট্রাকচার ডেভেলপ করা হয় ডেটাবেজে ইউজ করা প্রোগ্রামিং ল্যাঙ্গুয়েজের ক্লাস এবং অব্জেক্টের ওপর ভিত্তি করে।
- রো এর জন্য স্কিমা ডিফাইন করে নেয়ার প্রয়োজন পরে না।
- যে কোনো ফাইল ইন্সট্যান্টলি ক্রিয়েট করা যায়।
- এ্যারে (array) স্টোর করার জন্য MongoDB তে হায়ারারকিক্যাল রিলেশনশিপ রয়েছে।
- যে কোনো কমপ্লেক্স ডেটা স্ট্রাকচার খুব সহজেই তৈরী করা যায়।
MySQL এবং MongoDB এদের মধ্যে প্রধান যে পার্থক্য গুলো পরিলক্ষিত হয়:
বিষয় বস্তু | MySQL | MongoDB |
ডেটাবেজ টাইপ | রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেম (RDBMS)। | ডকুমেন্ট অরিয়েন্টেড নোএসকিউএল (NoSQL) ডেটাবেজ। |
ডেটা স্টোর | MySQL এ ইনডিভিজুয়াল ডেটা একটি টেবিলে রো (row) হিসেবে স্টোর করা হয়। | MongoDB তে “Documents” হিসেবে ইনডিভিজুয়াল ডেটা স্টোর করা যায়। |
হায়ারারকিক্যাল ডেটা রেকর্ড | টেবিলে ব্যবহার করা হয় সিমিলার টাইপের রো (row) স্টোর করতে। | ডকুমেন্ট গুলো পার্টিশন করে স্টোর করা যায় বিশেষ ক্লাস বা গ্রুপের মধ্যে কালেকশন “collection” ফাইলে। |
SQL অথবা NoSQL | MySQL একটি স্ট্রাকচার্ড কুয়েরি ল্যাঙ্গুয়েজ (SQL) ডেটাবেজ। এর স্কীমা পরিবর্ত করা যায় না। | MongoDB একটি NoSQL ডেটাবেজ। নতুন ডেটা স্টোরের ক্ষেত্রে ডেটা স্ট্রাকচার প্রি-ডিফাইন করে নিতে হয় এবং ডিফারেন্ট টাইপের স্ট্রাকচার ডিফারেন্ট ডকুমেন্টে কালেকশন করে থাকে। |
অটো-শেয়ারিং | MySQL এ ডেটা যে কোনো টেবিলে যে কোনো সময় শেয়ার করার এক্সেস দেয় না। | MongoDB ডেটা অটো-শেয়ার করা যায় যে কোনো স্ট্রাকচারড স্কিমার সাথে। |
ডেটা প্রেজেন্টেশন | MySQL টেবিল এবং রো এর মাধ্যমে ডেটা রিপ্রেজেন্ট করে। | MongoDB ডেটা জেসন (JSON) ডকুমেন্ট হিসেবে রিপ্রেজেন্ট করে। |
স্কীমা | MySQL এ কোনো কিছু এড করে চাইলে প্রথমেই টেবিল এবং রো ডিফাইন করে নিতে হবে এবং একটি টেবিলের প্রত্যেকটি রো তে সেম কলাম থাকতে হবে। | MongoDB তে স্কীমা ডিফাইন করার প্রয়োজন পরে না। |
ইন্ডেক্স ডিফাইন | যদি কোনো ইন্ডেক্স ডিফাইন না করা থাকে, তাহলে ডেটাবেজ ইন্জিন রিলিভেন্ট সব রো স্ক্যান করে। | ডেটাবেজে যদি কোনো ইন্ডেক্স খুঁজে না পাওয়া যায়, তাহলে কুয়েরি স্ক্যান এবং ডকুমেন্ট সিলেক্ট করে ডেটা বের করা হয়। |
ডেটা সিকিউরিটি | ডেটা সিকিউরিটির জন্য MySQL সবচেয়ে ভালো অপশন। | ক্লাউড বেস সার্ভিসের জন্য MongoDB সবচেয়ে ভালো অপশন। |
জয়েন (JOIN) অপারেশন | এটি জয়েন (JOIN) অপারেশন সাপোর্ট করে। | এটি জয়েন (JOIN) অপারেশন সাপোর্ট করে না। |
ডেটা হ্যান্ডেল | এটি লার্জ এমাউন্টের ডেটা হ্যান্ডেল করতে সময় অনেক বেশি নেয়। | এটি খুব দ্রুত লার্জ এমাউন্টের ডেটা হ্যান্ডেল করতে পারে। |
MySQL এবং MongoDB ইউজ করেছে এমন কয়েকটি অর্গানাইজেশন: | প্রিন্টারেস্ট (Pinterest), ইউটিউব (YouTube), নেটফ্লিক্স (Netflix), স্পটিফাই (Spotify), ইউএস নেভী (US Navy), নাসা (NASA), ওয়ালমার্ট (Walmart), এবং পেপাল (Paypal) সহ আরো অনেকে। | ক্লাউট (Klout), সিট্রিক্স (Citrix), টুইটার (Twitter), টি-মোবাইল (T-Mobile), জেনডেক্স (Zendesk), সনি (Sony), হটস্যুট (Hootsuite), সার্ভেমানকি (SurveyMonkey), ফোরস্কয়ার (Foursquare), এবং ইনভিশন (InVision) সহ আরো অনেকে। |
কুয়েরির মধ্যে পার্থক্য গুলো নিম্নরুপ:
MySQL এবং MongoDB ডেটাবেজ দুটির কুয়েরি কমান্ডের মধ্যে ব্যাপক পার্থক্য দেখা যায়।
কান্টমার টেবিল থেকে রেকর্ড সিলেক্ট করা:
MySQL দিয়ে টেবিল সিলেক্ট করা হয় যেভাবে,
Select*
FROM customer`
MongoDB দিয়ে টেবিল সিলেক্ট করা হয় যেভাবে,
db.customer.find()
কান্টমার টেবিলে ডেটা ইনসার্ট করা:
MySQL দিয়ে টেবিলে ডেটা ইনসার্ট কমান্ড,
INSERT INTO customer (cust_id, branch, status)
VALUES ('appl01', 'main', 'A')
MongoDB দিয়ে টেবিলে ডেটা ইনসার্ট যেভাবে করে,
db.customer.insert({
cust_id: 'appl01',
branch: 'main',
status: 'A'
})
কান্টমার টেবিলে ডেটা আপডেট করা:
MySQL দিয়ে টেবিলে ডেটা আপডেটের কমান্ড,
UPDATE customer
SET branch = 'main'
WHERE custage > 2
MongoDB দিয়ে টেবিলে ডেটা আপডেট করে যেভাবে,
db.customer.update({
custage: { $gt: 2 }
},
{
$set: { branch:'main' }
},
{
multi: true
})
কান্টমার টেবিলে ডেটা ডিলিট করা:
MySQL ডেটা ডিলিট করার কুয়েরি কমান্ড,
DELETE FROM table_name
ORDER BY c1, c2, ...
LIMIT row_count;
MongoDB ডেটা ডিলিট করে যেভাবে,
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
কোন ডেটাবেজটি আপনার পরবর্তী প্রজেক্টের জন্য বেছে নিবেন?
পরবর্তী যেকোনো প্রজেক্টের জন্য যখন এদের দুটি থেকে যেকোনো একটি বেছে নিতে হয় তাহলে অনেকগুলো বিষয় মাথায় রেখেই নির্বাচন করতে হবে।
বিষয় বস্তু | MySQL | MongoDB |
ইউজ কেস | অ্যাপ্লিকেশন গুলো মাল্টি-রো ডেটা ট্রান্সজেকশন করে। তাই ডেটাবেজ বড় হলে অনেকক্ষেত্রে বেশী সময়ের প্রয়োজন পড়ে। | এটি রিয়েল টাইম ডেটা এনালাইসিস করে, কন্টেন্ট ম্যানেজমেন্ট এবং মোবাইল অ্যাপে ইউজ করা যায়। |
ডেটা স্ট্রাকচার | ক্লিয়ার স্কীমায় ডেটা স্ট্রাকচার করা এবং স্টোর করা যায়। | ডেটা স্ট্রাকচারের জন্য কোনো স্কীমার প্রয়োজন নেই। |
রিস্ক এনালাইসিস | সিকিউরিটি রিস্ক হিসেবে SQL ইঞ্জেকশন এ্যাটাকের রিস্ক থাকে। তাছাড়া আপনার যদি স্ট্রাকচার্ড ডেটা থাকে এবং ট্রেডিশনাল রিলেশনাল ডেটাবেজ তৈরী করতে চান তাহলে MySQL ডেটাবেজ ব্যবহার করতে পারেন। | আপনি যদি আনস্ট্রাকচার্ড এবং পটেনশিয়াল ডেটাবেজ তৈরী করতে চান তাহলে MongoDB ডেটাবেজ ব্যবহার করতে পারেন। |
এদের মধ্যে থাকা কিছু সীমাবদ্ধতা: MySQL বনাম MongoDB
উপরে বর্নিত প্রকাশনায় অনেক এডভান্টেজ এবং ওয়ার্কিং প্রসিডিউর বর্ননা করা হয়েছে। এতো সব সুবিধার মধ্যে কিছু অসুবিধাও পরিলক্ষিত হয় উক্ত ডেটাবেজ দুটিতেই। প্রত্যেকটা বিষয়েরই কিছু না কিছু সীমাবদ্ধতা থাকে, কেউই শতভাগ সঠিক কাজ করতে সক্ষম হতে পারে না। ঠিক তেমনি MySQL ও MongoDB এর মধ্যে থাকা সীমাবদ্ধতা গুলো নিম্নরুপ:
MySQL এর কিছু সীমাবদ্ধতা:
MySQL ব্যবহারে কিছু ত্রুটি রয়েছে, যেমন:
- এটিতে বিশাল বড় ডেটাবেজ এবং ডেটা স্টোর করতে অসুবিধা করে।
- এটি রোল (ROLE) এবং কমিট (COMMIT) সাপোর্ট করে না।
- ডেটা ট্রান্সজেকশন উন্নত ও দ্রুত হয় না।
- ক্ষেত্রবিশেষে এর পার্ফরমেন্স খারাপ হয়ে থাকে।
- অনেকসময় বেশী রিসোর্স ব্যবহার করতে না পারলে সিস্টেম ক্র্যাশের কারণ হয়ে থাকে।
MongoDB এর সীমাবদ্ধতা সমূহ:
MongoDB ব্যবহারে কিছু ত্রুটি রয়েছে, যেমন:
- সব ধরনের অ্যাপ্লিকেশনে ট্রান্সজেকশন না লাগলেও কিছু কিছু অ্যাপ্লিকেশনে ট্রান্সজেকশন প্রয়োজন পরে, কিন্তু MongoDB তে ডেটা ট্রান্জেকশন অনেক বেশি জটিল।
- MongoDB তে কোনো ট্রিগার থাকে না।
- অন্য সব ডেটাবেজের তুলনায় এর মেমোরি স্টোরেজ অনেক বেশি।
- এটি অটোম্যাটিকেলি ডিস্ক স্পেস ক্লিন করতে পারে না।
- ডেটা ইন্ডেক্সিং এ যদি কোনো ভুল বা ইম্পিমেন্টে সমস্যা হয় তবে এটি অনেক স্লো হয়ে যায়।
- এটি ওয়েল-ডিফাইন রিলেশনশিপ সাপোর্ট করে না তাই ডুপ্লিকেট ডেটা আপডেট করা অনেক ঝামেলা। এবং এতে ডেটা করাপ্ট বা বিনষ্ট হতে পারে।
MySQL ও MongoDB দুটি ডেটাবেজই স্বতন্ত্র ভাবে কাজ করে এবং এদের সুবিধা ও অসুবিধা রয়েছে। আপনার ডেটায় যদি মাল্টি-রো ট্রান্সজেকশনের প্রয়োজন হয় এবং লেগেসি (Legacy) অ্যাপ্লিকেশন সাপোর্ট করে, তাহলে আপনার অর্গানাইজেশনের জন্য রিলেশনাল ডেটাবেজ সিস্টেম পার্ফেক্ট হবে।
অন্যথায়, আপনার যদি অধিক ফ্ল্যাক্সিবল ও স্কিমা বিহীন আনস্ট্রাকচার্ড ডেটা স্টোর করতে চান, তাহলে ডকুমেন্ট অরিয়েন্টেড নোএসকিউএল (NoSQL) ডেটাবেজ আপনার অর্গানাইজেশনের জন্য পার্ফেক্ট হবে।
আশা করি আমাদের প্রকাশনার এই পর্যন্ত এসে আপনি MySQL ও MongoDB এই দুটি ডেটাবেজ সম্পর্কে খুব ভালো ধারনা পেয়ে গেছেন । এদের সুবিধা, অসুবিধা এবং কিভাবে কোনটি ব্যবহার করতে হয় তার পুরো বিস্তারিত সর্বোচ্চ ধারনা দেওয়ার চেষ্টা করেছি।
যদি আপনার আরো কিছু জানার ইচ্ছে থেকে থাকে বা আপনার মনে কেনো প্রশ্ন থাকে বা আমাদের বাদ পরে যাওয়া কোনো বিষয় যুক্ত করতে চান তাকলে নির্বিঘ্নে আমাদের কমেন্টে জানাতে ভুলবেন না।