Partitioning এবং Sharding ডাটাবেস স্কেল করার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ কৌশল। বড় ডেটাবেসের পারফরম্যান্স উন্নত করতে এবং ডেটার অ্যাক্সেস দ্রুত করার জন্য এগুলি ব্যবহৃত হয়। নিচে Partitioning এবং Sharding-এর কনফিগারেশন পদ্ধতি ব্যাখ্যা করা হলো।
Partitioning কনফিগারেশন
Partitioning হলো একটি ডাটাবেস বা টেবিলকে একাধিক অংশে ভাগ করার প্রক্রিয়া, যেখানে প্রতিটি অংশ ভিন্ন স্টোরেজ ইউনিটে রাখা হয়। এটি মূলত বড় ডেটাসেটকে ব্যবস্থাপনা এবং অ্যাক্সেসের জন্য সহজ করে তোলে।
১. Partitioning-এর ধরন
- Range Partitioning: ডেটার একটি নির্দিষ্ট রেঞ্জ অনুযায়ী পার্টিশন করা হয়।
- List Partitioning: ডেটার নির্দিষ্ট মানের ভিত্তিতে পার্টিশন করা হয়।
- Hash Partitioning: ডেটার মান থেকে একটি হ্যাশ তৈরি করে পার্টিশন নির্ধারণ করা হয়।
- Key Partitioning: ডেটার প্রাইমারি বা ইউনিক কী এর উপর ভিত্তি করে পার্টিশন করা হয়।
২. MySQL-এ Partitioning সেটআপ
Partitioning শুধুমাত্র InnoDB এবং MyISAM টেবিল টাইপে সমর্থিত।
Step 1: টেবিল তৈরি এবং Partitioning যোগ করা
CREATE TABLE sales_data (
id INT NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(10,2),
PRIMARY KEY (id, sale_date)
)
PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p0 VALUES LESS THAN (2000),
PARTITION p1 VALUES LESS THAN (2010),
PARTITION p2 VALUES LESS THAN (2020),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
Step 2: বিদ্যমান টেবিলে Partitioning যোগ করা
Partitioning সরাসরি বিদ্যমান টেবিলে যোগ করা যায় না। টেবিলটি ডাম্প করে নতুন টেবিল তৈরি করতে হবে।
৩. Partitioning পরিচালনা
Partition তথ্য দেখুন:
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'sales_data';Partition ড্রপ করা:
ALTER TABLE sales_data DROP PARTITION p2;
Sharding কনফিগারেশন
Sharding হলো ডাটাবেসকে লজিক্যালি একাধিক সার্ভারে ভাগ করার প্রক্রিয়া। এটি ডিস্ট্রিবিউটেড ডাটাবেস সিস্টেমে ব্যবহৃত হয় এবং প্রতিটি শার্ড ডেটার একটি সাবসেট ধারণ করে।
১. Sharding কৌশল
- Range-based Sharding: ডেটার রেঞ্জ অনুযায়ী শার্ড ভাগ করা হয়।
- Hash-based Sharding: ডেটা হ্যাশ ফাংশনের মাধ্যমে শার্ড নির্ধারণ করা হয়।
- Key-based Sharding: প্রাইমারি বা ইউনিক কী ব্যবহার করে শার্ড ভাগ করা হয়।
২. Sharding সেটআপ
Sharding সাধারণত অ্যাপ্লিকেশন স্তরে কনফিগার করা হয়। MySQL নিজে Sharding সমর্থন করে না, তবে MariaDB, MongoDB, এবং অন্যান্য ডিস্ট্রিবিউটেড ডাটাবেস সিস্টেম Sharding সমর্থন করে।
Step 1: শার্ড তৈরি করুন
প্রতিটি শার্ড আলাদা ডাটাবেস সার্ভারে তৈরি করুন:
-- Shard 1
CREATE DATABASE shard_1;
CREATE TABLE shard_1.users (
id INT NOT NULL,
name VARCHAR(100),
email VARCHAR(100),
PRIMARY KEY (id)
);
-- Shard 2
CREATE DATABASE shard_2;
CREATE TABLE shard_2.users (
id INT NOT NULL,
name VARCHAR(100),
email VARCHAR(100),
PRIMARY KEY (id)
);
Step 2: শার্ডিং লজিক যোগ করুন
Sharding-এর লজিক অ্যাপ্লিকেশন কোডে যোগ করুন। উদাহরণ:
def get_shard(user_id):
if user_id < 1000:
return "shard_1"
else:
return "shard_2"
# Example Usage
shard = get_shard(500) # Returns shard_1
Step 3: ডেটা রাউটিং
ডেটা সঠিক শার্ডে রাউট করার জন্য অ্যাপ্লিকেশন স্তরে SQL কোয়েরি চালানো হয়:
INSERT INTO shard_1.users (id, name, email) VALUES (500, 'John Doe', 'john@example.com');
৩. Sharding পরিচালনা
- শার্ড যোগ করা:
নতুন ডাটাবেস বা সার্ভার তৈরি করে শার্ডিং লজিক আপডেট করুন। - ডেটা মাইগ্রেশন:
একটি শার্ড থেকে অন্য শার্ডে ডেটা স্থানান্তর করতে কাস্টম স্ক্রিপ্ট ব্যবহার করুন।
Partitioning বনাম Sharding
| ফিচার | Partitioning | Sharding |
|---|---|---|
| ব্যাপ্তি | একক ডাটাবেস বা সার্ভারের মধ্যে সীমাবদ্ধ। | একাধিক সার্ভার বা ডাটাবেস জুড়ে বিস্তৃত। |
| প্রযুক্তি | MySQL নিজে সমর্থন করে। | অ্যাপ্লিকেশন স্তরে কনফিগার করা হয়। |
| লক্ষ্য | পারফরম্যান্স উন্নয়ন এবং ডেটা অ্যাক্সেস। | ডাটাবেস স্কেল আউট করা। |
| ডেটা পরিচালনা | একই সার্ভারে ডেটা থাকে। | বিভিন্ন সার্ভারে ডেটা ভাগ করা হয়। |
সারাংশ
Partitioning এবং Sharding উভয়ই বড় ডাটাবেস ব্যবস্থাপনার জন্য গুরুত্বপূর্ণ কৌশল। Partitioning একই ডাটাবেসের মধ্যে ডেটা ভাগ করে অ্যাক্সেসের গতি বাড়ায়, যেখানে Sharding ডিস্ট্রিবিউটেড ডাটাবেসে ডেটা ভাগ করে স্কেল আউট নিশ্চিত করে। আপনার ডাটাবেসের আকার, জটিলতা, এবং অ্যাপ্লিকেশনের প্রয়োজন অনুসারে Partitioning বা Sharding বেছে নিন এবং সঠিকভাবে কনফিগার করুন।
Read more