Apache Cassandra হলো একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস সিস্টেম যা ডেটার স্কেলেবিলিটি এবং উচ্চ পারফরম্যান্স নিশ্চিত করতে ব্যবহৃত হয়। Cassandra ডেটাবেসের Data Model এবং Schema Design একটি বিশেষ ধরনের কৌশল অনুসরণ করে, কারণ Cassandra তে রিলেশনাল ডেটাবেসের মতো JOIN বা ACID ট্রানজেকশন নেই। এর পরিবর্তে, Cassandra এর ডেটা মডেল তৈরি করার সময় কিছু বিশেষ নীতির ভিত্তিতে ডেটাকে সংগঠিত এবং প্রসেস করা হয়।
1. Cassandra Data Model
Cassandra এর ডেটা মডেল রিলেশনাল ডেটাবেস থেকে আলাদা, কারণ এতে টেবিল, কলাম, রো এবং কী-ভ্যালু স্টোরেজ ব্যবহার করা হয়, যা ডিস্ট্রিবিউটেড এবং স্কেলেবল ডেটা সঞ্চয়ের জন্য উপযুক্ত। Cassandra-তে সাধারণত ডেটা মডেলটি Column Families এর মাধ্যমে তৈরি করা হয়, যা রিলেশনাল ডেটাবেসের টেবিলের সমতুল্য। তবে, এই টেবিলগুলো বেশ কিছু বিশেষ বৈশিষ্ট্য ধারণ করে, যা Cassandra এর জন্য কার্যকরী হয়।
Cassandra Data Model Components:
- Keyspace:
- Keyspace হলো Cassandra এর সবচেয়ে বড় স্টোরেজ ইউনিট, যা ডেটাবেসের সমতুল্য। এটি নির্ধারণ করে ডেটা কিভাবে রিপ্লিকেট হবে এবং কিভাবে বিভিন্ন নোডের মধ্যে ভাগ হবে।
- Replication Factor (RF): Keyspace তৈরির সময় Replication Factor নির্ধারণ করা হয়, যা নির্ধারণ করে কতটি কপি ডেটার হবে এবং ডেটার কপি কত নোডে থাকবে।
- Table (Column Family):
- Cassandra তে Table বা Column Family হলো ডেটা সংরক্ষণের জন্য ব্যবহৃত একক ইউনিট। এটি রিলেশনাল ডেটাবেসের টেবিলের মতো কাজ করে, তবে এতে columns (কলাম) একেবারে নমনীয় হয়, অর্থাৎ, প্রতিটি রোতে কলামগুলো ভিন্ন হতে পারে।
- টেবিলের প্রতিটি রো একটি Primary Key দ্বারা শনাক্ত করা হয়, যা ডেটাকে নির্দিষ্ট একটি নোডে সঞ্চয় করতে সহায়তা করে।
- Column:
- Cassandra তে একটি কলাম একটি কী এবং একটি মানের জোড়া (key-value pair) হিসেবে সংরক্ষিত থাকে। প্রতিটি কলামে একটি timestamp থাকে, যা জানায় কখন ডেটাটি সর্বশেষ আপডেট হয়েছিল।
- Row:
- একটি রো হল ডেটার একটি ইউনিট, যা Primary Key দ্বারা শনাক্ত করা হয় এবং এর মধ্যে একাধিক কলাম থাকতে পারে।
2. Cassandra Schema Design Principles
Cassandra তে স্কিমা ডিজাইন করার সময় কিছু বিশেষ নীতি অনুসরণ করতে হয়। এটি ডেটা মডেলের কার্যকারিতা এবং পারফরম্যান্স নিশ্চিত করতে সাহায্য করে।
Designing for Query Patterns:
Cassandra তে স্কিমা ডিজাইন করার সময় query patterns বিবেচনা করা খুব গুরুত্বপূর্ণ। Cassandra সিস্টেমে JOIN বা TRANSACTIONS নেই, তাই স্কিমা ডিজাইন করতে হবে যাতে একক কুয়েরি বা রিড অপারেশনেই সকল প্রাসঙ্গিক ডেটা পাওয়া যায়।
Best Practices:
- Denormalization: Cassandra তে denormalization করতে হয়, অর্থাৎ ডেটাকে একাধিক টেবিল বা কলামে ভাগ করা হয়, যাতে একটি রিড অপারেশনের মাধ্যমে সব ডেটা পাওয়া যায়।
- Composite Keys: একাধিক কলামকে একত্রে composite key হিসেবে ব্যবহার করা যায়, যাতে একাধিক প্যারামিটার দিয়ে ডেটা নির্ধারণ করা যায়।
- Query-driven design: Cassandra তে টেবিল ডিজাইন করার সময়, টেবিলের queries কে বিবেচনায় রেখে ডিজাইন করা উচিত। এর ফলে আপনি যত বেশি প্রয়োজনীয় কুয়েরি করতে চান, তত বেশি ডিজাইন করতে হবে।
3. Example of Cassandra Data Model
ধরা যাক, একটি E-commerce সাইটে পণ্যের ডেটা সংরক্ষণ করতে চাই। এখানে একটি প্রাথমিক টেবিল ডিজাইন দেখানো হলো:
Step 1: Define the Keyspace
CREATE KEYSPACE ecommerce
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
এখানে ecommerce keyspace তৈরি করা হয়েছে, এবং replication_factor ৩ সেট করা হয়েছে, যাতে ডেটার তিনটি কপি তৈরি হয়।
Step 2: Define the Table
CREATE TABLE ecommerce.products (
product_id UUID PRIMARY KEY,
name text,
price decimal,
category text,
stock_quantity int
);
এখানে products টেবিল তৈরি করা হয়েছে যেখানে product_id হলো PRIMARY KEY, যা প্রতিটি পণ্যের জন্য ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করবে।
- product_id: ইউনিক আইডি যা পণ্যের জন্য ব্যবহৃত হবে।
- name: পণ্যের নাম।
- price: পণ্যের দাম।
- category: পণ্যের শ্রেণী।
- stock_quantity: পণ্যের স্টক পরিমাণ।
Step 3: Inserting Data
INSERT INTO ecommerce.products (product_id, name, price, category, stock_quantity)
VALUES (uuid(), 'Laptop', 1200.50, 'Electronics', 50);
এখানে একটি পণ্য ডেটা products টেবিলে ইনসার্ট করা হয়েছে।
4. Cassandra Data Model Design Best Practices
Cassandra ডেটা মডেল ডিজাইন করার জন্য কিছু গুরুত্বপূর্ণ best practices রয়েছে:
- Primary Key Design:
- Cassandra তে Primary Key একটি গুরুত্বপূর্ণ বিষয়। এটি ডেটাকে সঠিকভাবে পার্টিশন করে এবং নির্ধারণ করে যে ডেটা কোথায় সংরক্ষিত হবে।
- Partition Key এবং Clustering Key ব্যবহার করে ডেটা বিভক্ত করা এবং সঠিকভাবে সজ্জিত করা হয়।
- Avoiding Joins:
- Cassandra তে JOIN অপারেশন নেই, তাই ডেটা একাধিক টেবিলে বিভক্ত করতে হবে এবং সেগুলিকে ডেনর্মালাইজ করে একক কুয়েরি দ্বারা একসাথে প্রাপ্ত করা যাবে।
- Denormalization:
- রিলেশনাল ডেটাবেসের মতো, Cassandra তে normalized data ব্যবহৃত হয় না। এর পরিবর্তে ডেটাকে ডেনর্মালাইজ করে একাধিক কপি তৈরি করতে হবে যাতে দ্রুত ডেটা অ্যাক্সেস করা যায়।
- Time-series Data:
- যদি আপনি টাইম-সিরিজ ডেটা স্টোর করতে চান, তাহলে composite keys ব্যবহার করতে পারেন, যেখানে টাইমস্ট্যাম্প সহ একটি Primary Key ব্যবহার করা হবে।
- Write-heavy Workloads:
- Cassandra অধিকাংশ ক্ষেত্রে write-heavy workloads সমর্থন করে, তাই বেশি লেখার জন্য এটি উপযুক্ত, বিশেষ করে যখন ডেটার আপডেট করা প্রয়োজন।
সারাংশ
Cassandra Data Model এবং Schema Design বেশ কিছু গুরুত্বপূর্ণ নীতির উপর ভিত্তি করে কাজ করে। Cassandra-র ডেটা মডেলটি column family এবং primary key ব্যবহারের মাধ্যমে তৈরি হয় এবং রিলেশনাল ডেটাবেসের তুলনায় ডেনর্মালাইজেশন এবং ডিস্ট্রিবিউটেড স্কেলিং প্রক্রিয়া অনুসরণ করে। Cassandra তে denormalization, query-driven design, এবং composite keys ব্যবহার করে একটি কার্যকরী এবং স্কেলেবল ডেটা মডেল ডিজাইন করা সম্ভব হয়, যা উচ্চ পরিমাণ ডেটা এবং ট্রাফিক পরিচালনা করতে সক্ষম।
Cassandra Data Model একটি ডিস্ট্রিবিউটেড এবং স্কেলেবল ডেটা মডেল, যা NoSQL ডেটাবেসের মধ্যে অন্যতম। Cassandra-এর ডেটা মডেল ডিজাইন করা হয়েছে এমনভাবে, যাতে এটি বৃহৎ পরিমাণ ডেটা খুব দ্রুত এবং কার্যকরীভাবে প্রক্রিয়া এবং সংরক্ষণ করতে পারে। Cassandra এর ডেটা মডেল বিশেষভাবে পারফরম্যান্স, স্কেলেবিলিটি এবং ডেটার অ্যাভেইলেবিলিটি নিশ্চিত করতে কাস্টমাইজড করা হয়েছে। এটি রিলেশনাল ডেটাবেস (RDBMS) থেকে ভিন্ন, যেখানে ডেটা টেবিলের মধ্যে সম্পর্কযুক্ত থাকে। Cassandra ডেটা মডেলে ডেটা স্টোরেজ এবং অ্যাক্সেস আরও নমনীয় এবং উচ্চ পারফরম্যান্সের জন্য অপটিমাইজড।
1. Cassandra Data Model এর মৌলিক উপাদান
Cassandra-এর ডেটা মডেল সাধারণত নিচের উপাদানগুলোর সমন্বয়ে গঠিত:
1.1 Keyspace
Keyspace Cassandra ডেটাবেসের সমতুল্য একটি ধারণা, যা একটি logical container হিসেবে কাজ করে এবং এর মধ্যে অন্যান্য ডেটা structures যেমন tables এবং indexes থাকে। Keyspace সাধারণত একটি অ্যাপ্লিকেশন বা প্রকল্পের জন্য ডেটা স্টোর করার জন্য ব্যবহার করা হয়।
- Keyspace হলো Cassandra ক্লাস্টারের মধ্যে ডেটা গ্রুপ করার প্রথম স্তর। এতে রেপ্লিকেশন কৌশল এবং ডেটা বিতরণের পদ্ধতি নির্ধারণ করা হয়।
- Replication: Cassandra-তে ডেটার কপি একাধিক নোডে রাখা হয়, যাতে কোনো নোড ডাউন হলে অন্য নোড থেকে ডেটা পাওয়া যায়।
Keyspace উদাহরণ:
CREATE KEYSPACE my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
এখানে, my_keyspace একটি কাস্টম কিভাবে রেপ্লিকেশন কৌশল নির্ধারণ করেছে।
1.2 Table
Cassandra এর ডেটা টেবিলের মধ্যে সংরক্ষিত হয়। তবে এটি relational database tables এর মতো স্ট্রাকচারাল নয়, বরং এটি wide-column store হিসেবে কাজ করে। Cassandra টেবিলগুলো row-based এবং column-based ডেটা স্টোরেজ মেথড ব্যবহার করে।
- Column families হল Cassandra-তে একটি ডেটা স্ট্রাকচার যা মূলত একটি টেবিলের মতো কাজ করে।
- Row: প্রতিটি রোতে একটি ইউনিক কী থাকে এবং সেই কী-এর সাথে সম্পর্কিত কলাম এবং মান থাকে।
- Columns: একাধিক কলাম থাকতে পারে, এবং প্রতিটি কলামে একটি কী এবং মান থাকে।
- Primary Key: এটি ডেটার একক রেকর্ড সনাক্ত করার জন্য ব্যবহৃত হয়। এটি একটি কম্বিনেশন হতে পারে, যেখানে partition key এবং clustering key অন্তর্ভুক্ত থাকে।
Table উদাহরণ:
CREATE TABLE users (
user_id UUID PRIMARY KEY,
first_name TEXT,
last_name TEXT,
email TEXT
);
এখানে, users টেবিলে user_id প্রধান কী হিসেবে কাজ করবে।
1.3 Row (রো)
Cassandra-তে ডেটা রো আকারে সংরক্ষিত থাকে, এবং প্রতিটি রো একটি ইউনিক আইডেন্টিফায়ার হিসেবে একটি primary key ব্যবহার করে। প্রতিটি রো একটি বা একাধিক কলাম ধারণ করতে পারে, এবং সেই কলামগুলো পরিবর্তিত হতে পারে (বিভিন্ন রোতে বিভিন্ন কলাম থাকতে পারে)।
- Partition Key: এটি রোটি কোন নোডে সংরক্ষণ করা হবে তা নির্ধারণ করে।
- Clustering Key: এটি রোকে টেবিলের মধ্যে সঠিকভাবে সাজানোর জন্য ব্যবহৃত হয়।
1.4 Column (কলাম)
Cassandra টেবিলের মধ্যে Column ডেটা সংরক্ষণের একটি ইউনিট। প্রত্যেকটি কলাম একটি column name, value, এবং timestamp ধারণ করে। একটি রোতে যেকোনো সংখ্যা কলাম থাকতে পারে এবং কলামের সংখ্যা পরিবর্তিত হতে পারে বিভিন্ন রোতে।
- Column Family: এটি একাধিক কলাম ধারণ করে এবং প্রতিটি কলাম একটি কী-value পেয়ার হিসেবে কাজ করে।
- Wide-column: Cassandra-তে রোয়ের মধ্যে বিভিন্ন ধরনের কলাম থাকতে পারে, এবং একেক রোতে ভিন্ন কলাম থাকতে পারে।
Column উদাহরণ:
CREATE TABLE products (
product_id UUID PRIMARY KEY,
product_name TEXT,
price DECIMAL,
description TEXT
);
1.5 Primary Key
Cassandra-তে Primary Key হলো একটি একক বা কম্বিনেশন কী যা রো সনাক্ত করতে ব্যবহৃত হয়। একটি primary key দুটি অংশে বিভক্ত হতে পারে:
- Partition Key: এটি রোটি কোন নোডে প্রক্রিয়া করতে হবে তা নির্ধারণ করে। এটি সিস্টেমের স্কেলেবিলিটি এবং পারফরম্যান্স উন্নত করতে সাহায্য করে।
- Clustering Key: এটি রো গুলোর মধ্যে অর্ডার বা সাজানো অবস্থান নির্ধারণ করে।
Primary Key উদাহরণ:
CREATE TABLE orders (
order_id UUID,
customer_id UUID,
order_date TIMESTAMP,
PRIMARY KEY (customer_id, order_date)
);
এখানে customer_id পার্টিশন কী হিসেবে এবং order_date ক্লাস্টারিং কী হিসেবে ব্যবহৃত হয়েছে।
2. Cassandra এর Data Model-এর কাজের ধরন
2.1 Read and Write Path
Cassandra-তে ডেটা লেখার এবং পড়ার প্রক্রিয়া অনেক দ্রুত। ডেটা প্রথমে commit log-এ লেখা হয়, তারপর memtable-এ চলে যায়, এবং শেষে ডেটা SSTable-এ সঞ্চিত হয়। এর ফলে ডেটা কখনো হারানো বা দুর্বল হয় না।
- Write Path: ডেটা প্রথমে commit log-এ লেখা হয়, এরপর memtable-এ রাখার পর, পরে SSTable ফর্ম্যাটে ডিস্কে সঞ্চিত হয়।
- Read Path: ডেটা memtable এবং SSTable থেকে একত্রিত হয় এবং এটি row বা column আকারে অ্যাক্সেস করা যায়।
2.2 Scalability and Availability
Cassandra এর মডেল ডিজাইন করা হয়েছে যাতে এটি স্কেলেবল এবং উচ্চ অ্যাভেইলেবিলিটি নিশ্চিত করতে পারে। Replication এবং partitioning এর মাধ্যমে এটি ডেটার অ্যাভেইলেবিলিটি এবং পারফরম্যান্স সুরক্ষিত রাখে।
- Replication Factor: ডেটার কতটি কপি থাকবে তা নির্ধারণ করে।
- Data Partitioning: ডেটাকে বিভিন্ন নোডে ভাগ করে কাজ করতে সাহায্য করে, যা স্কেলেবিলিটি এবং পারফরম্যান্স বৃদ্ধি করে।
3. Cassandra এর Data Model-এর সুবিধা
- Highly Scalable: Cassandra-তে ডেটা মডেল ডিস্ট্রিবিউটেড আর্কিটেকচারে কাজ করে, যা ইনফিনিট স্কেলিংয়ের জন্য উপযুক্ত।
- High Availability: Cassandra ডেটা রেপ্লিকেশন এবং অ্যাভেইলেবিলিটি নিশ্চিত করে, যা ডেটার সহজে অ্যাক্সেস নিশ্চিত করে।
- Fault Tolerant: Cassandra একাধিক কপি ডেটা সংরক্ষণ করে, যাতে কোনো নোড ডাউন হলেও ডেটা নিরাপদ থাকে।
সারাংশ
Cassandra Data Model একটি নমনীয়, স্কেলেবল এবং উচ্চ পারফরম্যান্সের ডেটা মডেল যা ডিস্ট্রিবিউটেড সিস্টেমের মাধ্যমে কাজ করে। Cassandra-তে ডেটা Keyspace, Tables, Rows, এবং Columns ব্যবহার করে স্টোর এবং প্রসেস করা হয়। Cassandra এর ডেটা মডেল ডিস্ট্রিবিউটেড আর্কিটেকচার, ডেটা রেপ্লিকেশন এবং পারফরম্যান্স অপটিমাইজেশনের জন্য বিশেষভাবে ডিজাইন করা হয়েছে, যা বৃহৎ পরিমাণ ডেটা পরিচালনায় সাহায্য করে।
Apache Cassandra হলো একটি শক্তিশালী, স্কেলেবল এবং ডিস্ট্রিবিউটেড NoSQL ডেটাবেস যা বড় পরিমাণ ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। Cassandra তে ডেটা সংরক্ষণ এবং সংগঠনের জন্য দুটি প্রধান উপাদান Keyspace এবং Table ব্যবহার করা হয়। এই দুটি উপাদান ক্যাসান্দ্রায় ডেটা মডেলিং এবং সংরক্ষণের ভিত্তি তৈরি করে।
1. Keyspace
Keyspace হলো Cassandra ডেটাবেসের একটি যুক্তিবদ্ধ ইউনিট বা ক্যাটালগ যেখানে একটি বা একাধিক টেবিল সংরক্ষিত থাকে। এটি রিলেশনাল ডেটাবেসের database এর মতো কাজ করে। Keyspace তৈরি করার মাধ্যমে Cassandra সিস্টেমে ডেটা সঞ্চয় এবং ব্যবস্থাপনা শুরু করা হয়।
Keyspace এর বৈশিষ্ট্য:
- Replication Factor: Keyspace তৈরি করার সময় আপনি replication factor নির্ধারণ করতে পারেন, যা সিদ্ধান্ত নেবে আপনার ডেটার কপি কতটি নোডে থাকবে। এটি ডেটার উচ্চলভ্যতা (availability) নিশ্চিত করে।
- Durable Writes: এটি নির্ধারণ করে যে, ডেটার লেখা কার্যক্রম কতটা স্থায়ী হবে।
- Strategy: Keyspace তৈরি করার সময় আপনি রিপ্লিকেশন স্ট্র্যাটেজি নির্ধারণ করতে পারেন, যেমন SimpleStrategy (একটি সিঙ্গেল ডেটা সেন্টারে ডেটা সঞ্চয় করা) এবং NetworkTopologyStrategy (মাল্টি-ডেটা সেন্টারের মধ্যে ডেটা সঞ্চয় করা)।
Keyspace তৈরি করার Syntax:
CREATE KEYSPACE IF NOT EXISTS <keyspace_name>
WITH replication = {'class': '<replication_strategy>', 'replication_factor': <factor>};
উদাহরণ:
CREATE KEYSPACE IF NOT EXISTS test_keyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
এই কমান্ডটি একটি test_keyspace তৈরি করবে যেখানে ডেটার তিনটি কপি তিনটি আলাদা নোডে সংরক্ষিত থাকবে।
2. Table
Table হলো Cassandra-তে ডেটা সংরক্ষণের জন্য ব্যবহৃত মূল কাঠামো। এটি রিলেশনাল ডেটাবেসের টেবিলের মতো কাজ করে, তবে Cassandra তে টেবিল সাধারণত column family হিসাবে পরিচিত।
Table এর বৈশিষ্ট্য:
- Primary Key: প্রতিটি টেবিলের একটি primary key থাকে, যা টেবিলের মধ্যে ডেটা সনাক্ত করতে ব্যবহৃত হয়। Primary Key দুটি অংশে বিভক্ত হয়:
- Partition Key: ডেটার কোন নোডে রাখা হবে তা নির্ধারণ করে।
- Clustering Columns: একাধিক রেকর্ডের মধ্যে ক্রম (ordering) নির্ধারণ করে।
- Columns: Cassandra-তে টেবিলের প্রতিটি কলাম নির্দিষ্ট থাকে না এবং এটি dynamic columns হতে পারে, অর্থাৎ, আপনি টেবিলের মধ্যে নতুন কলাম অ্যাড করতে পারেন যেকোনো সময়।
Table তৈরি করার Syntax:
CREATE TABLE IF NOT EXISTS <keyspace_name>.<table_name> (
<column1_name> <column1_datatype>,
<column2_name> <column2_datatype>,
...
PRIMARY KEY (<partition_key>, <clustering_column>);
);
উদাহরণ:
CREATE TABLE IF NOT EXISTS test_keyspace.users (
user_id UUID PRIMARY KEY,
username TEXT,
email TEXT,
age INT
);
এই কমান্ডটি test_keyspace এ একটি users টেবিল তৈরি করবে, যার মধ্যে user_id একটি ইউনিক আইডেন্টিফায়ার হিসেবে ব্যবহৃত হবে এবং এটি primary key হিসেবে কাজ করবে।
3. Keyspace এবং Table তৈরি উদাহরণ
ধরা যাক, আমরা একটি E-commerce অ্যাপ্লিকেশনের জন্য Keyspace এবং Table তৈরি করতে চাই। আমাদের একটি Keyspace তৈরি করতে হবে যার মধ্যে ডেটা রিপ্লিকেশন স্ট্র্যাটেজি নির্ধারণ করা থাকবে। তারপর, একটি users এবং orders টেবিল তৈরি করব।
3.1 Keyspace তৈরি করা
CREATE KEYSPACE IF NOT EXISTS ecommerce
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
এই কমান্ডটি ecommerce নামে একটি Keyspace তৈরি করবে, যেখানে ডেটার ৩টি কপি থাকবে।
3.2 users Table তৈরি করা
CREATE TABLE IF NOT EXISTS ecommerce.users (
user_id UUID PRIMARY KEY,
username TEXT,
email TEXT,
age INT
);
এটি users নামে একটি টেবিল তৈরি করবে, যেখানে user_id হবে primary key এবং বাকি ফিল্ডগুলিতে গ্রাহকের তথ্য থাকবে।
3.3 orders Table তৈরি করা
CREATE TABLE IF NOT EXISTS ecommerce.orders (
order_id UUID PRIMARY KEY,
user_id UUID,
product_id UUID,
quantity INT,
order_date TIMESTAMP
);
এটি orders নামে একটি টেবিল তৈরি করবে, যেখানে order_id হবে primary key, এবং এটি গ্রাহকের user_id, পণ্যের product_id, পণ্যের পরিমাণ quantity, এবং অর্ডারের তারিখ order_date সংরক্ষণ করবে।
4. Table-এ ডেটা ইনসার্ট করা
একবার টেবিল তৈরি হলে, আপনি সেখানে ডেটা ইনসার্ট করতে পারবেন। Cassandra তে ডেটা ইনসার্ট করার জন্য INSERT INTO কমান্ড ব্যবহার করা হয়।
INSERT INTO ecommerce.users (user_id, username, email, age)
VALUES (uuid(), 'john_doe', 'john.doe@example.com', 28);
এই কমান্ডটি users টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবে, যেখানে user_id একটি ইউনিক UUID হবে, username, email, এবং age প্রাথমিকভাবে নির্ধারিত মান থাকবে।
5. Table থেকে ডেটা নির্বাচন (SELECT)
Cassandra-তে SELECT কমান্ড ব্যবহার করে টেবিল থেকে ডেটা নির্বাচন করা হয়।
SELECT * FROM ecommerce.users;
এই কমান্ডটি users টেবিল থেকে সমস্ত ডেটা নির্বাচন করবে।
সারাংশ
Keyspace এবং Table হল Cassandra তে ডেটা সংরক্ষণের জন্য অত্যন্ত গুরুত্বপূর্ণ উপাদান। Keyspace হলো Cassandra এর ডেটাবেস, যেখানে একাধিক টেবিল থাকতে পারে, এবং Table হলো ডেটা সংরক্ষণের কাঠামো। Cassandra তে Keyspace তৈরি করার সময় replication factor এবং replication strategy নির্ধারণ করা হয়, যা ডেটার উচ্চলভ্যতা এবং পারফরম্যান্স নিশ্চিত করে। Table তৈরি করার সময় primary key এবং columns নির্ধারণ করা হয়, যা ডেটা সঠিকভাবে সংরক্ষণ এবং পরিচালনা করতে সাহায্য করে।
Cassandra এর এই দুটি উপাদান, Keyspace এবং Table, ব্যবহার করে আপনি ডিস্ট্রিবিউটেড ডেটাবেস সিস্টেমের মধ্যে ডেটা সংরক্ষণ এবং পরিচালনা করতে পারবেন, যা স্কেলেবল এবং হাই পারফরম্যান্স ডেটা সিস্টেম নিশ্চিত করে।
Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস যা ডেটা স্টোরেজ এবং অ্যাক্সেসের জন্য বিশেষভাবে ডিজাইন করা হয়েছে। ক্যাসান্দ্রার মধ্যে ডেটা সঞ্চয় এবং সংগঠনের জন্য Primary Key এবং Clustering Key ব্যবহার করা হয়। এই দুটি কী ডেটার স্কেলেবিলিটি, অ্যাক্সেস টাইম এবং কার্যকারিতা নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
1. Primary Key (প্রাইমারি কী)
Primary Key হলো ক্যাসান্দ্রার একটি মৌলিক ধারণা, যা প্রতিটি রেকর্ডকে ইউনিকভাবে চিহ্নিত করে। এটি এক বা একাধিক কলামের সমন্বয়ে গঠিত হতে পারে এবং প্রতিটি রেকর্ডের জন্য একটি অদ্বিতীয় মান প্রদান করে।
Primary Key এর কাজ:
- ইউনিক আইডেন্টিফিকেশন: Primary Key নিশ্চিত করে যে প্রতিটি রেকর্ডের জন্য একটি ইউনিক কী রয়েছে। ক্যাসান্দ্রার মধ্যে ডেটার কোনো রেকর্ড দ্বৈত বা একই কী হতে পারে না।
- ডেটার পার্টিশনিং: Primary Key-তে একটি অংশ Partition Key হিসেবে ব্যবহৃত হয়, যা ডেটাকে বিভিন্ন নোডে ভাগ করতে সহায়তা করে। এটি ডেটার ফিজিক্যাল লোকেশন নির্ধারণ করে।
Primary Key এর গঠন:
- Partition Key: Primary Key-এর প্রথম অংশ। এটি ডেটাকে ক্লাস্টারের মধ্যে বিভিন্ন নোডে বিভক্ত করতে সাহায্য করে। Partition Key এর মাধ্যমে Cassandra ডেটা কিভাবে এবং কোথায় সঞ্চিত হবে তা নির্ধারণ করে।
- Clustering Key: যদি Primary Key-এর মধ্যে একাধিক কলাম থাকে, তবে এর দ্বিতীয় অংশ Clustering Key হিসেবে কাজ করে। Clustering Key ডেটাকে একটি পার্টিশনে সাজাতে সাহায্য করে, যাতে ডেটার নির্দিষ্ট আউটপুট নির্ধারণ করা যায়।
Primary Key এর উদাহরণ:
ধরা যাক, আমরা একটি users টেবিল তৈরি করছি, যেখানে user_id এবং region কলাম থাকবে:
CREATE TABLE users (
user_id UUID,
region TEXT,
name TEXT,
age INT,
PRIMARY KEY (user_id, region)
);
এখানে:
user_idহলো Partition Key, যা ডেটাকে ক্লাস্টারের নোডে ভাগ করতে ব্যবহৃত হয়।regionহলো Clustering Key, যা একইuser_idএর অধীনে ডেটাকে সজ্জিত (sort) করতে ব্যবহৃত হয়।
2. Clustering Key (ক্লাস্টারিং কী)
Clustering Key হলো সেই অংশ যা ডেটাকে একটি নির্দিষ্ট পার্টিশনের মধ্যে সাজানোর (sort) কাজ করে। যখন Primary Key-তে একাধিক কলাম থাকে, তখন তাদের মধ্যে Clustering Key ডেটার সজ্জন এবং অর্ডারিং নিয়ন্ত্রণ করে। এটি ডেটার সিস্টেমের মধ্যে সঠিকভাবে অ্যাক্সেস নিশ্চিত করতে ব্যবহৃত হয়।
Clustering Key এর কাজ:
- ডেটা সজ্জন: Clustering Key নিশ্চিত করে যে একই Partition Key এর অধীনে ডেটা কীভাবে সাজানো হবে। এটি সাধারণত অর্ডারিংয়ের জন্য ব্যবহার হয়, যেমন ক্রম অনুযায়ী ডেটা সাজানো।
- রেঞ্জ কোয়েরি: Clustering Key ডেটার মধ্যে রেঞ্জ কোয়েরি চালানোর জন্য সুবিধা প্রদান করে। অর্থাৎ, একটি নির্দিষ্ট পরিসরে ডেটা খুঁজে বের করা সহজ হয়ে ওঠে।
Clustering Key এর উদাহরণ:
ধরা যাক, users টেবিলে user_id এবং region এর পাশাপাশি created_at কলাম রয়েছে, এবং আমরা চাই user_id এবং region এর ভিত্তিতে ডেটা সাজানো হোক, তবে created_at অনুসারে ক্রমবদ্ধভাবে সাজানো হোক:
CREATE TABLE users (
user_id UUID,
region TEXT,
created_at TIMESTAMP,
name TEXT,
age INT,
PRIMARY KEY (user_id, region, created_at)
);
এখানে:
user_idএবংregionহলো Partition Key।created_atহলো Clustering Key, যা একইuser_idএবংregionএর অধীনে ডেটাকে সময় অনুসারে সাজাবে।
Clustering Key এর কার্যকারিতা:
- ডেটার সজ্জন:
created_atঅনুযায়ী ডেটা সাজানো হবে, যাতে আপনি সহজেই জানেন যে কোন গ্রাহক কখন সাইন আপ করেছে বা সর্বশেষ কবে তাদের তথ্য আপডেট হয়েছে। - রেঞ্জ কোয়েরি: আপনি যদি একটি নির্দিষ্ট সময়ের মধ্যে ডেটা খুঁজে পেতে চান, যেমন "সর্বশেষ ৩০ দিনের ডেটা", তবে Clustering Key এটি সহজে করতে সহায়তা করবে।
3. Primary Key এবং Clustering Key এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Primary Key | Clustering Key |
|---|---|---|
| বৈশিষ্ট্য | ডেটাকে ইউনিকভাবে চিহ্নিত করে। | ডেটাকে একটি পার্টিশনে সাজানোর জন্য ব্যবহৃত হয়। |
| কাজ | ডেটাকে বিভিন্ন নোডে ভাগ করা এবং সংরক্ষণ করা। | একই Partition Key এর অধীনে ডেটাকে সাজানো। |
| উদাহরণ | user_id | region, created_at |
| সাজানোর প্রভাব | পার্টিশন তৈরি এবং ডেটা বিভাজন। | ডেটার সজ্জন এবং অর্ডারিং। |
4. ক্যাসান্দ্রায় Primary Key এবং Clustering Key এর ব্যবহারের সুবিধা
- ডেটার স্কেলিং: Partition Key ব্যবহার করে Cassandra ডেটাকে সমানভাবে বিভিন্ন নোডে বিতরণ করে, যা সিস্টেমের স্কেল এবং পারফরম্যান্স নিশ্চিত করে।
- ডেটা অ্যাক্সেসের গতি: Clustering Key ডেটাকে দ্রুত অ্যাক্সেসযোগ্য করে তোলে, কারণ এটি ডেটাকে একটি নির্দিষ্ট অর্ডারে সাজায়।
- রেঞ্জ কোয়েরি: Clustering Key দিয়ে সিস্টেমের মধ্যে দ্রুত রেঞ্জ কোয়েরি চালানো সম্ভব হয়, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
সারাংশ
Primary Key এবং Clustering Key হলো ক্যাসান্দ্রার গুরুত্বপূর্ণ উপাদান যা ডেটার সঞ্চয়, সংগঠন এবং অ্যাক্সেস পরিচালনা করে। Primary Key ডেটাকে ইউনিকভাবে চিহ্নিত করে এবং Partition Key হিসেবে কাজ করে, যখন Clustering Key ডেটাকে একটি পার্টিশনের মধ্যে সাজায় এবং সঠিকভাবে অ্যাক্সেস করতে সহায়তা করে। এই দুটি কীগুলির সঠিক ব্যবহার ক্যাসান্দ্রার স্কেলেবিলিটি, পারফরম্যান্স এবং অ্যাভেইলেবিলিটি নিশ্চিত করতে সাহায্য করে।
Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস যা বিশাল পরিমাণ ডেটা সংরক্ষণ এবং দ্রুত প্রক্রিয়া করার জন্য ডিজাইন করা হয়েছে। এটি ডেটাকে স্কেলেবল এবং কার্যকরভাবে স্টোর এবং প্রসেস করার জন্য Partitioning এবং Clustering কৌশল ব্যবহার করে। এই দুটি পদ্ধতি Cassandra-র Data Distribution মডেলকে শক্তিশালী এবং স্কেলেবল করে তোলে।
1. Partitioning: ডেটাকে ভাগ করা
Partitioning হলো ডেটাকে সমান অংশে বিভক্ত করার প্রক্রিয়া, যাতে ডেটার বিভিন্ন অংশ একাধিক নোডে স্টোর করা যায়। Cassandra তে ডেটার প্রতিটি রেকর্ড একটি ইউনিক কী দ্বারা চিহ্নিত হয়, এবং সেই কী-এর উপর ভিত্তি করে ডেটা বিভিন্ন নোডে ভাগ করা হয়।
Partitioning এর মূল ধারণা:
- Partition Key: Cassandra-তে ডেটা পার্টিশন করার জন্য Partition Key ব্যবহার করা হয়। এই কী ব্যবহার করে ডেটা বিভিন্ন নোডে সমানভাবে বিতরণ করা হয়। এটি এমন একটি কী যা ডেটার অবস্থান নির্ধারণ করে, অর্থাৎ কোন নোডে ডেটা সঞ্চিত হবে।
- Token: Partition Key এর মাধ্যমে একটি Token তৈরি করা হয়, যা ডেটার অবস্থান বা পার্টিশন নির্ধারণে ব্যবহৃত হয়। প্রতিটি নোড একটি নির্দিষ্ট রেঞ্জের টোকেন ধারণ করে এবং সেই অনুযায়ী ডেটা প্রসেস এবং সংরক্ষণ করে।
- Murmur3Partitioner: Cassandra সাধারণত Murmur3Partitioner ব্যবহার করে, যা ডেটাকে খুব ভালোভাবে সমানভাবে ভাগ করে। এটি ডেটার জন্য একটি হ্যাশিং পদ্ধতি প্রযোজ্য করে এবং ডেটাকে টোকেনের মাধ্যমে বিভিন্ন নোডে বিতরণ করে।
Partitioning এর পদ্ধতি:
- ডেটা লেখা: একটি রেকর্ড লেখা হলে, তার Partition Key ব্যবহার করে একটি টোকেন তৈরি হয়। এটি নির্ধারণ করে সেই ডেটা কোথায় সঞ্চিত হবে।
- ডেটা বিতরণ: Cassandra নোডের মধ্যে এই টোকেনের মাধ্যমে ডেটা সমানভাবে বিতরণ করা হয়। প্রতিটি নোড নিজস্ব একটি টোকেন রেঞ্জ ধরে ডেটা সংরক্ষণ করে।
- ভাগ করা ডেটা: ডেটা যখন একটি নোডে সংরক্ষিত হয়, তখন একই ডেটার কপি অন্যান্য নোডেও সংরক্ষিত হয়, যাতে রেপ্লিকেশন নিশ্চিত করা যায়।
উদাহরণ:
ধরা যাক, Cassandra তে একটি টেবিলের Partition Key হলো customer_id। যদি আমরা customer_id এর মাধ্যমে ডেটা সংরক্ষণ করি, তাহলে Cassandra সেই customer_id কে একটি টোকেনে রূপান্তরিত করবে এবং সেই অনুযায়ী ডেটা সংশ্লিষ্ট নোডে সংরক্ষণ করবে।
2. Clustering: ডেটাকে সাজানো
Clustering Cassandra-তে ডেটার সাজানোর প্রক্রিয়া, যা ডেটাকে পার্টিশনের মধ্যে নির্দিষ্ট অর্ডারে সাজায়। একবার ডেটা একটি পার্টিশনে সংরক্ষিত হলে, Cassandra ডেটাকে Clustering Key ব্যবহার করে নির্দিষ্ট ক্রমে সাজায়। এটি ডেটার অভ্যন্তরীণ সাজানোর জন্য ব্যবহার করা হয়, যাতে দ্রুত অ্যাক্সেস এবং প্রক্রিয়াকরণ করা যায়।
Clustering Key এর কাজ:
- Clustering Key ব্যবহার করে Cassandra ডেটাকে একটি পার্টিশনের মধ্যে শ্রেণীবদ্ধ করে। এটি সাধারণত পার্টিশনটি ভাগ করার পরে সেই ডেটার সঠিক অর্ডার নির্ধারণ করে।
- সাজানোর প্রক্রিয়া: Cassandra ডেটাকে পার্টিশনের মধ্যে ক্রমাগত সাজানোর জন্য Clustering Key ব্যবহার করে। এতে পার্টিশনের মধ্যে ডেটা দ্রুত খোঁজা এবং অ্যাক্সেস করা সহজ হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি টেবিল রয়েছে যেখানে customer_id হলো Partition Key এবং order_date হলো Clustering Key। Cassandra তখন প্রতিটি customer_id এর জন্য order_date অনুসারে ডেটা সাজাবে, যাতে গ্রাহক অনুযায়ী অর্ডারের তথ্য দ্রুত খোঁজা যায়।
3. Data Distribution: Partitioning এবং Clustering এর মাধ্যমে
Cassandra-তে Partitioning এবং Clustering একসাথে কাজ করে ডেটা সমানভাবে বিতরণ এবং দ্রুত অ্যাক্সেস নিশ্চিত করতে।
Data Distribution এর প্রক্রিয়া:
- Partitioning: ডেটা প্রথমে Partition Key এর মাধ্যমে বিভিন্ন নোডে ভাগ হয়ে যায়। প্রতিটি নোডে থাকা পার্টিশন নির্ধারণ করা হয় টোকেনের মাধ্যমে।
- Clustering: প্রতিটি পার্টিশনে ডেটা নির্দিষ্ট ক্রমে সাজানো হয়, Clustering Key এর মাধ্যমে, যাতে ডেটা দ্রুত অ্যাক্সেস করা যায়।
উদাহরণ:
ধরা যাক, আমরা একটি E-commerce টেবিল তৈরি করেছি যেখানে customer_id হলো Partition Key এবং order_date হলো Clustering Key। Cassandra প্রথমে customer_id এর উপর ভিত্তি করে ডেটাকে পার্টিশন করবে এবং তারপর প্রতিটি পার্টিশনে order_date অনুসারে ডেটাকে সাজাবে। এতে করে একটি গ্রাহকের সমস্ত অর্ডার তার customer_id অনুসারে এবং order_date অনুযায়ী সাজানো থাকবে, যাতে দ্রুত অ্যাক্সেস পাওয়া যায়।
4. Data Distribution এর সুবিধা
- স্কেলেবিলিটি: Partitioning এর মাধ্যমে Cassandra-তে ডেটা সমানভাবে বিতরণ করা যায়, এবং ক্লাস্টারে নতুন নোড যোগ করা সহজ হয়। এটি সিস্টেমের স্কেল উন্নত করতে সাহায্য করে।
- হাই অ্যাভেইলেবিলিটি: ডেটার একাধিক কপি প্রতিটি নোডে রাখা হয়, যাতে কোনো একটি নোড ডাউন হলে অন্য নোড থেকে ডেটা পাওয়া যায়।
- দ্রুত অ্যাক্সেস: Clustering Key এর মাধ্যমে ডেটাকে সঠিক ক্রমে সাজানো হয়, যা ডেটার দ্রুত অ্যাক্সেস নিশ্চিত করে।
সারাংশ
Partitioning এবং Clustering Cassandra-র ডেটা বিতরণ এবং সিস্টেম স্কেলিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ। Partitioning ডেটাকে সমানভাবে একাধিক নোডে ভাগ করে, যাতে ডেটা দ্রুত এবং স্কেলেবলভাবে সংরক্ষণ করা যায়। অন্যদিকে, Clustering ডেটাকে পার্টিশনের মধ্যে সাজানোর মাধ্যমে দ্রুত অ্যাক্সেস নিশ্চিত করে। Cassandra-র এই কৌশলগুলি উচ্চ আউটপুট, স্কেলেবিলিটি, এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করতে সহায়ক হয়, যা বৃহৎ পরিমাণ ডেটা প্রক্রিয়াকরণে কার্যকরী।
Read more