Database Tutorials MySQL NoSQL সাপোর্ট গাইড ও নোট

217

MySQL একটি relational database management system (RDBMS) যা structured data সংরক্ষণের জন্য ব্যবহার হয়। MySQL মূলত SQL (Structured Query Language) ব্যবহার করে ডেটাবেস পরিচালনা করে এবং tables এর মধ্যে ডেটা সংরক্ষণ করে। অপরদিকে, NoSQL (Not Only SQL) ডেটাবেসগুলি সাধারণত কাঠামোবিহীন বা অল্প কাঠামোর ডেটা সংরক্ষণ করে এবং SQL এর পরিবর্তে অন্যান্য প্রযুক্তি এবং কুয়েরি ভাষা ব্যবহার করে।

MySQL ঐতিহ্যগতভাবে relational model অনুসরণ করে, তবে কিছু বৈশিষ্ট্য রয়েছে যা MySQL-কে কিছুটা NoSQL এর মতন কাজ করতে সহায়তা করে, যেমন JSON সাপোর্ট এবং Document Stores


MySQL-এর NoSQL সাপোর্ট

যদিও MySQL একটি relational database, তবুও এটি কিছু NoSQL ফিচার সাপোর্ট করে, যা কিছু অ্যাপ্লিকেশনে NoSQL বৈশিষ্ট্যগুলির মতো কাজ করতে সহায়ক হতে পারে। নিচে এই সাপোর্টগুলোর কিছু বিস্তারিত আলোচনা করা হলো:


1. JSON ডেটা টাইপ

MySQL 5.7 থেকে JSON ডেটা টাইপ সাপোর্ট শুরু হয়েছে। JSON ডেটা টাইপ MySQL-কে NoSQL-like document storage এর মতো কাজ করতে সক্ষম করে, যেখানে আপনি একটি কলামে JSON ডেটা সংরক্ষণ করতে পারেন। এটি NoSQL ডেটাবেসের মতো ডকুমেন্ট স্টোরের বৈশিষ্ট্য প্রদান করে।

উদাহরণ:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data JSON
);

এখন আপনি data কলামে JSON ডেটা ইনসার্ট করতে পারেন:

INSERT INTO products (data)
VALUES ('{"name": "Laptop", "price": 1000, "features": ["16GB RAM", "512GB SSD"]}');

এটি JSON ডেটাকে MySQL টেবিলের মধ্যে সংরক্ষণ করবে এবং আপনি JSON ফাংশন ব্যবহার করে এই ডেটার উপর কুয়েরি করতে পারবেন।

JSON Functionality:

  • JSON_EXTRACT: JSON ডেটা থেকে নির্দিষ্ট মান বের করার জন্য:

    SELECT JSON_EXTRACT(data, '$.name') FROM products;
    
  • JSON_UNQUOTE: JSON এর মধ্যে থাকা মান থেকে কোটেশন মুছে ফেলা:

    SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) FROM products;
    
  • JSON_SET: JSON ডেটাতে নতুন কী-ভ্যালু পেয়ার সেট করা:

    UPDATE products SET data = JSON_SET(data, '$.price', 1200) WHERE id = 1;
    

2. NoSQL-like Features:

MySQL-এ NoSQL এর মতো কিছু ফিচার রয়েছে, যেমন:

  • Key-Value Stores: MySQL-এ InnoDB স্টোরেজ ইঞ্জিন এবং MEMORY ইঞ্জিনের মাধ্যমে Key-Value ডেটা সংরক্ষণ করা সম্ভব, যা কিছুটা NoSQL সিস্টেমের মতো কাজ করে।

    উদাহরণ:

    • Key: user:123
    • Value: {"name": "John", "age": 25}
  • Full-Text Search: MySQL FULLTEXT ইনডেক্স সাপোর্ট করে, যা কিছুটা NoSQL ডেটাবেসের মতো ডেটা অনুসন্ধান করতে সহায়তা করে, যেমন Elasticsearch বা MongoDB

    CREATE FULLTEXT INDEX idx_name ON products(name);
    

    এটি name কলামে দ্রুত অনুসন্ধান করতে সহায়তা করবে।

  • Dynamic Schemas: MySQL-এ JSON ডেটা টাইপ ব্যবহার করার ফলে schema-less ডেটা সংরক্ষণ করা সম্ভব, যা কিছুটা NoSQL ডেটাবেসের মতো কাজ করে। এতে প্রতিটি রেকর্ডের জন্য আলাদা স্কিমা তৈরি করা সম্ভব, যেমন MongoDB বা Cassandra

3. MySQL Cluster

MySQL Cluster একটি distributed database সিস্টেম, যা NoSQL ডেটাবেসের কিছু বৈশিষ্ট্য ধারণ করে। এটি ডেটার পারফরম্যান্স এবং স্কেলেবিলিটি বাড়ানোর জন্য ডেটা শার্ডিং (sharding) এবং রেপ্লিকেশন (replication) সাপোর্ট করে।

Key Features of MySQL Cluster:

  • Distributed storage: ডেটা ক্লাস্টারের মধ্যে শার্ড করা হয় এবং উচ্চ আর্লি অ্যাভেইলেবিলিটি অর্জন করা হয়।
  • Horizontal scaling: ডেটাবেসের পারফরম্যান্স উন্নত করার জন্য নতুন নোড যোগ করা হয় (যেমন NoSQL ডেটাবেসগুলোর মতো)।

4. MySQL InnoDB and NoSQL

InnoDB স্টোরেজ ইঞ্জিনটি কিছু NoSQL সিস্টেমের বৈশিষ্ট্য গ্রহণ করেছে, যেমন:

  • Document storage: InnoDB ডেটাবেসে ডকুমেন্ট ডেটা সংরক্ষণের জন্য JSON টাইপ ব্যবহার করা সম্ভব।
  • Row-level locking: এটি MySQL-এ concurrency বৃদ্ধির জন্য NoSQL ডেটাবেসের মতো কাজ করে।

5. MySQL with NoSQL Clients

MySQL সরাসরি NoSQL কাস্টমার ক্লায়েন্ট বা MongoDB বা Cassandra এর মতো সিস্টেমের মতো কাজ করতে পারে। আপনি MySQL-এর উপর NoSQL-এর জন্য connectors ব্যবহার করতে পারেন, যেমন:

  • MySQL NoSQL Connector: এটি NoSQL কাস্টমারের সাথে MySQL ডেটাবেসকে সংযোগ করতে সহায়তা করে।

MySQL এবং NoSQL-এর তুলনা

FeatureMySQLNoSQL (e.g., MongoDB, Cassandra)
Data StructureTables, Rows, Columns (Relational)Flexible schema (JSON, Key-Value, etc.)
Query LanguageSQLVarious (MongoDB uses BSON queries)
ScalingVertical scaling (limited sharding)Horizontal scaling (distributed)
SchemaFixed schemaSchema-less or dynamic
ACID ComplianceYes (Strong consistency)Eventual consistency, BASE model
Use CaseRelational, transactional dataUnstructured or semi-structured data
PerformanceSlower for large unstructured dataFaster for unstructured data and high traffic
ReplicationMaster-Slave, Master-MasterTypically built-in (automatic sharding and replication)

সারাংশ

MySQL মূলত relational database হিসেবে কাজ করে, তবে এতে NoSQL বৈশিষ্ট্যও রয়েছে, যেমন JSON সাপোর্ট, document storage, Full-Text search, এবং key-value store। এসব বৈশিষ্ট্যগুলি MySQL কে NoSQL ডেটাবেসের কিছুটা মতো কাজ করতে সক্ষম করে, বিশেষত যখন আপনার কাঠামোবিহীন বা আংশিক কাঠামোর ডেটা সংরক্ষণ প্রয়োজন। তবে MySQL এখনও একটি relational সিস্টেম, এবং NoSQL ডেটাবেসের মত পারফরম্যান্স বা স্কেলেবিলিটি জন্য অন্যান্য NoSQL সিস্টেম (যেমন, MongoDB, Cassandra) বেশি উপযুক্ত হতে পারে। MySQL এর JSON সাপোর্ট এবং NoSQL-like কনফিগারেশনগুলি কিছু নির্দিষ্ট ক্ষেত্রে NoSQL ডেটাবেসের বিকল্প হতে পারে।

Content added By

MySQL এর JSON এবং NoSQL সমর্থন

260

MySQL মূলত একটি Relational Database Management System (RDBMS), তবে এটি আধুনিক সংস্করণে JSON ডেটা টাইপ এবং কিছু NoSQL বৈশিষ্ট্য সমর্থন করে। এই ফিচারগুলো ডেভেলপারদের আরও লचीলা ডেটা স্টোরেজ এবং হ্যান্ডলিং এর সুবিধা দেয়, যেখানে ডেটা রিলেশনাল টেবিলের বাইরেও গঠন করা যায়।

1. MySQL JSON সমর্থন

MySQL এর JSON সমর্থন 5.7 সংস্করণ থেকে শুরু হয় এবং এটি একটি নতুন ডেটা টাইপ হিসাবে যোগ করা হয়। JSON ডেটা টাইপ ব্যবহার করে আপনি ডেটাবেসে JSON ফরম্যাটে তথ্য সংরক্ষণ এবং পরিচালনা করতে পারেন। এটি বিশেষত Web Development এবং অ্যাপ্লিকেশনের ডেটা স্টোরেজের জন্য উপকারী যেখানে ডেটা রিলেশনাল টেবিলের বাইরে থাকবে।

JSON ডেটা টাইপ

MySQL JSON টাইপের কলাম সরাসরি JSON ডেটা ধারণ করে এবং তার উপর বিভিন্ন ফাংশন এবং অপারেশন চালাতে দেয়। এর মাধ্যমে আপনি JSON ডেটা স্টোর করতে এবং কুয়েরি করতে পারেন, যেমন ডেটা অ্যাক্সেস, আপডেট, এবং পরিবর্তন।

JSON সাপোর্টের কিছু গুরুত্বপূর্ণ ফিচার:

  • JSON ডেটা টাইপ: MySQL 5.7 এবং তার পরবর্তী সংস্করণে JSON ডেটা টাইপ ব্যবহার করা যায়।
  • JSON ফাংশন: MySQL JSON ডেটাতে কাজ করার জন্য বিভিন্ন ফাংশন সরবরাহ করে, যেমন JSON_EXTRACT(), JSON_ARRAY(), JSON_OBJECT(), JSON_SET(), JSON_ARRAY_APPEND(), ইত্যাদি।

JSON ডেটা স্টোরিং:

একটি টেবিলে JSON ডেটা সংরক্ষণের উদাহরণ:

CREATE TABLE products (
    id INT PRIMARY KEY,
    product_data JSON
);

এখন products টেবিলে product_data নামে একটি কলাম আছে, যা JSON ডেটা ধারণ করতে পারে।

JSON ডেটাতে কুয়েরি করা:

JSON ডেটাতে নির্দিষ্ট মান অনুসন্ধান করতে:

SELECT product_data->"$.name" AS product_name
FROM products;

এটি product_data থেকে name ফিল্ডের মান বের করবে।

JSON ডেটাতে নতুন মান আপডেট করতে:

UPDATE products
SET product_data = JSON_SET(product_data, "$.price", 199.99)
WHERE id = 1;

এটি id = 1 এর জন্য product_data কলামে price ফিল্ডের মান ১৯৯.৯৯ সেট করবে।


2. MySQL NoSQL সমর্থন

NoSQL (Not Only SQL) ডেটাবেস এমন ধরনের ডেটাবেস যা রিলেশনাল ডেটাবেস মডেল থেকে আলাদা, যেখানে ডেটা সাধারণত টেবিলের মধ্যে সম্পর্কিত থাকে না। তবে MySQL কিছু NoSQL বৈশিষ্ট্য সমর্থন করে, যা আপনাকে কিছু রিলেশনাল ডেটাবেসের বাইরে কাজ করার সুযোগ দেয়।

MySQL এবং NoSQL সমর্থন:

MySQL NoSQL সাপোর্ট কিছু নির্দিষ্ট বৈশিষ্ট্যের মাধ্যমে আসে, যেমন:

  1. JSON ডেটা টাইপ (যা কিছু NoSQL ডেটাবেসে পাওয়া যায়)
  2. NoSQL Querying (যেমন, SELECT কুয়েরি দ্বারা JSON ডেটার উপর কাজ)
  3. Key-Value Store (MySQL's MEMORY Engine): MySQL এর MEMORY স্টোরেজ ইঞ্জিন ব্যবহার করে আপনি কিছুটা Key-Value স্টোর হিসেবে ব্যবহার করতে পারেন।
  4. MySQL Document Store (MySQL 8.0): MySQL 8.0 সংস্করণে Document Store নামে একটি ফিচার যোগ করা হয়েছে, যা NoSQL-এর মতো ডেটাবেসের কাঠামো প্রদান করে, যাতে আপনি JSON ডেটাতে কাজ করতে পারেন এবং NoSQL ডেটাবেসের মতো ডেটা ম্যানেজমেন্ট সুবিধা পান।

MySQL Document Store (MySQL 8.0)

MySQL Document Store MySQL 8.0 সংস্করণে এসেছে, যা JSON ডেটাতে কাজ করার জন্য NoSQL-like বৈশিষ্ট্য প্রদান করে। এটি MySQL Shell এবং X DevAPI এর মাধ্যমে কাজ করে।

MySQL Document Store দিয়ে NoSQL স্টাইলের কাজ:

MySQL Document Store JSON ডেটা ম্যানিপুলেশন এবং স্টোরেজের জন্য উন্নত ফিচার প্রদান করে। উদাহরণস্বরূপ:

-- JSON ডেটা সংরক্ষণ
INSERT INTO products (id, product_data) 
VALUES (1, '{"name": "Laptop", "price": 1000, "brand": "Dell"}');

এটি MySQL Document Store মাধ্যমে JSON ডেটা স্টোর করবে, যা NoSQL-এ যেমন MongoDB-এর মতো ডেটাবেসে সংরক্ষণ করা হয়।

MySQL Shell (X DevAPI)

MySQL Shell এবং X DevAPI ব্যবহার করে NoSQL স্টাইলের ডেটা কুয়েরি করতে পারা যায়। X DevAPI JSON ডেটাতে কাজ করার জন্য এবং ডকুমেন্ট স্টোর করার জন্য একটি আধুনিক ইন্টারফেস সরবরাহ করে।

let session = mysql.getSession();
let products = session.getSchema("shop").getTable("products");

let result = products.select("product_data").where("product_data.name = 'Laptop'").execute();

এটি MySQL Document Store-এর মাধ্যমে NoSQL স্টাইলের কুয়েরি করার উদাহরণ।


3. MySQL JSON এবং NoSQL এর সুবিধা

  • JSON ডেটার সুবিধা:
    • JSON ডেটা ফরম্যাটে ডেটা স্টোর করলে এর মধ্যে স্ট্রাকচারযুক্ত এবং অস্থির ডেটা সংরক্ষণ সহজ হয়ে যায়।
    • ডেটা স্ট্রাকচার পরিবর্তন করা সহজ।
    • JSON ফাংশনগুলির মাধ্যমে ডেটা অ্যাক্সেস এবং আপডেট করা খুবই সহজ।
  • NoSQL সমর্থন:
    • JSON ডেটা টাইপ এবং Document Store ফিচার ব্যবহার করে, MySQL এখন কিছুটা NoSQL স্টাইলের ডেটাবেস অপারেশন সমর্থন করে।
    • ডেটা স্টোরেজ এবং কাজের জন্য Flexibility প্রদান করে, যা RDBMS এর জন্য স্বাভাবিক নয়।

সারাংশ

  • MySQL JSON সমর্থন: MySQL 5.7 এবং পরবর্তী সংস্করণ JSON ডেটা টাইপ সাপোর্ট করে, যা ডেটাবেসে JSON ডেটা সংরক্ষণ, আপডেট এবং কুয়েরি করতে সাহায্য করে।
  • MySQL NoSQL সমর্থন: MySQL Document Store এবং JSON ডেটা সমর্থন করে, যার মাধ্যমে MySQL NoSQL স্টাইলের ডেটাবেস কাজ সমর্থন করতে পারে, বিশেষ করে JSON ডেটা স্টোরেজ এবং কুয়েরি করার ক্ষেত্রে।
  • Flexibility: MySQL ডেটাবেসে JSON এবং NoSQL সমর্থন ডেভেলপারদের আরও লচিলভাবে ডেটা পরিচালনা করার সুবিধা দেয়, যা ওয়েব ডেভেলপমেন্ট এবং অন্যান্য অ্যাপ্লিকেশন ডেটা ম্যানেজমেন্টে উপকারী।
Content added By

JSON ফরম্যাটে ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণ

245

JSON (JavaScript Object Notation) হল একটি সাধারণ, লাইটওয়েট ডেটা বিনিময় ফরম্যাট যা মানুষের কাছে পাঠযোগ্য এবং মেশিনের জন্য সহজে পার্সযোগ্য। এটি ডেটা স্টোরেজ এবং এক্সচেঞ্জের জন্য একটি জনপ্রিয় ফরম্যাট, বিশেষ করে ওয়েব অ্যাপ্লিকেশনগুলিতে। JSON ফরম্যাটটি মূলত কীগুলোর (key-value pairs) মাধ্যমে ডেটা সংরক্ষণ করে, যা ডেটার স্ট্রাকচার এবং প্রক্রিয়াকরণের জন্য উপযোগী।

MySQL এবং অন্যান্য ডেটাবেস সিস্টেমে JSON ফরম্যাটে ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণ বিভিন্ন সুবিধা প্রদান করে, বিশেষ করে যখন ডেটা ফ্লেক্সিবল এবং হায়ারার্কিকাল (nested) হওয়া দরকার।


1. JSON ফরম্যাটে ডেটা সংরক্ষণ (Storing Data in JSON Format)

MySQL 5.7.8 থেকে JSON ডেটা টাইপ সাপোর্ট শুরু করেছে। এর মাধ্যমে আপনি টেবিলের একটি কলামে JSON ডেটা সংরক্ষণ করতে পারেন।

JSON ডেটা টাইপ কলাম তৈরি করা:

JSON ডেটা সংরক্ষণ করার জন্য, আপনাকে টেবিলের একটি কলাম JSON ডেটা টাইপ ব্যবহার করে তৈরি করতে হবে।

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    details JSON
);

এখানে, details কলামটি JSON ডেটা সংরক্ষণ করার জন্য তৈরি করা হয়েছে। এর মধ্যে আপনি যে কোনো ধরনের JSON ডেটা সন্নিবেশিত করতে পারেন।

JSON ডেটা ইনসার্ট করা:

আপনি JSON ডেটা ইনসার্ট করতে পারেন INSERT কমান্ড ব্যবহার করে:

INSERT INTO users (name, details)
VALUES ('John Doe', '{"age": 30, "email": "johndoe@example.com", "address": {"city": "New York", "zip": "10001"}}');

এখানে details কলামে একটি JSON অবজেক্ট ইনসার্ট করা হয়েছে, যেখানে একজন ব্যবহারকারীর বয়স, ইমেইল এবং ঠিকানা সংরক্ষিত রয়েছে।


2. JSON ডেটা থেকে তথ্য বের করা (Extracting Data from JSON)

MySQL-এ JSON ডেটা থেকে নির্দিষ্ট তথ্য বের করতে আপনি বিভিন্ন ফাংশন ব্যবহার করতে পারেন।

JSON_EXTRACT() ফাংশন:

JSON_EXTRACT() ফাংশন ব্যবহার করে আপনি JSON ডেটার নির্দিষ্ট অংশ বের করতে পারেন।

SELECT JSON_EXTRACT(details, '$.age') AS age
FROM users
WHERE name = 'John Doe';

এটি details কলামের JSON ডেটা থেকে age এর মান বের করে দেখাবে।

-> এবং ->> অপারেটর:

MySQL-এ JSON ডেটা থেকে মান বের করার জন্য আরও সহজ পদ্ধতি হলো -> এবং ->> অপারেটর ব্যবহার করা।

  • -> অপারেটর JSON অবজেক্ট থেকে JSON ফর্ম্যাটে মান রিটার্ন করে।
  • ->> অপারেটর JSON অবজেক্ট থেকে পLAIN (পঠযোগ্য) মান রিটার্ন করে।
SELECT details->'$.age' AS age
FROM users
WHERE name = 'John Doe';

এটি JSON ডেটা থেকে age এর মান JSON ফর্ম্যাটে রিটার্ন করবে।

SELECT details->>'$.age' AS age
FROM users
WHERE name = 'John Doe';

এটি JSON ডেটা থেকে age এর মান পLAIN ফর্ম্যাটে (যেমন 30) রিটার্ন করবে।


3. JSON ডেটা আপডেট করা (Updating JSON Data)

MySQL-এ JSON ডেটা আপডেট করার জন্য JSON_SET() ফাংশন ব্যবহার করা হয়।

UPDATE users
SET details = JSON_SET(details, '$.address.city', 'Los Angeles')
WHERE name = 'John Doe';

এটি John Doe এর ঠিকানার শহরের নাম পরিবর্তন করে Los Angeles করবে।

JSON_INSERT() এবং JSON_REPLACE():

  • JSON_INSERT() ব্যবহার করে যদি JSON ডেটাতে নতুন কীগুলি না থাকে তবে নতুন কীগুলি ইনসার্ট করা হয়।
  • JSON_REPLACE() ব্যবহার করে একটি বিদ্যমান কীর মান পরিবর্তন করা হয়।
UPDATE users
SET details = JSON_INSERT(details, '$.phone', '123-456-7890')
WHERE name = 'John Doe';

এটি details JSON ডেটাতে নতুন একটি phone কীগুলির মান ইনসার্ট করবে।

UPDATE users
SET details = JSON_REPLACE(details, '$.email', 'newemail@example.com')
WHERE name = 'John Doe';

এটি email কীর মান পরিবর্তন করবে।


4. JSON ডেটার ভিতরে শর্ত প্রয়োগ (Querying with JSON Data)

MySQL-এ JSON ডেটার উপর শর্ত প্রয়োগ করতে JSON_CONTAINS() বা JSON_UNQUOTE() ফাংশন ব্যবহার করা হয়।

JSON_CONTAINS():

এটি চেক করে যে একটি JSON অবজেক্টে নির্দিষ্ট মান আছে কিনা।

SELECT name
FROM users
WHERE JSON_CONTAINS(details, '{"city": "New York"}', '$.address');

এটি সেই ব্যবহারকারীদের ফিরিয়ে দিবে যারা address অংশে "city": "New York" তথ্য ধারণ করে।

JSON_UNQUOTE():

এটি JSON ডেটা থেকে কোটেশন মুছে দেয়, যাতে মানটি পLAIN টেক্সট হিসেবে ব্যবহৃত হয়।

SELECT JSON_UNQUOTE(details->'$.email') AS email
FROM users
WHERE name = 'John Doe';

এটি email কীর মানকে কোটেশন ছাড়া রিটার্ন করবে।


5. JSON ডেটা মুছে ফেলা (Deleting JSON Data)

MySQL-এ JSON ডেটা থেকে কনক্রিট মান বা কীগুলি মুছে ফেলতে JSON_REMOVE() ফাংশন ব্যবহার করা হয়।

UPDATE users
SET details = JSON_REMOVE(details, '$.address.zip')
WHERE name = 'John Doe';

এটি details JSON থেকে zip কীগুলি মুছে ফেলবে।


সারাংশ

JSON ফরম্যাটটি ডেটা স্টোরেজ এবং এক্সচেঞ্জের জন্য খুবই জনপ্রিয় এবং প্রায় সব আধুনিক ডেটাবেসে JSON ডেটা টাইপ সাপোর্ট করা হয়। MySQL-এ JSON ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণের জন্য বিভিন্ন ফাংশন এবং অপারেটর রয়েছে, যেমন JSON_EXTRACT(), JSON_SET(), JSON_INSERT(), এবং JSON_REMOVE() যা ডেটার ইন্টিগ্রিটি বজায় রাখে এবং দ্রুত প্রক্রিয়াকরণের সুবিধা দেয়। JSON ডেটা শার্ডিং, স্কেলেবিলিটি, এবং পারফরম্যান্স বাড়ানোর জন্য খুবই কার্যকর।

Content added By

MySQL এর Virtual Columns ব্যবহার

322

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

Virtual Columns এর বৈশিষ্ট্য

  • Data is not stored: Virtual Columns ডেটাবেসের টেবিলে সংরক্ষিত হয় না। এগুলি স্বয়ংক্রিয়ভাবে নির্ধারিত হয় নির্দিষ্ট গণনার ভিত্তিতে।
  • Read-only: Virtual Columns সাধারণত read-only হয়, অর্থাৎ আপনি এদের মান পরিবর্তন করতে পারবেন না। এটি কেবল অন্য কলামগুলির মানের উপর নির্ভর করে গণনা করা হয়।
  • Automatically calculated: একটি Virtual Column টেবিলের অন্যান্য কলামের উপর ভিত্তি করে গণনা করা হয়, এবং এটি কেবল তখনই আপডেট হয় যখন নির্ভরশীল কলামের মান পরিবর্তিত হয়।

Virtual Column তৈরি করা

MySQL এ Virtual Column তৈরি করার জন্য, GENERATED ALWAYS এবং VIRTUAL কীওয়ার্ড ব্যবহার করা হয়। একটি ভার্চুয়াল কলাম তৈরি করতে, আপনাকে প্রথমে কলামের নাম, ডেটা টাইপ, এবং গণনা করার জন্য একটি অভিব্যক্তি (expression) নির্ধারণ করতে হবে।

সিনট্যাক্স:

CREATE TABLE table_name (
    column_name datatype GENERATED ALWAYS AS (expression) VIRTUAL
);

এখানে:

  • column_name: ভার্চুয়াল কলামের নাম।
  • datatype: কলামের ডেটা টাইপ (যেমন INT, VARCHAR, DATE, ইত্যাদি)।
  • expression: গণনা করার জন্য কলামগুলির মধ্যে একটি বা একাধিক কলামের ভিত্তিতে একটি অভিব্যক্তি।

Virtual Column উদাহরণ

ধরা যাক, একটি products নামের টেবিল আছে যেখানে price এবং tax_rate কলাম রয়েছে এবং আপনি একটি ভার্চুয়াল কলাম তৈরি করতে চান যা total_price হিসাব করবে (যেখানে total_price হল price এবং tax_rate এর ভিত্তিতে গুণফল)।

1. টেবিল তৈরি করা Virtual Column সহ:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255),
    price DECIMAL(10, 2),
    tax_rate DECIMAL(5, 2),
    total_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * (1 + tax_rate / 100)) VIRTUAL
);

এখানে:

  • total_price হল একটি ভার্চুয়াল কলাম, যা price এবং tax_rate কলামের মানের ভিত্তিতে গণনা করা হয়।
  • price * (1 + tax_rate / 100) হল গণনার অভিব্যক্তি, যা total_price নির্ধারণ করে।

2. ডেটা ইনসার্ট করা:

INSERT INTO products (product_id, product_name, price, tax_rate)
VALUES (1, 'Product A', 100.00, 10.00);

3. ভার্চুয়াল কলাম ব্যবহার করে কুয়েরি চালানো:

SELECT product_name, total_price FROM products;

এটি products টেবিলের product_name এবং তার সংশ্লিষ্ট total_price প্রদর্শন করবে, যেখানে total_price price এবং tax_rate এর ভিত্তিতে ক্যালকুলেট করা হবে।


Persistent Virtual Columns (Stored Columns)

MySQL এ Persistent Virtual Columns নামে একটি বৈশিষ্ট্যও আছে, যেখানে ভার্চুয়াল কলামটি অবশ্যই গণনা করা হবে এবং টেবিলের মধ্যে সংরক্ষিত হবে, তবে এটি সাধারণ Virtual Column এর মতো পরিবর্তনশীল।

Persistent Virtual Column তৈরি করা:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255),
    price DECIMAL(10, 2),
    tax_rate DECIMAL(5, 2),
    total_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * (1 + tax_rate / 100)) STORED
);

এখানে, total_price কলামটি একটি Persistent ভার্চুয়াল কলাম হবে, অর্থাৎ এটি টেবিলের মধ্যে সংরক্ষিত হবে এবং Stored ডেটা হিসেবে গণনা হবে।

প্রধান পার্থক্য:

  • Virtual Columns: টেবিলের মধ্যে সংরক্ষিত হয় না এবং কেবল কুয়েরি চলাকালীন সময়ে গণনা করা হয়।
  • Stored Columns: গণনা করার পর টেবিলের মধ্যে সংরক্ষিত হয় এবং ডেটার একটি অংশ হয়ে থাকে।

Virtual Columns এর সুবিধা

  1. অতিরিক্ত ডেটা সংরক্ষণ ছাড়াই গণনা করা: ভার্চুয়াল কলাম শুধুমাত্র রানটাইমে গণনা করা হয়, তাই এটি অতিরিক্ত স্টোরেজ ব্যবহার করে না।
  2. স্বয়ংক্রিয় আপডেট: ভার্চুয়াল কলামটি সংরক্ষিত ডেটার ভিত্তিতে স্বয়ংক্রিয়ভাবে আপডেট হয়, তাই আপনার যেকোনো পরিবর্তন স্বয়ংক্রিয়ভাবে গণনা ফলাফলটি পরিবর্তন করবে।
  3. ক্যালকুলেটেড ডেটা সহজে পাওয়া যায়: আপনি যদি বিভিন্ন কলামের ওপর ভিত্তি করে কোনো ডেটা দেখতে চান, তাহলে ভার্চুয়াল কলাম এটি সরাসরি কুয়েরি করে নিতে সহায়তা করে।
  4. পারফরম্যান্স বৃদ্ধি: ভার্চুয়াল কলাম ব্যবহার করে ডেটা ক্যালকুলেশন এবং স্টোরেজ সহজ এবং দ্রুত করা যায়।

Virtual Columns এর সীমাবদ্ধতা

  1. ডেটাবেসের স্টোরেজে ভার্চুয়াল কলাম থাকে না: যদি আপনি ডেটার ইতিহাস বা ক্যালকুলেশন সংরক্ষণ করতে চান, তবে ভার্চুয়াল কলাম সম্ভবত উপযুক্ত নয়, কারণ এটি রানটাইমে ক্যালকুলেট হয় এবং সংরক্ষণ করা হয় না।
  2. Complex Expressions: কিছু জটিল অভিব্যক্তি ভার্চুয়াল কলামে ব্যবহৃত হতে পারে না, বিশেষত যদি এটি আরও জটিল এবং অনেক টেবিলের সাথে যুক্ত হয়।

সারাংশ

MySQL এর Virtual Columns একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ক্যালকুলেটেড ডেটা ব্যবহার করে আপনার টেবিলের কাঠামো সহজ করতে সহায়তা করে। এটি রানটাইমে গণনা করা হয় এবং টেবিলের মধ্যে সংরক্ষিত হয় না, ফলে অতিরিক্ত স্টোরেজের প্রয়োজন পড়ে না। তবে কিছু ক্ষেত্রে Persistent Virtual Columns (Stored Columns) ব্যবহার করা যেতে পারে, যেখানে ক্যালকুলেটেড ডেটা সংরক্ষণ করা হয়। ভার্চুয়াল কলামগুলি সঠিকভাবে ব্যবহার করলে পারফরম্যান্স উন্নত এবং ডেটা ম্যানেজমেন্ট সহজ হতে পারে।

Content added By

NoSQL এবং SQL এর মধ্যে পার্থক্য

291

NoSQL এবং SQL ডেটাবেসের মধ্যে বেশ কিছু মৌলিক পার্থক্য রয়েছে, যেগুলি তাদের কার্যকারিতা, স্কেলেবিলিটি, এবং উপযুক্ত ব্যবহার ক্ষেত্রগুলি নির্ধারণ করে। নিচে NoSQL এবং SQL ডেটাবেসের মধ্যে প্রধান পার্থক্যগুলি তুলে ধরা হলো:


1. ডেটাবেসের ধরন

  • SQL (Structured Query Language): SQL ডেটাবেসগুলি হল রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS)। এখানে ডেটা টেবিলের আকারে সংরক্ষিত হয় এবং বিভিন্ন টেবিলের মধ্যে সম্পর্ক থাকে (উদাহরণ: MySQL, PostgreSQL, Oracle Database, SQL Server)।
  • NoSQL (Not Only SQL): NoSQL ডেটাবেসগুলি হল নির্বাচনমূলক ডেটাবেস সিস্টেম যা রিলেশনাল ডেটাবেসের ধারণা থেকে পৃথক এবং অনেক ধরনের ডেটা স্টোরেজ পদ্ধতি (যেমন Document-based, Key-Value, Column-family, Graph) সমর্থন করে (উদাহরণ: MongoDB, Cassandra, CouchDB, Redis).

2. ডেটা মডেল

  • SQL: SQL ডেটাবেসগুলি টেবিল ভিত্তিক। ডেটা টেবিলের মধ্যে সারি এবং কলামে সংরক্ষিত থাকে, এবং প্রতিটি টেবিলের মধ্যে primary keyforeign key এর মাধ্যমে সম্পর্ক স্থাপন করা হয়।
  • NoSQL: NoSQL ডেটাবেসের মধ্যে ডেটা ডকুমেন্ট, কী-ভ্যালু পেয়ার, গ্রাফ, বা কলাম-ফ্যামিলি আকারে সংরক্ষিত হতে পারে। এখানে ডেটার কাঠামো পরিবর্তনশীল এবং আরো নমনীয়।

3. স্কেলেবিলিটি

  • SQL: SQL ডেটাবেসগুলি সাধারণত ভেরটিক্যাল স্কেলিং ব্যবহার করে, অর্থাৎ, আরো শক্তিশালী সার্ভার যুক্ত করা হয় পারফরম্যান্স বৃদ্ধির জন্য। তবে এর স্কেলিং কিছুটা কঠিন হতে পারে।
  • NoSQL: NoSQL ডেটাবেসগুলি হরাইজন্টাল স্কেলিং ব্যবহার করে, যেখানে আরো সার্ভার যোগ করা যায় ডেটাবেসের ক্ষমতা বাড়ানোর জন্য। এটি বড় পরিসরের ডেটাবেস এবং উচ্চ ট্রাফিক সিস্টেমের জন্য সুবিধাজনক।

4. ডেটা অ্যাক্সেস এবং কুয়েরি ভাষা

  • SQL: SQL ডেটাবেসগুলিতে ডেটা অ্যাক্সেসের জন্য SQL ভাষা ব্যবহৃত হয়, যা একটি স্ট্যান্ডার্ড ভাষা এবং বিভিন্ন রিলেশনাল ডেটাবেসে একরকম কাজ করে।
  • NoSQL: NoSQL ডেটাবেসগুলি বিভিন্ন ধরনের কুয়েরি ভাষা ব্যবহার করে, যেমন MongoDB এ Mongo Query Language (MQL), Cassandra এ CQL (Cassandra Query Language), এবং Redis এ Redis commands। সুতরাং, NoSQL এর কুয়েরি ভাষা ডেটাবেসের ধরন অনুযায়ী পরিবর্তিত হয়।

5. ডেটা ইন্টিগ্রিটি এবং ট্রানজেকশন

  • SQL: SQL ডেটাবেসগুলি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য অনুসরণ করে, যা ডেটার সঠিকতা, নিরাপত্তা, এবং একক ট্রানজেকশনের মধ্যে নির্ভরযোগ্যতা নিশ্চিত করে।
  • NoSQL: NoSQL ডেটাবেসগুলি সাধারণত Eventual Consistency প্রিন্সিপাল অনুসরণ করে, যেখানে ডেটার সাময়িক অস্থিরতা থাকতে পারে তবে পরে তা সঙ্গতিপূর্ণ হয়ে যাবে। তবে কিছু NoSQL ডেটাবেস (যেমন MongoDB) ACID ট্রানজেকশন সাপোর্ট করে।

6. স্কিমা এবং ফিল্ড

  • SQL: SQL ডেটাবেসে একটি ফিক্সড স্কিমা থাকে, যার মানে হল যে টেবিল তৈরি করার সময় এর কলাম এবং ডেটা টাইপ নির্দিষ্ট করতে হয়। এর পরে ডেটাবেসে ডেটা সংরক্ষণ করার সময় ওই স্কিমা অনুযায়ী তথ্য অন্তর্ভুক্ত করতে হবে।
  • NoSQL: NoSQL ডেটাবেসে স্কিমা-লেস অথবা নমনিয় ডেটা মডেল ব্যবহার করা হয়, যার মানে হল যে আপনি যে কোনও ফিল্ড বা ডেটা টাইপ ব্যবহার করতে পারেন এবং স্কিমা পরিবর্তন করা খুবই সহজ।

7. কার্যকারিতা এবং পারফরম্যান্স

  • SQL: SQL ডেটাবেসগুলি একক সার্ভার থেকে ডেটা পরিচালনা করতে ভাল কাজ করে এবং ছোট থেকে মাঝারি আকারের অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। তবে বৃহৎ আকারের সিস্টেমে তার পারফরম্যান্স সীমিত হতে পারে।
  • NoSQL: NoSQL ডেটাবেসগুলি উচ্চ পারফরম্যান্স এবং দ্রুত ট্রানজেকশন সমর্থন করে, বিশেষ করে যখন ডেটা হ্যাশিং বা অন্য ধরনের বিশাল পরিমাণের ডেটা পরিচালনা করতে হয়। এটি ওয়েব অ্যাপ্লিকেশন, রিয়েল-টাইম সিস্টেম এবং বিশাল ডেটা সেটের জন্য উপযুক্ত।

8. ব্যবহার ক্ষেত্র

  • SQL: SQL ডেটাবেসগুলি তেমনটা উপযুক্ত যেখানে ডেটার স্ট্রাকচার নির্দিষ্ট এবং সম্পর্কযুক্ত (যেমন অর্থনৈতিক অ্যাপ্লিকেশন, ব্যবসায়িক অ্যাপ্লিকেশন, ব্যাংকিং সিস্টেম ইত্যাদি)।
  • NoSQL: NoSQL ডেটাবেসগুলি বৃহৎ, জটিল এবং ডাইনামিক ডেটা সেটগুলির জন্য উপযুক্ত, যেমন ই-কমার্স সাইট, সোশ্যাল মিডিয়া প্ল্যাটফর্ম, রিয়েল-টাইম অ্যাপ্লিকেশন, এবং বিগ ডেটা সিস্টেম

9. ডেটাবেস ডিজাইন

  • SQL: SQL ডেটাবেসের ডিজাইন সাধারণত রিলেশনাল টেবিল, normalization এবং ডেটা সম্পর্ক ভিত্তিক হয়।
  • NoSQL: NoSQL ডেটাবেসে ডেটা ডিজাইন সাধারণত ডকুমেন্ট বা কীবোর্ড ভিত্তিক হয় এবং এটি denormalized হতে পারে, যেখানে ডেটা সম্পর্ক কম থাকে।

সারাংশ

বিষয়SQLNoSQL
ডেটাবেস টাইপরিলেশনাল ডেটাবেস (RDBMS)নন-রিলেশনাল ডেটাবেস (NoSQL)
ডেটা মডেলটেবিল ভিত্তিক, রিলেশনালডকুমেন্ট, কীবোর্ড, কলাম, গ্রাফ ইত্যাদি
স্কেলেবিলিটিভেরটিক্যাল স্কেলিংহরাইজন্টাল স্কেলিং
ডেটাবেস ভাষাSQL (Structured Query Language)ডেটাবেস নির্ভর কুয়েরি ভাষা
ডেটা ইন্টিগ্রিটিACID প্রিন্সিপালEventual Consistency (บาง NoSQL ACID সমর্থন করে)
স্কিমাফিক্সড স্কিমাস্কিমা-লেস
পারফরম্যান্সমধ্যম পারফরম্যান্স, ডেটা বিশ্লেষণে শক্তিশালীউচ্চ পারফরম্যান্স, দ্রুত প্রক্রিয়াকরণ
ব্যবহার ক্ষেত্রব্যাংকিং, অ্যাকাউন্টিং, ইত্যাদিওয়েব অ্যাপ্লিকেশন, রিয়েল-টাইম সিস্টেম

SQL ডেটাবেসগুলি সাধারণত ঐতিহ্যবাহী ব্যবসায়িক এবং ট্রানজেকশনাল অ্যাপ্লিকেশনের জন্য উপযুক্ত, যেখানে NoSQL ডেটাবেসগুলি দ্রুত পরিবর্তনশীল, বৃহৎ পরিসরের, এবং অপ্রতিসম বা ডাইনামিক ডেটার জন্য ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...