CQL (Cassandra Query Language) হলো Apache Cassandra ডেটাবেসে ডেটা পরিচালনা করার জন্য ব্যবহৃত একটি উচ্চ স্তরের কুয়েরি ভাষা। এটি SQL (Structured Query Language)-এর মতো দেখতে হলেও কিছু পার্থক্য রয়েছে, কারণ Cassandra একটি NoSQL ডেটাবেস এবং তা রিলেশনাল ডেটাবেসের মতো কাজ করে না। CQL মূলত ডেটাবেসের টেবিল, রেকর্ড এবং কলামগুলোর সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়, কিন্তু এর মধ্যে কিছু সুনির্দিষ্ট কনসেপ্ট এবং অপারেশন থাকে যা Cassandra এর নকশা অনুযায়ী ডিজাইন করা।
CQL এর মাধ্যমে Cassandra ডেটাবেসে ডেটা ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট করা যায়। তবে এটি SQL এর মতো ডেটার রিলেশনশিপ পরিচালনা করে না, বরং ডেটা একটি টেবিলের মধ্যে কলাম ফ্যামিলি এবং রো আকারে সংরক্ষিত হয়।
1. CQL এর প্রধান বৈশিষ্ট্য
- SQL অনুরূপ সিনট্যাক্স: CQL SQL-এর মতোই দেখতে, তবে কিছু সুনির্দিষ্ট পরিবর্তন রয়েছে। উদাহরণস্বরূপ, SQL-এ JOIN অপারেশন কাজ করে, কিন্তু CQL-এ JOIN অপারেশন নিষিদ্ধ।
- NoSQL আর্কিটেকচার: Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস, তাই CQL তাতে ডেটাকে টেবিল ভিত্তিক আর্কিটেকচারে পরিচালনা করে, কিন্তু রিলেশনাল ডেটাবেসের মতো সুরক্ষিত সম্পর্ক (relationships) ব্যবহার করা হয় না।
- Data Modeling: CQL ডেটা মডেলিং ও ডেটাবেস ডিজাইনের জন্য ব্যবহৃত হয়, যেখানে টেবিলের জন্য সঠিক স্কিমা তৈরি করা হয় এবং ডেটা পরিচালনা করা হয়।
- Scalable & High Availability: CQL Cassandra এর স্কেলেবিলিটি এবং হাই অ্যাভেইলেবিলিটির সুবিধা সহ ডেটাবেস পরিচালনা করতে সহায়তা করে।
2. CQL কমান্ডস
CQL-এ বিভিন্ন ধরনের কমান্ড আছে যা ডেটাবেসের বিভিন্ন কাজ সম্পাদন করতে ব্যবহৃত হয়, যেমন CREATE, INSERT, SELECT, UPDATE, DELETE, ইত্যাদি।
2.1 CREATE (টেবিল তৈরি করা)
CQL-এ টেবিল তৈরি করার জন্য CREATE কমান্ড ব্যবহার করা হয়।
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT,
age INT
);
এখানে users নামে একটি টেবিল তৈরি করা হচ্ছে, যার মধ্যে user_id, name, email, এবং age কলাম থাকবে। PRIMARY KEY নির্ধারণ করা হয়েছে user_id কলামকে।
2.2 INSERT (ডেটা ইনসার্ট করা)
INSERT INTO কমান্ড দিয়ে Cassandra টেবিলে নতুন ডেটা যোগ করা যায়।
INSERT INTO users (user_id, name, email, age)
VALUES (uuid(), 'John Doe', 'johndoe@example.com', 30);
এটি users টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবে।
2.3 SELECT (ডেটা নির্বাচন করা)
SELECT কমান্ড ব্যবহার করে Cassandra টেবিল থেকে ডেটা এক্সট্রাক্ট করা হয়।
SELECT * FROM users WHERE age > 25;
এটি users টেবিল থেকে সমস্ত ব্যবহারকারীর তথ্য আনবে, যাদের বয়স ২৫ এর বেশি।
2.4 UPDATE (ডেটা আপডেট করা)
UPDATE কমান্ড দিয়ে CQL-এ কোনো ডেটা আপডেট করা যায়।
UPDATE users SET age = 31 WHERE user_id = 12345;
এটি user_id = 12345 এর জন্য ব্যবহারকারীর বয়স ৩১ এ আপডেট করবে।
2.5 DELETE (ডেটা মুছে ফেলা)
DELETE কমান্ড দিয়ে কোনো রেকর্ড বা কলাম মুছে ফেলা হয়।
DELETE FROM users WHERE user_id = 12345;
এটি user_id = 12345 এর রেকর্ড মুছে ফেলবে।
3. CQL এর অন্যান্য গুরুত্বপূর্ণ বৈশিষ্ট্য
3.1 কাস্টম ডেটা টাইপ (Custom Data Types)
Cassandra CQL কাস্টম ডেটা টাইপের সমর্থন করে, যেমন LIST, SET, MAP, যা বিভিন্ন ধরনের ডেটা স্টোর করার জন্য ব্যবহৃত হয়।
CREATE TABLE products (
product_id UUID PRIMARY KEY,
product_name TEXT,
tags SET<TEXT>
);
এখানে tags একটি SET ডেটা টাইপ হিসেবে সংজ্ঞায়িত করা হয়েছে।
3.2 Clustering Key এবং Partition Key
CQL-এ ডেটার জন্য Partition Key এবং Clustering Key ব্যবহার করা হয়। Partition Key ডেটার কিভাবে বিভক্ত হবে তা নির্ধারণ করে এবং Clustering Key একাধিক রেকর্ডকে সঠিকভাবে সাজানোর জন্য ব্যবহৃত হয়।
CREATE TABLE sales (
sale_id UUID PRIMARY KEY,
date TIMESTAMP,
amount DECIMAL
) WITH CLUSTERING ORDER BY (date DESC);
এখানে date কলামটি Clustering Key হিসেবে কাজ করবে, যাতে ডেটা তারিখ অনুসারে সাজানো থাকবে।
3.3 Indexing
CQL ইনডেক্সিংয়ের মাধ্যমে একটি নির্দিষ্ট কলামকে দ্রুত অনুসন্ধানযোগ্য করে তোলে।
CREATE INDEX ON users (email);
এটি email কলামে একটি ইনডেক্স তৈরি করবে, যা email এর ভিত্তিতে ডেটা অনুসন্ধান করতে সহায়ক হবে।
4. CQL এর সীমাবদ্ধতা
CQL-এ কিছু সীমাবদ্ধতা রয়েছে যা রিলেশনাল ডেটাবেসে পাওয়া যায় না:
- JOIN অপারেশন নিষিদ্ধ: CQL-এ JOIN অপারেশন সম্ভব নয়, কারণ Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস এবং রিলেশনাল ডেটাবেসের মতো সম্পর্কিত ডেটা সিস্টেমে কাজ করে না।
- ACID ট্রানজেকশন: CQL সম্পূর্ণ ACID ট্রানজেকশন সমর্থন করে না, বরং BASE (Basically Available, Soft state, Eventually consistent) ধারণা অনুসরণ করে।
সারাংশ
CQL (Cassandra Query Language) হলো Apache Cassandra ডেটাবেসে ডেটা পরিচালনার জন্য ব্যবহৃত একটি ভাষা যা SQL-এর মতো দেখতে হলেও কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। CQL ডেটাবেসে টেবিল তৈরি, ডেটা ইনসার্ট, আপডেট, সিলেক্ট, এবং ডিলিট করার জন্য ব্যবহৃত হয়। এটি Cassandra এর স্কেলেবল এবং ডিস্ট্রিবিউটেড প্রকৃতির সাথে সঙ্গতিপূর্ণভাবে কাজ করে, যেখানে ডেটা পার্টিশনিং এবং রেপ্লিকেশন করা হয়। CQL এর মাধ্যমে Cassandra ব্যবহারকারীরা সহজেই ডেটা পরিচালনা করতে পারে, তবে এতে কিছু সীমাবদ্ধতা যেমন JOIN এবং সম্পূর্ণ ACID ট্রানজেকশন সাপোর্টের অভাব রয়েছে।
Cassandra Query Language (CQL) হলো Cassandra ডেটাবেসে ডেটা পরিচালনার জন্য ব্যবহৃত একটি উচ্চ স্তরের ভাষা, যা SQL-এর মতোই দেখতে, কিন্তু NoSQL ডেটাবেসের জন্য উপযুক্তভাবে কাস্টমাইজড। CQL এর মাধ্যমে আপনি ডেটাবেসে ডেটা সন্নিবেশ, নির্বাচন, আপডেট এবং মুছতে পারেন, সেই সাথে টেবিল তৈরি, ড্রপ, এবং স্কিমা পরিবর্তনও করতে পারেন।
1. CQL Syntax Overview
CQL-এর সিনট্যাক্স SQL-এর মতোই, তবে কিছু পরিবর্তন রয়েছে কারণ Cassandra একটি NoSQL ডেটাবেস, যেখানে সম্পর্কিত ডেটা বা জটিল JOIN এবং ট্রানজেকশনের মতো ফিচারগুলো নেই। CQL এর সিনট্যাক্স সহজ এবং পরিষ্কারভাবে ডেটাবেসের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।
সাধারণ সিনট্যাক্স:
- Keywords:
CREATE,SELECT,INSERT,UPDATE,DELETE,ALTER,DROP, ইত্যাদি। - Identifiers: ডেটাবেসের নাম, টেবিলের নাম, কলামের নাম ইত্যাদি।
- Literals: স্ট্রিং, সংখ্যার মান, ডেটার টাইপ।
2. CQL এর সাধারণ কমান্ড এবং উদাহরণ
2.1 CREATE KEYSPACE
CREATE KEYSPACE কমান্ডটি একটি নতুন কীস্পেস তৈরি করতে ব্যবহৃত হয়। কীস্পেস হল একটি ক্যাসান্দ্রা ডেটাবেসের সংকলন, যা টেবিল এবং অন্যান্য অবজেক্ট ধারণ করে।
CREATE KEYSPACE my_keyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
- Replication Factor: এটি নির্ধারণ করে যে কতটি নোডে ডেটার কপি থাকবে। এই উদাহরণে ডেটা তিনটি নোডে রিপ্লিকেট হবে।
2.2 USE KEYSPACE
একটি কীস্পেস নির্বাচন করতে USE কমান্ড ব্যবহার করা হয়:
USE my_keyspace;
2.3 CREATE TABLE
CQL-এ টেবিল তৈরি করতে CREATE TABLE কমান্ড ব্যবহার করা হয়। এখানে আপনি টেবিলের নাম এবং কলামগুলি সংজ্ঞায়িত করেন।
CREATE TABLE users (
user_id UUID PRIMARY KEY,
username text,
email text,
created_at timestamp
);
- PRIMARY KEY:
user_idকলামকে প্রাথমিক কী হিসেবে চিহ্নিত করা হয়েছে, যা প্রতিটি রেকর্ডের জন্য ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করবে।
2.4 INSERT INTO
ডেটা সন্নিবেশ করতে INSERT INTO কমান্ড ব্যবহার করা হয়। এতে আপনি নির্দিষ্ট কলামে ডেটা প্রদান করেন।
INSERT INTO users (user_id, username, email, created_at)
VALUES (uuid(), 'john_doe', 'john@example.com', toTimestamp(now()));
- uuid(): এটি একটি ইউনিক ইউজার আইডি জেনারেট করে।
- toTimestamp(now()): বর্তমান সময়ের টাইমস্ট্যাম্প প্রদান করে।
2.5 SELECT
SELECT কমান্ড ডেটা পড়তে ব্যবহৃত হয়। আপনি একাধিক কলাম বা টেবিল থেকে ডেটা নির্বাচন করতে পারেন।
SELECT * FROM users;
- এই কমান্ডটি users টেবিল থেকে সব ডেটা নির্বাচন করবে।
2.6 UPDATE
UPDATE কমান্ড একটি বিদ্যমান রেকর্ড আপডেট করতে ব্যবহৃত হয়।
UPDATE users
SET email = 'new_email@example.com'
WHERE user_id = 123e4567-e89b-12d3-a456-426614174000;
- এখানে,
user_idএর উপর ভিত্তি করে নির্দিষ্ট রেকর্ডের email কলাম আপডেট করা হচ্ছে।
2.7 DELETE
DELETE কমান্ড একটি রেকর্ড মুছতে ব্যবহৃত হয়।
DELETE FROM users
WHERE user_id = 123e4567-e89b-12d3-a456-426614174000;
- এটি একটি নির্দিষ্ট
user_idএর রেকর্ড মুছে ফেলবে।
2.8 DROP TABLE
DROP TABLE কমান্ড একটি টেবিল মুছতে ব্যবহৃত হয়।
DROP TABLE users;
- এটি
usersটেবিলটি পুরোপুরি মুছে ফেলবে।
2.9 ALTER TABLE
ALTER TABLE কমান্ড একটি টেবিলের কাঠামো পরিবর্তন করতে ব্যবহৃত হয়, যেমন কলাম যোগ বা অপসারণ করা।
ALTER TABLE users ADD phone_number text;
- এটি users টেবিলে
phone_numberনামক একটি নতুন কলাম যোগ করবে।
3. CQL এর কিছু বিশেষ বৈশিষ্ট্য
3.1 No JOIN Support
Cassandra NoSQL ডেটাবেস হওয়ায় এতে SQL-এর মতো JOIN অপারেশন সমর্থিত নয়। CQL এ JOIN অপারেশন কনফিগার করা সম্ভব নয়, এবং এটি সম্পর্কিত ডেটা মডেলিং এর জন্য সম্পূর্ণ ভিন্ন ধারণা নিয়ে আসে। সম্পর্কিত ডেটা অ্যাক্সেসের জন্য ডেনরমালাইজেশন বা Denormalization এবং Composite Keys ব্যবহার করা হয়।
3.2 No ACID Transactions
Cassandra সিস্টেমটি ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন সমর্থন করে না। এটি BASE (Basically Available, Soft state, Eventually consistent) মডেল অনুসরণ করে, যা পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করে, তবে একেবারে তাত্ক্ষণিক কনসিস্টেন্সি নয়।
3.3 Data Modeling
Cassandra-এর data modeling এর একটি বিশেষ দিক হলো Primary Key এবং Clustering Column ব্যবহার করে ডেটা শূন্য থেকে তৈরি করা হয়। এতে ডেটার পারফরম্যান্স এবং অ্যাক্সেস টাইম দ্রুত হয়।
4. CQL Best Practices
- ডেটা মডেলিং: Cassandra-এ ডেটা মডেলিং করা SQL-এ অনেকটা ভিন্ন। এখানে ডেনরমালাইজেশন এবং কম্পোজিট কী ব্যবহার করতে হয় যাতে দ্রুত ডেটা অ্যাক্সেস সম্ভব হয়।
- প্রাথমিক কী (Primary Key) নির্বাচন: ডেটার অ্যাক্সেস দ্রুত করতে প্রাথমিক কী এবং ক্লাস্টারিং কলামগুলি সঠিকভাবে নির্বাচন করুন।
- ব্যাচ অপারেশন (Batch Operations): Cassandra তে ব্যাচ অপারেশন ব্যবহার করা যেতে পারে, তবে খুব বেশি ব্যাচ অপারেশন করলে সিস্টেমের পারফরম্যান্স কমে যেতে পারে।
- Consistency Levels: Cassandra তে কনসিস্টেন্সি লেভেল কনফিগার করা যেতে পারে। আপনাকে ডেটার কনসিস্টেন্সি এবং পারফরম্যান্সের মধ্যে ব্যালান্স বজায় রাখতে হবে।
সারাংশ
Cassandra Query Language (CQL) হল Cassandra ডেটাবেসে ডেটা পরিচালনা করার জন্য একটি উচ্চ স্তরের ভাষা, যা SQL-এর মতো হলেও কিছু পরিবর্তন রয়েছে। CQL এর মাধ্যমে টেবিল তৈরি, ডেটা ইনসার্ট, আপডেট, নির্বাচন এবং মুছতে পারেন। Cassandra সিস্টেমে ডেটা মডেলিং, প্রাইমারি কী, ক্লাস্টারিং কলাম এবং ডেনরমালাইজেশন গুরুত্বপূর্ণ ভূমিকা পালন করে। Cassandra-এ No JOIN এবং ACID ট্রানজেকশন এর সমর্থন না থাকলেও এটি স্কেলেবিলিটি এবং উচ্চ পারফরম্যান্স নিশ্চিত করতে ব্যবহৃত হয়। CQL এর সাহায্যে Cassandra ডেটাবেসের সাথে কার্যকরভাবে কাজ করা সম্ভব।
Cassandra তে Data Definition Language (DDL) একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এটি ডেটাবেসের কাঠামো তৈরি বা পরিবর্তন করার জন্য ব্যবহৃত হয়। DDL দিয়ে আপনি Keyspace, Tables, Indexes এবং অন্যান্য ডেটাবেস অবজেক্ট তৈরি, পরিবর্তন এবং ডিলিট করতে পারবেন। Cassandra তে DDL এর মাধ্যমে আপনি ডেটা মডেল তৈরি, কনফিগারেশন এবং স্কিমা ডিজাইন করতে পারবেন যা আপনার ডেটাবেসের কার্যকারিতা এবং পারফরম্যান্স নিশ্চিত করে।
1. Cassandra DDL এর মূল কমান্ডস
Cassandra তে DDL কমান্ডগুলো দিয়ে আমরা Keyspace, Table, Column এবং Index তৈরি, পরিবর্তন এবং মুছে ফেলতে পারি। নিচে Cassandra DDL কমান্ডগুলোর কিছু প্রধান ব্যবহার দেওয়া হলো:
1.1 Keyspace তৈরি করা
Keyspace হলো Cassandra ডেটাবেসের সবচেয়ে বড় ইউনিট, যেখানে টেবিলগুলো সংরক্ষিত থাকে। Keyspace তৈরি করার জন্য CREATE KEYSPACE কমান্ড ব্যবহার করা হয়।
CREATE KEYSPACE <keyspace_name>
WITH replication = {'class': '<replication_strategy>', 'replication_factor': <factor>};
এখানে replication_strategy হলো ডেটার কপি করার কৌশল এবং replication_factor হলো কপির সংখ্যা। Cassandra তে সাধারণত দুই ধরনের রিপ্লিকেশন কৌশল ব্যবহার হয়: SimpleStrategy (একটি ডেটা সেন্টারে ডেটা সংরক্ষণ) এবং NetworkTopologyStrategy (মাল্টি-ডেটা সেন্টারের মধ্যে ডেটা সংরক্ষণ)।
উদাহরণ:
CREATE KEYSPACE IF NOT EXISTS ecommerce
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
এটি ecommerce নামে একটি Keyspace তৈরি করবে, যেখানে ডেটার ৩টি কপি তিনটি আলাদা নোডে রাখা হবে।
1.2 Table তৈরি করা
Cassandra তে Table তৈরি করার জন্য CREATE TABLE কমান্ড ব্যবহার করা হয়। একটি টেবিলের মধ্যে কলাম এবং ডেটা টাইপ নির্ধারণ করা হয়, এবং সঠিক Primary Key ও Clustering Key উল্লেখ করা হয়।
CREATE TABLE <keyspace_name>.<table_name> (
<column1> <datatype>,
<column2> <datatype>,
...
PRIMARY KEY (<partition_key>, <clustering_key>)
);
উদাহরণ:
CREATE TABLE IF NOT EXISTS ecommerce.users (
user_id UUID PRIMARY KEY,
username TEXT,
email TEXT,
age INT
);
এটি ecommerce Keyspace-এ users নামে একটি টেবিল তৈরি করবে, যেখানে user_id হলো Primary Key এবং বাকি কলামগুলোতে গ্রাহক সম্পর্কিত তথ্য থাকবে।
1.3 Column পরিবর্তন করা
Cassandra তে ALTER TABLE কমান্ড দিয়ে আপনি টেবিলের কলামগুলোর পরিবর্তন করতে পারেন, যেমন নতুন কলাম যোগ করা, কলামের নাম পরিবর্তন করা বা কলাম ডিলিট করা।
New Column Add:
ALTER TABLE <keyspace_name>.<table_name> ADD <column_name> <datatype>;উদাহরণ:
ALTER TABLE ecommerce.users ADD phone_number TEXT;এটি users টেবিলে একটি নতুন
phone_numberকলাম যোগ করবে।Rename Column:
ALTER TABLE <keyspace_name>.<table_name> RENAME <old_column_name> TO <new_column_name>;উদাহরণ:
ALTER TABLE ecommerce.users RENAME email TO user_email;এটি
emailকলামটির নাম পরিবর্তন করেuser_emailকরবে।Drop Column:
ALTER TABLE <keyspace_name>.<table_name> DROP <column_name>;উদাহরণ:
ALTER TABLE ecommerce.users DROP age;এটি
usersটেবিল থেকেageকলামটি মুছে ফেলবে।
1.4 Index তৈরি করা
Cassandra তে Index তৈরি করার জন্য CREATE INDEX কমান্ড ব্যবহার করা হয়। এটি ডেটার অনুসন্ধান এবং অ্যাক্সেসের গতি উন্নত করে। সাধারণত, কোনো কলাম বা ডেটা ফিল্ডের উপর ইনডেক্স তৈরি করা হয়, যার মাধ্যমে সিলেক্ট অপারেশন দ্রুত করা যায়।
CREATE INDEX <index_name> ON <keyspace_name>.<table_name> (<column_name>);
উদাহরণ:
CREATE INDEX ON ecommerce.users (email);
এটি users টেবিলের email কলামের উপর একটি ইনডেক্স তৈরি করবে, যাতে ওই কলামের মাধ্যমে দ্রুত অনুসন্ধান করা যায়।
1.5 Table বা Keyspace মুছে ফেলা
Cassandra তে DROP কমান্ড ব্যবহার করে একটি Keyspace বা Table মুছে ফেলা যায়।
Drop Table:
DROP TABLE <keyspace_name>.<table_name>;উদাহরণ:
DROP TABLE ecommerce.users;এটি users টেবিল মুছে ফেলবে।
Drop Keyspace:
DROP KEYSPACE <keyspace_name>;উদাহরণ:
DROP KEYSPACE ecommerce;এটি ecommerce Keyspace মুছে ফেলবে।
2. DDL কমান্ড এর ব্যবহার
Cassandra-তে DDL কমান্ডের মাধ্যমে ডেটাবেস কাঠামো তৈরি, পরিবর্তন এবং মুছে ফেলা হয়, যা একটি schema বা structure তৈরি করে এবং ডেটার স্টোরেজ ও অ্যাক্সেস নিশ্চিত করে।
- CREATE KEYSPACE: একটি নতুন Keyspace তৈরি করার জন্য ব্যবহৃত হয়।
- CREATE TABLE: একটি নতুন টেবিল তৈরি করার জন্য ব্যবহৃত হয়।
- ALTER TABLE: টেবিলের কলাম বা কাঠামো পরিবর্তন করার জন্য ব্যবহৃত হয়।
- DROP: টেবিল বা Keyspace মুছে ফেলার জন্য ব্যবহৃত হয়।
- CREATE INDEX: টেবিলের কোনো কলামে ইনডেক্স তৈরি করার জন্য ব্যবহৃত হয়।
3. Cassandra DDL এর Limitations
Cassandra-তে DDL কমান্ডের কিছু সীমাবদ্ধতা রয়েছে, যা রিলেশনাল ডেটাবেসে পাওয়া যায় না:
- JOIN অপারেশন নেই: Cassandra তে JOIN অপারেশন সমর্থিত নয়, তাই আপনি একই টাইপের ডেটা একাধিক টেবিলের মধ্যে সংযুক্ত করতে পারবেন না।
- পরিবর্তন সীমাবদ্ধতা: Cassandra তে ডেটাবেস কাঠামো বা schema পরিবর্তন করা তুলনামূলকভাবে কষ্টসাধ্য হতে পারে, যেমন টেবিলের কলাম পরিবর্তন করার সময় অ্যাপ্লিকেশনে সমস্যা সৃষ্টি হতে পারে।
- ACID সমর্থন নেই: Cassandra তে ACID ট্রানজেকশন সমর্থিত নয়, বরং এটি BASE মডেল ব্যবহার করে, যেখানে eventual consistency ব্যবহৃত হয়।
সারাংশ
Data Definition Language (DDL) Cassandra তে ডেটাবেস কাঠামো তৈরি, পরিবর্তন এবং মুছে ফেলার জন্য ব্যবহৃত হয়। DDL কমান্ডের মাধ্যমে Keyspace, Table, Index তৈরি করা এবং মুছে ফেলা হয়, যা ডেটাবেস সিস্টেমের কার্যকারিতা এবং স্কেলেবিলিটি নিশ্চিত করে। Cassandra তে DDL এর মাধ্যমে ডেটার কাঠামো পরিবর্তন করা, ডেটা মডেল ডিজাইন করা এবং ডিস্ট্রিবিউটেড সিস্টেমে দ্রুত অ্যাক্সেস ও পারফরম্যান্স নিশ্চিত করা সম্ভব।
Cassandra Query Language (CQL) হল Apache Cassandra ডেটাবেসের সাথে যোগাযোগ এবং ডেটা পরিচালনা করার জন্য ব্যবহৃত একটি ভাষা, যা SQL-এর মতো দেখতে হলেও কিছু পার্থক্য রয়েছে। Data Manipulation Language (DML) Cassandra তে ডেটা নির্বাচন, যোগ করা, আপডেট করা এবং মুছে ফেলার জন্য ব্যবহৃত কমান্ডগুলির একটি সেট। CQL DML কমান্ডের মাধ্যমে Cassandra ডেটাবেসে ডেটা পরিচালনা করা যায়।
CQL-এর DML কমান্ডগুলো সাধারণত INSERT, SELECT, UPDATE, এবং DELETE হিসেবে ব্যবহৃত হয়। এই কমান্ডগুলির মাধ্যমে ডেটা ইনসার্ট করা, পরিবর্তন করা, নির্বাচন করা এবং মুছে ফেলা যায়।
1. INSERT (ডেটা ইনসার্ট করা)
INSERT কমান্ড ব্যবহার করে Cassandra তে ডেটা যোগ করা হয়। Cassandra ডেটাবেসে একটি রেকর্ড ইনসার্ট করার জন্য INSERT INTO কমান্ড ব্যবহৃত হয়। CQL-এ, INSERT কমান্ড সাধারণত টেবিলের primary key এবং অন্যান্য কলামগুলোর জন্য মান প্রদান করে।
Syntax:
INSERT INTO <keyspace_name>.<table_name> (<column1>, <column2>, ...)
VALUES (<value1>, <value2>, ...);
INSERT উদাহরণ:
INSERT INTO ecommerce.users (user_id, username, email, age)
VALUES (uuid(), 'john_doe', 'john.doe@example.com', 28);
এটি users টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবে, যেখানে user_id একটি নতুন UUID হবে, এবং অন্যান্য ফিল্ডে নির্দিষ্ট মান ইনসার্ট করা হবে।
বিস্তারিত উদাহরণ:
ধরা যাক, orders টেবিলের মধ্যে একটি নতুন অর্ডার ইনসার্ট করা হচ্ছে:
INSERT INTO ecommerce.orders (order_id, user_id, product_id, quantity, order_date)
VALUES (uuid(), '123e4567-e89b-12d3-a456-426614174000', '456e7890-b12c-34f5-d678-987654321abc', 2, '2024-12-10 10:30:00');
এটি orders টেবিলে একটি নতুন অর্ডার ইনসার্ট করবে।
2. SELECT (ডেটা নির্বাচন করা)
SELECT কমান্ড CQL তে ডেটা নির্বাচন বা রিড করার জন্য ব্যবহৃত হয়। আপনি SELECT কমান্ডের মাধ্যমে Cassandra টেবিল থেকে এক বা একাধিক কলামের মান নির্বাচন করতে পারেন।
Syntax:
SELECT <column1>, <column2>, ... FROM <keyspace_name>.<table_name> WHERE <condition>;
SELECT উদাহরণ:
SELECT * FROM ecommerce.users WHERE age > 25;
এটি users টেবিল থেকে এমন সব রেকর্ড নির্বাচন করবে যাদের বয়স ২৫ এর বেশি।
SELECT এর বিকল্প উদাহরণ:
SELECT username, email FROM ecommerce.users WHERE user_id = '123e4567-e89b-12d3-a456-426614174000';
এটি users টেবিল থেকে নির্দিষ্ট user_id এর জন্য username এবং email কলাম নির্বাচিত করবে।
3. UPDATE (ডেটা আপডেট করা)
UPDATE কমান্ড ব্যবহার করে Cassandra তে ইতিমধ্যেই সঞ্চিত ডেটা আপডেট করা হয়। CQL-এ UPDATE কমান্ডটি একটি রেকর্ডের কলামের মান পরিবর্তন করার জন্য ব্যবহৃত হয়। Cassandra-তে, UPDATE কমান্ড Primary Key এর উপর ভিত্তি করে একটি নির্দিষ্ট রেকর্ড খুঁজে পায় এবং তারপর শুধুমাত্র সংশ্লিষ্ট কলামগুলি আপডেট করে।
Syntax:
UPDATE <keyspace_name>.<table_name>
SET <column1> = <value1>, <column2> = <value2>, ...
WHERE <condition>;
UPDATE উদাহরণ:
UPDATE ecommerce.users SET age = 29 WHERE user_id = '123e4567-e89b-12d3-a456-426614174000';
এটি users টেবিলের user_id অনুযায়ী ব্যবহারকারীর বয়স 29 এ আপডেট করবে।
UPDATE এর বিকল্প উদাহরণ:
UPDATE ecommerce.orders SET quantity = 3 WHERE order_id = '12345';
এটি orders টেবিলে order_id অনুযায়ী পণ্যের পরিমাণ পরিবর্তন করবে।
4. DELETE (ডেটা মুছে ফেলা)
DELETE কমান্ড ব্যবহার করে Cassandra তে ডেটা মুছে ফেলা হয়। DELETE কমান্ডের মাধ্যমে একটি নির্দিষ্ট রেকর্ড বা কলাম মুছে ফেলা সম্ভব। CQL-এ, DELETE কমান্ড Primary Key বা Clustering Key এর উপর ভিত্তি করে ডেটার মুছে ফেলার অপারেশন চালানো হয়।
Syntax:
DELETE FROM <keyspace_name>.<table_name> WHERE <condition>;
DELETE উদাহরণ:
DELETE FROM ecommerce.users WHERE user_id = '123e4567-e89b-12d3-a456-426614174000';
এটি users টেবিল থেকে নির্দিষ্ট user_id এর রেকর্ড মুছে ফেলবে।
DELETE এর বিকল্প উদাহরণ:
DELETE email FROM ecommerce.users WHERE user_id = '123e4567-e89b-12d3-a456-426614174000';
এটি users টেবিল থেকে নির্দিষ্ট user_id এর email কলাম মুছে ফেলবে।
5. BATCH (একাধিক অপারেশন একত্রে চালানো)
Cassandra তে একাধিক INSERT, UPDATE, অথবা DELETE অপারেশন একসাথে একক batch কমান্ডের মাধ্যমে একত্রে চালানো যেতে পারে। এটি ডেটাবেসে একাধিক কাজ একযোগে কার্যকর করতে সহায়তা করে এবং সিস্টেমের পারফরম্যান্স উন্নত করে।
Syntax:
BEGIN BATCH
<operation1>;
<operation2>;
...
APPLY BATCH;
BATCH উদাহরণ:
BEGIN BATCH
INSERT INTO ecommerce.users (user_id, username, email, age) VALUES (uuid(), 'alice_smith', 'alice.smith@example.com', 24);
INSERT INTO ecommerce.orders (order_id, user_id, product_id, quantity, order_date) VALUES (uuid(), '123e4567-e89b-12d3-a456-426614174000', '456e7890-b12c-34f5-d678-987654321abc', 1, '2024-12-12 09:00:00');
APPLY BATCH;
এই কমান্ডটি একসাথে দুটি ইনসার্ট অপারেশন চালাবে।
6. CQL DML এর সীমাবদ্ধতা
- ACID ট্রানজেকশন সমর্থন না: Cassandra তে ACID ট্রানজেকশন নেই, তাই multi-table transaction বা join অপারেশন সমর্থিত নয়।
- লিমিটেড JOIN: Cassandra তে JOIN অপারেশন ব্যবহার করা যাবে না, কারণ এটি একটি NoSQL ডেটাবেস এবং ডেটা সাধারণত ডেনর্মালাইজড আকারে থাকে।
সারাংশ
Cassandra Data Manipulation Language (DML) একটি গুরুত্বপূর্ণ অংশ যা Cassandra ডেটাবেসের মাধ্যমে ডেটা পরিচালনা করতে ব্যবহৃত হয়। CQL-এর DML কমান্ডগুলো, যেমন INSERT, SELECT, UPDATE, এবং DELETE, Cassandra ডেটাবেসে ডেটা ইনসার্ট, নির্বাচন, আপডেট এবং মুছে ফেলতে ব্যবহৃত হয়। Cassandra-তে DML কমান্ডগুলি ব্যবহারের মাধ্যমে ডেটা ম্যানিপুলেশন সহজ এবং দ্রুত করা যায়, তবে এতে কিছু সীমাবদ্ধতা যেমন ACID ট্রানজেকশন এর অভাব এবং JOIN অপারেশন নিষিদ্ধ রয়েছে।
CQL (Cassandra Query Language) হলো Apache Cassandra ডেটাবেসে ডেটা পরিচালনা করার জন্য ব্যবহৃত একটি উচ্চ স্তরের কুয়েরি ভাষা। CQL মূলত SQL এর মতো দেখতে হলেও, এটি Cassandra এর ডিস্ট্রিবিউটেড আর্কিটেকচারের জন্য বিশেষভাবে ডিজাইন করা হয়েছে। CQL ব্যবহার করে ডেটা টেবিল থেকে SELECT, INSERT, UPDATE, এবং DELETE করা যায়।
এখানে আমরা CQL এর মাধ্যমে ডেটা কুয়েরি করার কিছু প্রধান কমান্ড এবং তাদের ব্যবহার দেখব।
1. SELECT (ডেটা নির্বাচন করা)
SELECT কমান্ড ব্যবহার করে Cassandra টেবিল থেকে ডেটা নির্বাচন করা হয়। CQL-এ SELECT কুয়েরি ব্যবহার করে আমরা টেবিলের কলামগুলির মান বের করতে পারি।
Syntax:
SELECT <columns> FROM <keyspace_name>.<table_name> WHERE <conditions>;
- : আপনি যে কলামগুলো দেখতে চান, সেগুলি উল্লেখ করতে পারেন। যদি সমস্ত কলাম দেখতে চান, তবে
*ব্যবহার করুন। - <keyspace_name>: Keyspace এর নাম।
- <table_name>: টেবিলের নাম।
- : WHERE ক্লজ ব্যবহার করে আপনি কন্ডিশন নির্ধারণ করতে পারেন।
উদাহরণ:
SELECT * FROM ecommerce.users WHERE age > 25;
এটি users টেবিল থেকে সমস্ত তথ্য নির্বাচন করবে যেখানে age ২৫ এর বেশি।
উদাহরণ 2: নির্দিষ্ট কলাম নির্বাচন করা:
SELECT username, email FROM ecommerce.users WHERE user_id = 12345;
এটি users টেবিল থেকে user_id = 12345 এর জন্য username এবং email কলামগুলি নির্বাচন করবে।
2. INSERT (ডেটা ইনসার্ট করা)
INSERT INTO কমান্ড ব্যবহার করে Cassandra টেবিলে নতুন ডেটা যোগ করা হয়। Cassandra তে ডেটা ইনসার্ট করার সময়, প্রতিটি কলামের মান সঠিকভাবে প্রদান করা হয়।
Syntax:
INSERT INTO <keyspace_name>.<table_name> (<columns>) VALUES (<values>);
- : আপনি যে কলামগুলিতে ডেটা ইনসার্ট করতে চান।
- : সেই কলামগুলির জন্য মান।
উদাহরণ:
INSERT INTO ecommerce.users (user_id, username, email, age)
VALUES (uuid(), 'john_doe', 'john.doe@example.com', 30);
এটি users টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবে, যেখানে user_id একটি নতুন UUID হবে, এবং অন্যান্য কলামগুলিতে যথাক্রমে username, email, এবং age দেওয়া হবে।
3. UPDATE (ডেটা আপডেট করা)
UPDATE কমান্ড ব্যবহার করে Cassandra-তে বিদ্যমান রেকর্ডের ডেটা আপডেট করা হয়। Cassandra তে UPDATE সাধারণত PRIMARY KEY এর ভিত্তিতে হয়।
Syntax:
UPDATE <keyspace_name>.<table_name> SET <column1> = <value1>, <column2> = <value2> WHERE <primary_key_condition>;
- <primary_key_condition>: এটি PRIMARY KEY এর ভিত্তিতে ডেটা নির্ধারণ করে।
উদাহরণ:
UPDATE ecommerce.users SET age = 31 WHERE user_id = 12345;
এটি users টেবিলে user_id = 12345 এর জন্য age কলামের মান ৩১ এ আপডেট করবে।
4. DELETE (ডেটা মুছে ফেলা)
DELETE কমান্ড ব্যবহার করে Cassandra-তে কোনো রেকর্ড মুছে ফেলা হয়। Cassandra তে DELETE করার সময় আপনাকে অবশ্যই PRIMARY KEY নির্ধারণ করতে হবে, কারণ এটি ডেটা মুছতে সঠিক রো চিহ্নিত করতে সহায়তা করে।
Syntax:
DELETE FROM <keyspace_name>.<table_name> WHERE <primary_key_condition>;
উদাহরণ:
DELETE FROM ecommerce.users WHERE user_id = 12345;
এটি users টেবিল থেকে user_id = 12345 এর জন্য রেকর্ড মুছে ফেলবে।
5. CQL ব্যবহার করার সময় কিছু গুরুত্বপূর্ণ বিষয়
- WHERE ক্লজ: WHERE ক্লজ ব্যবহার করে আপনি ডেটা অনুসন্ধান বা ফিল্টার করতে পারেন। তবে, Cassandra তে শুধুমাত্র Partition Key এর উপর ভিত্তি করে WHERE ক্লজ ব্যবহার করা যেতে পারে। যদি আপনি Clustering Key বা অন্যান্য কলামের উপর ভিত্তি করে ফিল্টার করতে চান, তবে তা Secondary Index ব্যবহার করে করতে হবে।
- Primary Key: Cassandra-তে ডেটা Primary Key ব্যবহার করে পার্টিশন করা হয়। আপনি যে কলামটিকে Primary Key হিসেবে নির্বাচন করেন, সেটি ক্লাস্টারের মধ্যে ডেটাকে পৃথক করবে।
- Batch Operations: Cassandra তে একাধিক INSERT, UPDATE, বা DELETE কমান্ড একসাথে চালানোর জন্য BATCH কমান্ড ব্যবহার করা হয়।
6. Batch Operation উদাহরণ
BATCH কমান্ড ব্যবহার করে একাধিক ডেটা একসাথে ইনসার্ট বা আপডেট করা যায়। এটি ডেটার দ্রুত আপডেট নিশ্চিত করতে সহায়তা করে।
উদাহরণ:
BEGIN BATCH
INSERT INTO ecommerce.users (user_id, username, email, age) VALUES (uuid(), 'alice_smith', 'alice@example.com', 25);
INSERT INTO ecommerce.users (user_id, username, email, age) VALUES (uuid(), 'bob_jones', 'bob@example.com', 29);
APPLY BATCH;
এটি একসাথে দুটি ইনসার্ট অপারেশন করবে এবং দুটি রেকর্ড একসাথে টেবিলে ইনসার্ট হবে।
সারাংশ
CQL (Cassandra Query Language) Cassandra ডেটাবেসের মধ্যে ডেটা পরিচালনার জন্য ব্যবহৃত একটি শক্তিশালী ভাষা। SELECT, INSERT, UPDATE, এবং DELETE কমান্ডের মাধ্যমে Cassandra তে ডেটা নির্বাচন, ইনসার্ট, আপডেট, এবং ডিলিট করা যায়। CQL ব্যবহার করে ডেটাবেসের বিভিন্ন কার্যক্রম পরিচালনা করা সম্ভব, যা Cassandra এর স্কেলেবিলিটি এবং উচ্চ পারফরম্যান্স সুবিধা নিশ্চিত করে।
Read more