SQL নাকি NoSQL: পার্থক্য ও কখন কোনটি
SQL data রাখে কাঠামোবদ্ধ table-এ, আর NoSQL রাখে নমনীয় document, key-value বা graph-এ। পার্থক্য, তুলনার টেবিল ও বাছাইয়ের সহজ গাইড এখানে।
ছোট উত্তর: SQL database (PostgreSQL, MySQL) data রাখে নির্দিষ্ট কাঠামোর table-এ, আর বেশিরভাগ app-এর জন্য এটাই নিরাপদ ডিফল্ট। NoSQL database (MongoDB, Redis ও অন্যান্য) data রাখে তুলনামূলক নমনীয় আকারে, আর বাছাই করা হয় বিশেষ প্রয়োজনে, যেমন খুব নমনীয় data, অসাধারণ গতি বা বিশাল scale। বাস্তবে অনেক প্রোডাক্ট দুটোই ব্যবহার করে।
SQL কী?
SQL (relational) database data রাখে table-এ, যেখানে থাকে row আর column, অনেকটা একে অপরের সাথে যুক্ত spreadsheet-এর মতো। আগে কাঠামো ঠিক করতে হয়, যেমন একটি customers table ও একটি orders table, তারপর key দিয়ে দুটিকে যুক্ত করা হয়। প্রশ্ন করতে হয় SQL ভাষায়। পরিচিত উদাহরণ: PostgreSQL, MySQL, SQLite।
SELECT c.name, COUNT(o.id) AS orders
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;NoSQL কী?
“NoSQL” হলো সেই সব database-এর সাধারণ নাম, যারা table মডেল ব্যবহার করে না। চার ধরনের NoSQL বেশি দেখা যায়:
Document store JSON-এর মতো document রাখে। উদাহরণ: MongoDB।
Key-value store একটি key-কে একটি value-র সাথে জুড়ে রাখে, অনেকটা বিশাল dictionary। খুব দ্রুত। উদাহরণ: Redis।
Column store বিপুল পরিমাণ data column ধরে লেখা ও পড়ার জন্য তৈরি। উদাহরণ: Cassandra।
Graph database জিনিস আর তাদের মধ্যকার সংযোগ রাখে। উদাহরণ: Neo4j।
# MongoDB-ধাঁচের একটি document: পুরো order একসাথে থাকে
order = {
"id": 101,
"customer": {"name": "Asha"},
"items": [{"sku": "A1", "qty": 2}, {"sku": "B7", "qty": 1}],
}মূল পার্থক্যগুলো
বিষয় | SQL | NoSQL |
|---|---|---|
Data-র আকার | Table, row, column | Document, key-value, column বা graph |
Schema | আগে ঠিক করা, বাধ্যতামূলক | নমনীয়, প্রায়ই ঐচ্ছিক |
সম্পর্ক | Table-এর মধ্যে join | সাধারণত nested data বা হাতে করা লিংক (graph database ছাড়া) |
Scaling | প্রচলিত পথ হলো আরও শক্তিশালী একটি server, পড়ার জন্য replica | প্রায়ই অনেক server-এ ছড়িয়ে দেওয়ার মতো করে বানানো |
Consistency | শক্তিশালী transaction স্বাভাবিক | প্রোডাক্টভেদে আলাদা; কেউ কেউ কড়াকড়ির বদলে গতি বেছে নেয় |
Query ভাষা | SQL, একটি সর্বজনীন স্ট্যান্ডার্ড | প্রতিটি প্রোডাক্টের নিজস্ব |
Transaction ও consistency সহজ ভাষায়
Transaction মানে একগুচ্ছ ধাপ, যার হয় সবগুলো সম্পন্ন হবে, নয়তো একটিও নয়। দুই account-এর মধ্যে টাকা পাঠানোর সময় আপনি চান না একটি ধাপ সফল হোক আর অন্যটি ব্যর্থ। SQL database এই নিশ্চয়তার জন্য পরিচিত (একে প্রায়ই ACID বলা হয়)।
কিছু NoSQL system এই কড়াকড়ি শিথিল করে, যাতে data অনেক মেশিনে ছড়িয়ে দিয়ে দ্রুত উত্তর দেওয়া যায়। ফল হতে পারে “eventually consistent”: অল্প সময়ের জন্য দুটি server-এ সামান্য আলাদা data দেখা যেতে পারে। like counter-এ এটা চলে, কিন্তু ব্যাংক ব্যালান্সে নয়। আধুনিক NoSQL প্রোডাক্টগুলো একে অপরের থেকে অনেক আলাদা, তাই যেটি বাছবেন তার documentation পড়ে নিন।
কীভাবে বাছবেন
সম্পর্কযুক্ত, কাঠামোবদ্ধ data (user, order, payment, report): SQL ব্যবহার করুন।
টাকা, inventory বা যা নিখুঁত থাকতেই হবে: SQL ব্যবহার করুন।
যে data-র আকার প্রায়ই বদলায় বা JSON হিসেবে আসে: document store ভাবতে পারেন।
Caching, session, counter, দ্রুত খোঁজ: Redis-এর মতো key-value store।
অত্যন্ত সংযুক্ত data (সোশ্যাল সংযোগ, recommendation): graph database ভাবতে পারেন।
নিশ্চিত না হলে? PostgreSQL দিয়ে শুরু করুন। এতে JSON-এর সাপোর্টও আছে, তাই এটি আপনার ধারণার চেয়ে বেশি কাজ সামলাতে পারে।
অনেক app দুটোই ব্যবহার করে
একটি প্রচলিত সাজানো: মূল record থাকে PostgreSQL-এ, জনপ্রিয় ফলাফল cache হয় Redis-এ, আর search বা AI ফিচারের জন্য থাকে বিশেষ কোনো store। আমাদের vector database পোস্টে AI app-এ ব্যবহৃত এমন একটি বিশেষ store দেখানো হয়েছে। একটি বেছে নিলে অন্যটি ব্যবহারের পথ বন্ধ হয়ে যায় না।
সাধারণ ভুল
NoSQL আধুনিক শোনায় বলে বেছে নেওয়া। বেশিরভাগ app মূলত relational।
“Scale”-এর কথা ভেবে অকালে NoSQL নেওয়া। ভালোভাবে চালানো একটি SQL database অনেক দূর যায়।
“schema নেই” মানে ডিজাইন নেই ভাবা। আপনার কোড তবু একটি কাঠামো আশা করে; শুধু schema সরে যায় application-এর ভেতরে।
Interview tip: “কোনটা ভালো?” প্রশ্নের সরাসরি উত্তর দেবেন না। বলুন “data আর কীভাবে ব্যবহার হবে তার উপর নির্ভর করে”, তারপর প্রতিটির একটি করে উদাহরণ দিন।
মূল কথা
কাঠামোবদ্ধ, সম্পর্কযুক্ত ও নির্ভুল থাকতে হবে এমন data-র জন্য ডিফল্ট হিসেবে SQL নিন। নির্দিষ্ট কোনো প্রয়োজন NoSQL ভালোভাবে মেটালে তখনই সেটি নিন, আর দুটো মিলিয়ে ব্যবহারের জন্য তৈরি থাকুন।
Table, key ও relationship কীভাবে কাজ করে জানতে পড়ুন চ্যাপ্টার টেবিল, কি আর রিলেশনশিপ।
শুরু করতে চান? বাস্তব database-এ practice query সহ SQL ও data handling একদম শুরু থেকে শিখুন। শুরু করুন ফ্রি কোর্স AI-এর জন্য SQL ও ডেটা হ্যান্ডলিং: বিগিনার দিয়ে।
সম্পর্কিত লেখা
SQL ও ডেটা বিভাগের আরও লেখা
মন্তব্য
আলোচনায় যোগ দিতে সাইন ইন করুন।