MongoDB sharding হল একটি ডিস্ট্রিবিউটেড ডেটাবেস প্রযুক্তি যা MongoDB ডেটাবেসের ডেটা বড় পরিসরে স্কেল করার জন্য ব্যবহৃত হয়। এটি ডেটাকে একাধিক সার্ভারে ভাগ করে রাখে, যা ডেটাবেসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করে। শার্ডিং MongoDB ডেটাবেসে বড় পরিমাণের ডেটা এবং ট্র্যাফিক সামলানোর জন্য অত্যন্ত উপকারী, বিশেষত যখন ডেটাবেসে উচ্চ লোড এবং ডিস্ক স্পেসের প্রয়োজন হয়।
MongoDB তে শার্ডিং ব্যবহারের মাধ্যমে ডেটার ভারসাম্য বজায় রাখা যায় এবং ডেটা ম্যানেজমেন্ট সহজ হয়। শার্ডিংয়ের মাধ্যমে MongoDB ডেটাবেসটি আন্ডারস্ট্যান্ডেবল, স্কেলেবল এবং পারফরম্যান্স অপটিমাইজড হয়।
Sharding কী?
Sharding হল MongoDB ডেটাবেসে ডেটা ডিস্ট্রিবিউটেড করার প্রক্রিয়া, যেখানে ডেটার টুকরো (শার্ড) বিভিন্ন সার্ভারে ভাগ করে রাখা হয়। যখন ডেটা অনেক বেশি হয় এবং এক সার্ভার বা নোডে সেই ডেটা রাখা সম্ভব হয় না, তখন MongoDB ডেটাকে শার্ড করে একাধিক সার্ভারে বিতরণ করে এবং এই শার্ড করা ডেটা সরাসরি ক্লায়েন্ট অ্যাপ্লিকেশন বা MongoDB শার্ড কন্ট্রোলার দ্বারা পরিচালিত হয়।
MongoDB তে শার্ডিংয়ের মাধ্যমে প্রতিটি শার্ড (একটি ডেটাবেস সেগমেন্ট) আলাদাভাবে পরিচালিত হয় এবং সার্ভার আর্কিটেকচার অনুযায়ী ডেটার উপযুক্ত বিভাজন নিশ্চিত করা হয়।
Sharding এর মৌলিক উপাদানসমূহ
MongoDB তে শার্ডিং ব্যবস্থায় কয়েকটি মৌলিক উপাদান থাকে:
1. Shards
শার্ড হল MongoDB ডেটাবেসের ডেটার অংশ, যা একাধিক MongoDB সার্ভারে সংরক্ষিত থাকে। প্রতিটি শার্ড ডেটার একটি নির্দিষ্ট সেগমেন্ট বা অংশ ধারণ করে। MongoDB তে শার্ড হতে পারে:
- Replica Sets: MongoDB শার্ডগুলি সাধারণত রেপ্লিকা সেট আকারে থাকে, যেখানে প্রতিটি শার্ডের এক বা একাধিক কপি রাখা হয়, যা রেডানডেন্সি এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করে।
2. Config Servers
Config servers MongoDB শার্ডিং ক্লাস্টারের মেটা ডেটা এবং কনফিগারেশন তথ্য সংরক্ষণ করে। এই সার্ভারগুলির কাজ হল ডেটার শার্ডিং স্ট্রাকচার এবং কনফিগারেশন বজায় রাখা এবং শার্ডের মধ্যে ভারসাম্য বজায় রাখা।
- Config servers সাধারণত ৩টি সার্ভার থাকে, যাতে ডেটা এবং কনফিগারেশন তথ্যের কপি সুরক্ষিত থাকে।
3. Mongos
Mongos হল একটি রুটিং সার্ভিস যা MongoDB ক্লায়েন্ট এবং শার্ড ক্লাস্টারের মধ্যে মধ্যবর্তী হিসেবে কাজ করে। Mongos ক্লায়েন্ট কুয়েরি গ্রহণ করে এবং সঠিক শার্ডে পাঠায়।
- Mongos ক্লায়েন্ট অ্যাপ্লিকেশনগুলির সঙ্গে যোগাযোগ করে এবং তাদের কুয়েরি রুটিং সঠিক শার্ডে করে।
4. Shard Key
Shard key MongoDB শার্ডিংয়ের সবচেয়ে গুরুত্বপূর্ণ উপাদান। এটি একটি ফিল্ড, যা MongoDB ডেটাবেসের ডেটা শার্ডে ভাগ করার জন্য ব্যবহৃত হয়। একটি শার্ড কী নির্ধারণ করে কিভাবে ডেটা শার্ডগুলির মধ্যে বিতরণ হবে। শার্ড কী নির্বাচনের সময় সঠিকভাবে নির্বাচন করা গুরুত্বপূর্ণ, কারণ এটি ডেটার পারফরম্যান্স এবং ভারসাম্য নির্ধারণ করে।
- শার্ড কী ব্যবহার করে MongoDB ডেটার মধ্যে বিভাজন ঘটানো হয়।
- এটি এমন একটি ফিল্ড হতে হবে যার মান সুষমভাবে ভাগ করা যায়।
Sharding কিভাবে কাজ করে?
MongoDB তে শার্ডিং মূলত ডেটা ভাগ করার এবং রুটিং সঠিক শার্ডে প্রেরণের একটি প্রক্রিয়া। এটি অনেকটাই একটি ডিস্ট্রিবিউটেড সিস্টেমের মতো কাজ করে, যেখানে MongoDB ডেটার প্রতি শার্ডে ডিস্ট্রিবিউটেড থাকে এবং শার্ড কন্ট্রোলার সঠিক শার্ডে ডেটা রুটিং করে।
- Shard Key Selection: MongoDB প্রথমে শার্ড কী নির্বাচন করে এবং সেখান থেকে ডেটা শার্ডে বিভক্ত হয়।
- Range-based Sharding: যদি শার্ড কী নির্বাচন করা হয় এবং সেটি একটি সংখ্যা বা স্ট্রিং হয়, তবে MongoDB ডেটাকে একটি নির্দিষ্ট রেঞ্জে বিভক্ত করে।
- Hash-based Sharding: MongoDB একটি হ্যাশ ফাংশন ব্যবহার করে শার্ড কী এর উপর ভিত্তি করে ডেটা ভাগ করে।
Sharding এর সুবিধা
- ডেটা স্কেলেবিলিটি: MongoDB শার্ডিংয়ের মাধ্যমে ডেটা অনেক বড় পরিসরে স্কেল করা সম্ভব হয়। আপনি ডেটার ভলিউম অনুযায়ী নতুন শার্ড যোগ করে ডেটাবেসের পারফরম্যান্স বাড়াতে পারেন।
- হাই অ্যাভেইলেবিলিটি: শার্ডিংয়ে প্রতিটি শার্ডের রেপ্লিকা সেট থাকে, যা ডেটার রেডানডেন্সি এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করে।
- লোড ভারসাম্য: MongoDB শার্ডিংয়ের মাধ্যমে ডেটার লোড বিভিন্ন শার্ডে ভাগ করা হয়, ফলে একক শার্ডে বেশি লোড পড়বে না এবং পারফরম্যান্সের উন্নতি হয়।
Sharding কনফিগারেশন উদাহরণ
MongoDB তে শার্ডিং কনফিগারেশন শুরু করতে কয়েকটি ধাপ অনুসরণ করতে হবে:
- Sharded Cluster Setup: প্রথমে শার্ডিং ক্লাস্টার তৈরি করতে হবে, যা অন্তর্ভুক্ত হবে
mongos(রুটার),shards(ডেটার সেগমেন্ট), এবংconfig servers। - Shard Key নির্বাচন করা: ডেটাকে সঠিকভাবে ভাগ করার জন্য একটি শার্ড কী নির্বাচন করুন।
- Sharding Enable: MongoDB তে শার্ডিং সক্ষম করার জন্য
sh.enableSharding()এবংsh.shardCollection()কমান্ড ব্যবহার করুন।
সারাংশ
MongoDB শার্ডিং হল একটি শক্তিশালী ডিস্ট্রিবিউটেড ডেটাবেস প্রযুক্তি, যা ডেটা স্কেল করার জন্য ডেটাকে একাধিক সার্ভারে ভাগ করে রাখে। এটি MongoDB ডেটাবেসে ডেটা ভারসাম্য বজায় রাখতে, পারফরম্যান্স উন্নত করতে এবং বড় পরিসরের ডেটা পরিচালনা করতে সহায়তা করে। MongoDB তে শার্ডিং ব্যবহারের মাধ্যমে ডেটা ম্যানেজমেন্ট অনেক সহজ ও দ্রুততর হয় এবং উচ্চ স্কেলেবিলিটি নিশ্চিত করা যায়।
Sharding হল MongoDB তে একটি ডিস্ট্রিবিউটেড ডেটাবেস আর্কিটেকচার কৌশল, যা ডেটাকে একাধিক সার্ভারে (যেগুলিকে shards বলা হয়) ভাগ করে রাখে। এটি MongoDB ডেটাবেসকে স্কেল করার জন্য ব্যবহৃত হয়, যাতে বড় পরিসরে ডেটা সংরক্ষণ এবং দ্রুত ডেটা অ্যাক্সেস সম্ভব হয়। সাধারণভাবে, শার্ডিং MongoDB তে উচ্চ পারফরম্যান্স, স্কেলেবিলিটি এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করার জন্য ব্যবহৃত হয়।
Sharding এর মৌলিক ধারণা
Sharding এর মাধ্যমে MongoDB একটি ডেটাবেসকে ছোট ছোট অংশে (shards) ভাগ করে এবং প্রতিটি shard এক একটি সার্ভার বা cluster এ সংরক্ষিত থাকে। শার্ডিং MongoDB তে ডেটার পরিমাণ যখন অত্যন্ত বড় হয় এবং ডেটাবেস একক সার্ভারে রাখা কঠিন হয়ে পড়ে, তখন এটি সাহায্য করে। MongoDB তে শার্ডিং তিনটি মূল উপাদান নিয়ে কাজ করে:
- Shards: মূল ডেটা যা বিভক্ত হয়ে বিভিন্ন সার্ভারে সংরক্ষিত থাকে।
- Config Servers: শার্ডের অবস্থান এবং ডেটাবেসের কাঠামো সংক্রান্ত তথ্য সংরক্ষণ করে।
- Mongos: ক্লায়েন্ট অ্যাপ্লিকেশনের সাথে MongoDB শার্ড ক্লাস্টারের মধ্যে যোগাযোগের মাধ্যমে শার্ডিং পরিচালনা করে।
Sharding এর প্রয়োজন কেন?
- ডেটার স্কেলেবিলিটি: শার্ডিং MongoDB তে ডেটা স্কেল করতে সহায়তা করে। যখন ডেটার পরিমাণ অনেক বেশি হয়ে যায়, তখন একক সার্ভার বা ডিস্কে সমস্ত ডেটা রাখতে পারা সম্ভব হয় না। শার্ডিংয়ের মাধ্যমে MongoDB ডেটাকে একাধিক সার্ভারে ভাগ করা হয়, যার ফলে ডেটাবেসের স্কেল বাড়ানো যায়।
- পারফরম্যান্স উন্নতি: শার্ডিং MongoDB এর পারফরম্যান্স উন্নত করতে সাহায্য করে। একাধিক শার্ডে ডেটা বিভক্ত হওয়ার ফলে, প্রতিটি সার্ভার আলাদাভাবে কুয়েরি প্রসেস করতে পারে, ফলে সিস্টেমের লোড কমে যায় এবং ডেটা অ্যাক্সেস দ্রুততর হয়।
- হাই অ্যাভেইলেবিলিটি: শার্ডিং MongoDB তে হাই অ্যাভেইলেবিলিটি নিশ্চিত করতে সহায়তা করে। ডেটার প্রতিটি শার্ডে কপি (Replica Set) রাখা হলে, এক শার্ড ডাউন হলেও অন্য শার্ড থেকে ডেটা অ্যাক্সেস করা যায়, ফলে সিস্টেম কখনও একেবারে অফলাইন হবে না।
- ল্যারি-স্কেল ডেটাবেস: যখন ডেটাবেসে বিপুল পরিমাণ ডেটা থাকে (যেমন: ১ টেরাবাইট বা তারও বেশি), তখন শার্ডিং ডেটাবেসকে পরিচালনা করা সহজ হয়ে ওঠে। ডেটা একক সার্ভারে রাখা কঠিন হয়ে যায় এবং শার্ডিংয়ের মাধ্যমে এই ডেটা সহজে ম্যানেজ করা যায়।
- কস্ট কার্যকরী এবং স্কেলেবল সলিউশন: শার্ডিং MongoDB এর মধ্যে স্কেলিং একটি কস্ট-কার্যকরী পদ্ধতি হতে পারে, কারণ আপনি যখন প্রয়োজন তখন আরও শার্ড যুক্ত করতে পারেন, যা পরিবেশের প্রয়োজন অনুসারে বাড়ানো বা কমানো সহজ করে তোলে।
Sharding কিভাবে কাজ করে?
- Shard Key:
MongoDB তে শার্ডিং সাধারণত একটি নির্দিষ্ট shard key এর ভিত্তিতে করা হয়। এটি সেই ফিল্ড যা ডেটা শার্ড করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, যদি আপনার ডেটাবেসে "age" ফিল্ড থাকে এবং আপনি এই ফিল্ডের ভিত্তিতে শার্ড করতে চান, তাহলে "age" ফিল্ড হবে আপনার shard key। এই শার্ড কীগুলির মান অনুযায়ী MongoDB ডেটাকে বিভিন্ন শার্ডে ভাগ করে। - Data Distribution:
MongoDB বিভিন্ন শার্ডে ডেটা বিতরণ করতে range-based sharding বা hash-based sharding পদ্ধতি ব্যবহার করে।- Range-based Sharding: ডেটা ফিল্ডের মানের পরিসীমা অনুসারে ডেটা বিভক্ত করা হয়। উদাহরণস্বরূপ, "age" ১-১০ পর্যন্ত একটি শার্ডে এবং ১১-২০ পর্যন্ত অন্য একটি শার্ডে সংরক্ষিত হবে।
- Hash-based Sharding: একটি হ্যাশ ফাংশন ব্যবহার করে ডেটার মান শার্ডে বিতরণ করা হয়। এটি সমানভাবে ডেটা বিতরণ করতে সহায়তা করে।
- Mongos Router:
Mongos হল একটি প্রক্রিয়া যা ক্লায়েন্ট অ্যাপ্লিকেশন এবং MongoDB শার্ড ক্লাস্টারের মধ্যে যোগাযোগ স্থাপন করে। এটি কুয়েরি পরিচালনা এবং শার্ডের মধ্যে ডেটা রিড ও রাইট করার জন্য দায়ী। Mongos কুয়েরি গ্রহণ করে এবং ডেটাকে সঠিক শার্ডে পাঠায়।
Sharding কনফিগারেশন
MongoDB তে শার্ডিং কনফিগার করতে, আপনাকে নিম্নলিখিত উপাদানগুলি সেটআপ করতে হবে:
- Sharded Cluster:
MongoDB তে শার্ডিং কার্যকর করার জন্য একটি শার্ডেড ক্লাস্টার তৈরি করতে হবে, যা অন্তর্ভুক্ত করবে:- শার্ড (Shards)
- কনফিগারেশন সার্ভার (Config Servers)
- Mongos রাউটার (Mongos Router)
Sharding Enable:
MongoDB তে শার্ডিং চালু করতে, প্রথমে sh.enableSharding() কমান্ড দিয়ে ডাটাবেসে শার্ডিং সক্ষম করতে হয়।sh.enableSharding("myDatabase")Shard Key নির্বাচন:
শার্ডিং শুরু করতে, একটি shard key নির্বাচন করতে হয় এবং তার ভিত্তিতে ডেটা ভাগ করা হয়।sh.shardCollection("myDatabase.myCollection", { age: 1 })
সারাংশ
Sharding MongoDB তে একটি গুরুত্বপূর্ণ ডিস্ট্রিবিউটেড ডেটাবেস কৌশল, যা ডেটার স্কেলেবিলিটি, পারফরম্যান্স এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করতে ব্যবহৃত হয়। এটি ডেটাকে একাধিক সার্ভারে ভাগ করে রাখে, যার ফলে বৃহত্তর পরিসরে ডেটা সংরক্ষণ এবং দ্রুত ডেটা অ্যাক্সেস সম্ভব হয়। MongoDB তে শার্ডিং ডেটাবেসের উন্নতি, দ্রুত পারফরম্যান্স, এবং বড় পরিসরের ডেটা ম্যানেজমেন্টের জন্য অপরিহার্য।
MongoDB তে শার্ডিং একটি প্রযুক্তি যা ডেটা একটি একক সার্ভারের মধ্যে সীমাবদ্ধ না রেখে একাধিক সার্ভারে বিতরণ করার মাধ্যমে স্কেলেবিলিটি এবং পারফরম্যান্স নিশ্চিত করে। MongoDB শার্ডিংয়ের মাধ্যমে ডেটার বড় পরিসরের কার্যক্রমকে আরও দ্রুত এবং কার্যকরভাবে পরিচালনা করতে সক্ষম হয়।
শার্ডিংয়ের মূল উপাদান হল Shard Key, যা ডেটা শার্ডে বিভক্ত করতে ব্যবহৃত হয়।
1. Shard Key
Shard Key হল MongoDB তে সেই ফিল্ড বা ফিল্ডের সংমিশ্রণ যা ডেটার বিভাজন এবং শার্ডিংয়ের জন্য ব্যবহৃত হয়। MongoDB এর শার্ডিং ফিচারটি শার্ড কী দ্বারা পরিচালিত হয়, এবং এটি ডেটাকে একাধিক শার্ড (অথবা সার্ভারে) ভাগ করে রাখে।
Shard Key নির্বাচন করার মাধ্যমে MongoDB ডেটার মধ্যে ব্যালান্স তৈরি করতে এবং শার্ডিং প্রক্রিয়াকে দ্রুততর এবং আরও কার্যকরী করে তোলে।
- Shard Key নির্বাচন: শার্ড কী এমন একটি ফিল্ড হওয়া উচিত যার মান সাধারণত বেশ পরিমাণে ভিন্ন হবে, যাতে ডেটার সমানভাবে বিতরণ সম্ভব হয়।
- Shard Key MongoDB তে ইনডেক্স করা থাকে, যা পারফরম্যান্স উন্নত করতে সাহায্য করে।
MongoDB তে Shard Key দুইটি প্রকারে হতে পারে:
1.1. Single Field Shard Key
একটি ফিল্ডের মানের ভিত্তিতে ডেটা শার্ডে ভাগ করা হয়। উদাহরণস্বরূপ, আপনি যদি age ফিল্ডকে শার্ড কী হিসেবে ব্যবহার করেন, তবে MongoDB ডেটাকে age ফিল্ডের মান অনুযায়ী ভাগ করে রাখবে।
db.collection.createIndex({ age: 1 });
db.collection.shardCollection("mydb.users", { age: 1 });
1.2. Compound Shard Key
একাধিক ফিল্ডের সংমিশ্রণ ব্যবহার করে ডেটাকে ভাগ করা হয়। এটি তখন ব্যবহার করা হয় যখন আপনি একটি একক ফিল্ডের উপর ডেটা সমানভাবে ভাগ করতে সক্ষম নন। উদাহরণস্বরূপ, আপনি যদি age এবং location দুটি ফিল্ড একসাথে শার্ড কী হিসেবে ব্যবহার করেন, MongoDB ডেটা উভয় ফিল্ডের মান অনুসারে শার্ডে ভাগ করবে।
db.collection.createIndex({ age: 1, location: 1 });
db.collection.shardCollection("mydb.users", { age: 1, location: 1 });
2. Data Distribution in Sharded Cluster
MongoDB শার্ডিংয়ে ডেটা একটি শার্ড ক্লাস্টারে বিতরণ হয়। শার্ডিংয়ের মাধ্যমে MongoDB ডেটাকে কীভাবে বিভক্ত এবং বিতরণ করে তা বুঝতে হলে প্রথমে জানতে হবে ডেটা কীভাবে ভাগ করা হয় এবং শার্ড কী কী ভূমিকা পালন করে।
2.1. Shards
MongoDB ক্লাস্টারের মধ্যে একাধিক শার্ড থাকে, যেখানে ডেটা শার্ড করা হয়। প্রতিটি শার্ড MongoDB সার্ভার হতে পারে যা ডেটা স্টোর করে। শার্ডগুলি স্বাধীনভাবে কাজ করে এবং ডেটার স্টোরেজ এবং প্রসেসিংয়ের কাজ করে।
2.2. Config Servers
Config servers MongoDB শার্ড ক্লাস্টারে মেটাডেটা এবং শার্ডিং কনফিগারেশন তথ্য সংরক্ষণ করে। এটি ডেটা কোথায় সংরক্ষিত আছে এবং কীভাবে ডেটা শার্ড করা হবে সে সম্পর্কে তথ্য রাখে।
- Config Servers MongoDB এর শার্ডিং পদ্ধতি পরিচালনা করে এবং মেটাডেটার মাধ্যমে ডেটা শার্ডের অবস্থান জানায়।
2.3. Query Routers (mongos)
Query Routers (mongos) হল MongoDB ক্লাস্টারের উপাদান যা ক্লায়েন্ট অ্যাপ্লিকেশন এবং শার্ড ক্লাস্টারের মধ্যে যোগাযোগ স্থাপন করে। এটি ডেটার শার্ডের অবস্থান নির্ধারণ করে এবং সঠিক শার্ডে কুয়েরি রিডাইরেক্ট করে।
- mongos ডেটার শার্ডের অবস্থান জানিয়ে ডেটাকে সঠিক শার্ডে রিডাইরেক্ট করে।
3. Shard Key এর নির্বাচন কিভাবে করবেন
শার্ড কী নির্বাচন একটি গুরুত্বপূর্ণ সিদ্ধান্ত, কারণ এটি MongoDB এর পারফরম্যান্স এবং স্কেলেবিলিটিকে প্রভাবিত করে। সঠিক শার্ড কী নির্বাচন করা হলে MongoDB খুব সহজেই বড় পরিসরে ডেটা পরিচালনা করতে সক্ষম হয়।
Shard Key নির্বাচন করার জন্য কিছু পরামর্শ:
- প্রচুর ভিন্ন মান: শার্ড কী এমন হতে হবে যার মান অনেক ভিন্ন থাকে, যাতে ডেটা সমানভাবে শার্ডে বিতরণ হয়।
- লোড ভারসাম্য: শার্ড কী এমন হতে হবে যা ভারসাম্যপূর্ণ লোড তৈরি করবে। অর্থাৎ, ডেটার প্রায় অর্ধেক অংশ এক শার্ডে যেতে না পারে।
- লিখন এবং পড়া কার্যক্রম: শার্ড কী নির্বাচন করতে হবে যা পড়া এবং লেখার কার্যক্রমে ভারসাম্য রাখতে সাহায্য করে। একে প্রচুর পাঠ এবং লেখার জন্য ব্যবহৃত শার্ড কী হিসেবে নির্বাচন করা উচিৎ।
4. Sharding-এ কিছু সাধারণ সমস্যা
MongoDB তে শার্ডিং ব্যবহারের কিছু সাধারণ সমস্যা রয়েছে, যেমন:
- Hot Spotting: যদি শার্ড কী নির্বাচন এমনভাবে করা হয় যে কিছু শার্ডে খুব বেশি ডেটা চলে আসে, তবে কিছু শার্ডে অতিরিক্ত লোড পড়বে। এটি পারফরম্যান্স কমিয়ে দেয়।
- একমাত্রিক শার্ড কী নির্বাচন: শুধুমাত্র একটি ফিল্ডের ভিত্তিতে শার্ডিং ডেটা অনুকূলভাবে বিতরণ না হতে পারে, বিশেষত যখন ফিল্ডে কম ভিন্নতা থাকে।
এটি এড়ানোর জন্য Compound Shard Key ব্যবহার করা যেতে পারে।
সারাংশ
MongoDB তে শার্ডিং একটি গুরুত্বপূর্ণ প্রযুক্তি যা ডেটার বড় পরিসরকে স্কেল করতে সহায়তা করে। Shard Key হল সেই ফিল্ড বা ফিল্ডের সংমিশ্রণ যা ডেটাকে শার্ডে ভাগ করার জন্য ব্যবহৃত হয়। Data Distribution এর মাধ্যমে MongoDB ডেটা একাধিক শার্ডে সমানভাবে বিতরণ করে এবং Config Servers এবং Query Routers এর মাধ্যমে শার্ড ক্লাস্টার পরিচালনা করা হয়। শার্ড কী সঠিকভাবে নির্বাচন করা MongoDB এর পারফরম্যান্স এবং স্কেলেবিলিটির জন্য অত্যন্ত গুরুত্বপূর্ণ।
MongoDB তে Sharding ব্যবহার করা হয় যখন ডেটাবেসের আকার খুব বড় হয়ে যায় এবং একক সার্ভার বা স্টোরেজ সিস্টেমের মধ্যে সমস্ত ডেটা রাখা সম্ভব হয় না। Sharding MongoDB তে ডেটার একটি বড় অংশকে একাধিক সার্ভারে ভাগ করে ডেটাবেসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করে। MongoDB তে Sharding একটি ডিস্ট্রিবিউটেড ডেটাবেস আর্কিটেকচার তৈরি করে, যেখানে ডেটা শার্ড বা অংশে বিভক্ত থাকে এবং ডেটাবেসের সব তথ্য সার্ভারে সমানভাবে বিতরণ করা হয়।
Sharding Cluster তৈরি এবং ম্যানেজমেন্টের জন্য MongoDB তে কয়েকটি প্রধান উপাদান থাকে:
- Shards: মূল ডেটা স্টোর। প্রতিটি শার্ড MongoDB এর একটি স্বাধীন সার্ভার বা ক্লাস্টার।
- Config Servers: শার্ড ক্লাস্টারের কনফিগারেশন এবং মেটাডেটা পরিচালনা করে। MongoDB তে তিনটি কনফিগারেশন সার্ভার রাখা হয়।
- Mongos: একটি রাউটিং উপাদান, যা ক্লায়েন্ট রিকুয়েস্ট শার্ডে রিডিরেক্ট করে এবং ডেটা পরিচালনার জন্য শার্ডগুলির সাথে যোগাযোগ করে।
Sharding Cluster তৈরি করার ধাপ
1. Shard Servers (Shards) তৈরি
প্রথমে শার্ড সার্ভারগুলি প্রস্তুত করতে হবে। প্রতিটি শার্ড একটি MongoDB ইন্সট্যান্স বা ক্লাস্টার হবে। শার্ড সার্ভারগুলি MongoDB Replica Set হতে পারে, যা ডেটার রেডানডেন্স এবং হাই অ্যাভেইলেবিলিটি নিশ্চিত করে।
Shard Servers তৈরি করার জন্য কমান্ড:
mongod --shardsvr --replSet shard1 --port 27018 --dbpath /data/shard1 --bind_ip localhost
উপরের কমান্ডটি MongoDB সার্ভারের জন্য --shardsvr অপশনটি ব্যবহার করে শার্ড সার্ভার সেটআপ করবে এবং এটি Replica Set এর অংশ হবে। একাধিক শার্ড সার্ভার তৈরি করতে হবে এবং প্রতিটি সার্ভারের জন্য আলাদা --port ব্যবহার করতে হবে।
2. Config Servers তৈরি
Config servers MongoDB শার্ড ক্লাস্টারের মেটাডেটা এবং কনফিগারেশন তথ্য সংরক্ষণ করে। MongoDB তে ৩টি config server সাধারণত ব্যবহার করা হয়।
Config Servers তৈরি করার জন্য কমান্ড:
mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb --bind_ip localhost
Config servers তৈরির পর, MongoDB Replica Set হিসেবে কনফিগার করা হয়, যাতে এটি ডেটাবেসের কনফিগারেশন এবং শার্ড ডেটা সম্পর্কে তথ্য সিঙ্ক্রোনাইজ করতে পারে।
3. Mongos (Router) ইনস্টল এবং কনফিগার করা
Mongos একটি রাউটার যা ক্লায়েন্ট রিকুয়েস্টগুলি শার্ড সার্ভারে রিডিরেক্ট করে। একাধিক mongos ইনস্ট্যান্স ব্যবহার করা যেতে পারে।
Mongos ইনস্টল এবং কনফিগার করার জন্য কমান্ড:
mongos --configdb configReplSet/localhost:27019 --port 27017
এটি Mongos রাউটার তৈরি করবে, যা config servers থেকে ডেটা রাউট করবে এবং ক্লায়েন্ট রিকুয়েস্টগুলি সঠিক শার্ডে পাঠাবে।
4. Shard Cluster সংযুক্ত করা
একবার শার্ড সার্ভার, config servers এবং mongos রাউটার তৈরি হলে, আপনাকে শার্ডগুলিকে ক্লাস্টারে সংযুক্ত করতে হবে। প্রথমে MongoDB ক্লাস্টারের config server কে প্রাথমিক config replica set হিসেবে কনফিগার করতে হবে।
MongoDB Replica Set এ শার্ড যোগ করার জন্য কমান্ড:
sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27019")
এখানে "shard1" এবং "shard2" শার্ড সার্ভারের নাম, এবং localhost:27018, localhost:27019 এ শার্ড সার্ভারের পোর্ট। এটি শার্ড সার্ভারকে MongoDB ক্লাস্টারে যোগ করবে।
5. Shard Key নির্বাচন
MongoDB তে শার্ডিং কাজ করার জন্য একটি shard key প্রয়োজন। Shard key হল সেই ফিল্ড, যার মাধ্যমে MongoDB ডেটাকে বিভিন্ন শার্ডে ভাগ করে দেয়। এটি ডেটার সমানভাবে বিতরণ এবং কুয়েরি অপারেশনগুলির পারফরম্যান্স উন্নত করতে সাহায্য করে।
Shard key নির্বাচনের সময় কিছু বিষয় বিবেচনা করা জরুরি, যেমন:
- নমনীয়তা: ডেটার অধিকাংশ রিড এবং রাইট অপারেশন একই শার্ডে হওয়া উচিত।
- গতি: shard key এমনভাবে নির্বাচন করা উচিত যাতে ডেটা সঠিকভাবে ভাগ করা যায়।
উদাহরণস্বরূপ, একটি কালেকশনের শার্ডিং চালু করার জন্য:
sh.shardCollection("database.collection", { "field_name": 1 })
এটি field_name ফিল্ডটি ব্যবহার করে কালেকশনটি শার্ড করে।
Sharding Cluster পরিচালনা
1. Sharding ক্লাস্টার স্ট্যাটাস পরীক্ষা
MongoDB ক্লাস্টারের শার্ডিং স্ট্যাটাস পরীক্ষা করতে:
sh.status()
এটি MongoDB ক্লাস্টারের বর্তমান শার্ডিং স্ট্যাটাস এবং শার্ডগুলির অবস্থা প্রদর্শন করবে।
2. Shard Key পরিবর্তন
MongoDB তে শার্ডিং সম্পাদনার সময় শার্ড কী পরিবর্তন করা কঠিন, কারণ শার্ডিং শুরু হওয়ার পর শার্ড কী পরিবর্তন করা অনুমোদিত নয়। তবে, প্রয়োজনে কিছু নির্দিষ্ট পদ্ধতির মাধ্যমে এটি করা যেতে পারে, যেমন ডেটা রি-শার্ডিং।
3. শার্ড রিমুভ করা
MongoDB তে একটি শার্ড রিমুভ করতে:
sh.removeShard("shard1")
এটি নির্দিষ্ট শার্ডটি MongoDB ক্লাস্টার থেকে সরিয়ে ফেলবে।
সারাংশ
MongoDB তে Sharding একটি ডিস্ট্রিবিউটেড আর্কিটেকচার তৈরি করার জন্য ব্যবহৃত হয়, যা ডেটাকে বিভিন্ন শার্ড সার্ভারে ভাগ করে স্কেলেবিলিটি এবং পারফরম্যান্স বৃদ্ধি করে। MongoDB ক্লাস্টারে Shards, Config Servers, এবং Mongos এর মাধ্যমে ডেটার ভাগ করা এবং পরিচালনা করা হয়। Shard Key নির্বাচন অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডেটার সঠিকভাবে ভাগ করার জন্য নির্ধারিত হয়। Sharding MongoDB তে বড় পরিসরের ডেটাবেস ব্যবস্থাপনায় সহায়ক এবং এটি উচ্চ পারফরম্যান্স প্রদান করে।
MongoDB একটি ডিস্ট্রিবিউটেড ডেটাবেস সিস্টেম, যা শার্ডিং সমর্থন করে। শার্ডিং MongoDB ডেটাবেসে বড় পরিসরে ডেটা সংরক্ষণ এবং প্রসেস করতে সাহায্য করে, যেখানে ডেটাকে একাধিক সার্ভারে বিভক্ত করে রাখা হয়। এই প্রক্রিয়াটি MongoDB এর পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সহায়ক। তবে শার্ডিং ব্যবহারের সঙ্গে পারফরম্যান্স এবং ব্যালেন্সিংও অত্যন্ত গুরুত্বপূর্ণ।
এখানে Shard Performance এবং Balancing সম্পর্কে বিস্তারিত আলোচনা করা হলো।
1. Shard Performance
MongoDB তে শার্ডিংয়ের মাধ্যমে ডেটাকে একাধিক শার্ডে ভাগ করা হয়, যাতে সার্ভারগুলির মধ্যে কাজ ভাগ হয়ে যায় এবং পারফরম্যান্স বাড়ে। শার্ডিং পারফরম্যান্স উন্নত করতে কিছু গুরুত্বপূর্ণ বিষয় রয়েছে:
1.1. Shard Key নির্বাচন
Shard Key নির্বাচন MongoDB তে পারফরম্যান্সের ক্ষেত্রে সবচেয়ে গুরুত্বপূর্ণ বিষয়। শার্ড কী হল সেই ফিল্ড বা ফিল্ডগুলির সমন্বয় যা MongoDB ডেটার শার্ডিংয়ের জন্য ব্যবহার করে। একটি ভাল শার্ড কী নির্বাচন না করলে ডেটার সঠিকভাবে বিতরণ করা যাবে না এবং এতে পারফরম্যান্স সমস্যা সৃষ্টি হতে পারে।
- বয়স বা নাম এর মতো ফিল্ড শার্ড কী হিসেবে ব্যবহার করা যেতে পারে, তবে খুব কম বা খুব বেশি রেঞ্জও সমানভাবে শার্ডিং সমস্যার সৃষ্টি করতে পারে।
- একই রেঞ্জে ডেটা ভেঙে গেলে, কিছু শার্ড বেশি লোডের অধীনে আসবে, ফলে পারফরম্যান্স কমে যাবে।
শার্ড কী নির্বাচন করার সময় লক্ষ্য রাখতে হবে:
- ডেটা সমানভাবে শার্ডে বিতরণ হতে হবে।
- রেঞ্জ কুয়েরি এবং আঙুল কুয়েরি (point queries) এর ক্ষেত্রে ভাল পারফরম্যান্স আসবে।
- শার্ড কী নির্বাচন করতে বিভিন্ন ধরনের কুয়েরি প্যাটার্ন ও আর্কিটেকচার বিবেচনায় রাখতে হবে।
1.2. Write Concern এবং Read Concern
MongoDB তে শার্ডিংয়ের মাধ্যমে ডেটা একাধিক সার্ভারে সংরক্ষিত থাকে, তাই পারফরম্যান্সের জন্য Write Concern এবং Read Concern নির্বাচন করাও গুরুত্বপূর্ণ।
- Write Concern: MongoDB এর লেখার কাজ কতটা নিশ্চিত হতে হবে তা নির্ধারণ করে। উচ্চ write concern মানে হলো ডেটা একাধিক নোডে লিখা নিশ্চিত করা, যা পারফরম্যান্সের উপর প্রভাব ফেলতে পারে।
- Read Concern: MongoDB তে ডেটা পড়ার সময় কতটা কনসিস্টেন্ট ডেটা চাই, তা নির্ধারণ করে। কিছুক্ষেত্রে ডেটার স্ট্যালিনেস (staleness) সহ্য করা যায় এবং কিছুক্ষেত্রে একে আটকানো প্রয়োজন।
1.3. Indexing in Sharded Clusters
MongoDB তে শার্ডিংয়ের পর ইনডেক্সিং এর প্রভাবও পড়বে পারফরম্যান্সে। শার্ডিংয়ের মাধ্যমে যদি আপনি সঠিক ইনডেক্স তৈরি না করেন, তবে শার্ডিংয়ের সুবিধা ভোগ করতে পারবেন না। প্রতিটি শার্ডে আলাদা ইনডেক্স রাখতে হবে, যা কুয়েরি এক্সিকিউশনকে দ্রুত করবে।
- Shard Key Index: শার্ড কী অবশ্যই ইনডেক্স হওয়া উচিত, যাতে কুয়েরি করতে পারফরম্যান্স ভালো থাকে।
- Compound Index: একাধিক ফিল্ডের উপর ইনডেক্স ব্যবহার করলে, বিশেষ করে যখন কুয়েরি একাধিক ফিল্ড ব্যবহার করে থাকে, পারফরম্যান্স আরও বাড়ানো যায়।
2. Balancing
MongoDB তে ডেটার শার্ডিংয়ের মাধ্যমে ডেটা শার্ডগুলির মধ্যে সমানভাবে বিতরণ করার প্রক্রিয়া balancing। যখন এক বা একাধিক শার্ডে বেশি ডেটা জমে যায়, তখন MongoDB এটির ভারসাম্য সাধন করে (rebalancing)।
2.1. Balancing Process
MongoDB তে balancing প্রক্রিয়া স্বয়ংক্রিয়ভাবে কাজ করে এবং এটি তখনই শুরু হয় যখন কোনও শার্ডে ডেটার পরিমাণ খুব বেশি হয়ে যায় এবং অন্যান্য শার্ডগুলির সাথে তুলনা করা হয়। Balancer কাজ করে এবং শার্ডগুলির মধ্যে ডেটার ভারসাম্য রাখে।
MongoDB তে balancing শুরু হওয়ার সময়:
- Mongos ক্লায়েন্ট সার্ভার একটি ভারসাম্য ব্যবস্থা ট্রিগার করে, যেখানে ডেটা শার্ড থেকে অন্য শার্ডে সরানো হয়।
- ডেটা মুভমেন্ট শার্ডগুলির মধ্যে chunks নামে পরিচিত, যা MongoDB তে ডেটার শাখা (part) হিসেবে কাজ করে।
2.2. Chunking
MongoDB তে ডেটা শার্ড করার সময় ডেটা chunks এ বিভক্ত হয়ে থাকে। এক একটি chunk MongoDB তে একটি ডেটা অংশ ধারণ করে এবং শার্ডিংয়ের মাধ্যমে এটি এক শার্ড থেকে অন্য শার্ডে স্থানান্তরিত হতে পারে।
- প্রতিটি chunk একটি নির্দিষ্ট পরিমাণ ডেটা ধারণ করে, এবং যখন chunk বড় হয়ে যায়, তখন এটি শার্ডে পুনঃবিভক্ত হতে পারে।
- MongoDB balancing প্রক্রিয়া chunk গুলিকে নতুন শার্ডে সরিয়ে নিয়ে ডেটার ভারসাম্য নিশ্চিত করে।
2.3. Balancing Criteria
MongoDB balancing কার্যকর করতে হলে কিছু শর্ত পূর্ণ করতে হবে:
- Chunk Size: একটি chunk এর আকার কত হবে তা MongoDB কনফিগারেশন ফাইলে সেট করা থাকে। সাধারণত 64MB এর আকারে chunk গুলি বিভক্ত হয়।
- Shards' Load: শার্ডগুলির মধ্যে ভারসাম্য নিশ্চিত করতে MongoDB চেক করে কোন শার্ড বেশি লোড নেয় এবং সেই অনুযায়ী ডেটা সরানো হয়।
2.4. Manual Balancing Control
MongoDB তে balancing অনেক সময় স্বয়ংক্রিয়ভাবে চলে, তবে আপনি যদি চান, আপনি ম্যানুয়ালি balancing প্রক্রিয়া নিয়ন্ত্রণ করতে পারেন। MongoDB এর balancerStart এবং balancerStop কমান্ড দিয়ে balancing চালু বা বন্ধ করা সম্ভব।
// Balancer চালু করা
db.adminCommand({ balancerStart: 1 });
// Balancer বন্ধ করা
db.adminCommand({ balancerStop: 1 });
সারাংশ
MongoDB তে Shard Performance এবং Balancing অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ডিস্ট্রিবিউটেড ডেটাবেসের স্কেলেবিলিটি ও পারফরম্যান্সকে নির্ধারণ করে। সঠিক Shard Key নির্বাচন এবং ইনডেক্সিং MongoDB এর পারফরম্যান্সকে ত্বরান্বিত করে, এবং Balancing MongoDB এর মধ্যে ডেটার ভারসাম্য এবং ডেটা স্থানান্তর কার্যকরীভাবে পরিচালনা করে। শার্ডিংয়ের মাধ্যমে ডেটা বৃদ্ধি ও ব্যবস্থাপনা সহজ হয়, তবে সঠিক কনফিগারেশন এবং পরিকল্পনা অবশ্যই প্রয়োজন যাতে MongoDB ডেটাবেসের পারফরম্যান্স এবং স্থায়িত্ব নিশ্চিত হয়।
Read more