মূলত ২৭ নভেম্বর, ২০২০-এ ObjectRocket.com/blog-এ প্রকাশিত।
ইলাস্টিকসার্চ® ডিফল্ট সেটিংসের সাথে আপনার ক্লাস্টারের জুড়ে ডেটা ছড়িয়ে দিতে দারুণ, কিন্তু একবার আপনার ক্লাস্টার বড় হলে, ডিফল্ট সেটিংস আডজাস্ট করুন কার্যকারিতা বাড়াতে। আসুন শার্ডিংর কিছু বেসিক এবং কিছু ইন্ডেক্সিং ও শার্ড সেরা অনুশীলন নিয়ে আলোচনা করি।
ইলাস্টিকসার্চ শার্ডিং-এ একটি পরিচিতি
ইলাস্টিকসার্চ শার্ড কীভাবে কাজ করে সে সম্পর্কে অনেক ডকুমেন্ট আছে, কিন্তু শার্ডিংর বেসিক কনসেপ্ট হল আপনার ডেটাকে বেশ কিছু ছোট টুকরোতে ভাঙা যাতে সার্চ একসাথে একাধিক অংশে প্যারালлеলভাবে অপারেট করতে পারে। ক্লাস্টারিং এবং ইন্ডেক্স ফাংশনের প্যারাললাইজেশন সুবিধার্থে, আপনার ইলাস্টিকসার্চ ইনস্ট্যান্সের প্রতিটি ইন্ডেক্সকে নম্বরযুক্ত স্লাইসের ভাগ করুন। এই স্লাইসগুলোকে শার্ড বলা হয়। আসুন তাদের কিছু মূল আচরণ দেখি:
- প্রতিটি শার্ড ইন্ডেক্সের নাম্বার অফ রেপ্লিকা সেটিংয়ের ওপর নির্ভর করে রেপ্লিকেট হয়। তাই, নাম্বার অফ রেপ্লিকা সেটিং এক হলে, প্রতিটি শার্ডের দুটি কপি থাকে: একটি প্রাইমারি শার্ড এবং একটি রেপ্লিকা শার্ড। প্রাইমারি শার্ড হল মূল শার্ড এবং
ইন্ডেক্সিং/রাইটওসার্চ/রিডঅপারেশনের জন্য ব্যবহৃত হয়, যখন রেপ্লিকা শার্ডগুলো শুধুসার্চ/রিডঅপারেশনের জন্য এবং প্রাইমারি ফেল করলে রিকভারির জন্য ব্যবহৃত হয়। - রেপ্লিকা শার্ড অবশ্যই তাদের পেরেন্ট প্রাইমারি শার্ড থেকে আলাদা হোস্টে থাকতে হবে।
- শার্ডগুলো ডিফল্টভাবে ক্লাস্টারের হোস্ট সংখ্যার জুড়ে স্বয়ংক্রিয়ভাবে ছড়িয়ে পড়ে, কিন্তু একই ফিজিক্যাল হোস্টে একাধিক প্রাইমারি শার্ড থাকতে পারে। আপনি ইলাস্টিকসার্চ সেটিংস ব্যবহার করে এই আচরণ মডিফাই করতে পারেন (রিব্যালেন্সিং, শার্ডস অ্যালোকেশন, ইত্যাদি), কিন্তু এই প্রক্রিয়া এই পোস্টের সুযোগের বাইরে।
- প্রতিটি শার্ড শুধুমাত্র একটি হোস্টে থাকতে হবে কারণ শার্ড अविभাজ্য।
- আপনি ইন্ডেক্স তৈরি করার সময় একটি ইন্ডেক্স কতগুলো শার্ড তৈরি করবে সেটি সেট করতে পারেন, বা একটি গ্লোবাল ডিফল্ট ব্যবহার করতে পারেন। একবার ইন্ডেক্স তৈরি হলে, রিইন্ডেক্সিং ছাড়া শার্ড সংখ্যা পরিবর্তন করা যায় না।
- আপনি ইন্ডেক্স তৈরি করার সময় একটি ইন্ডেক্সের কতগুলো রেপ্লিকা থাকবে সেটি সেট করতে পারেন, বা একটি গ্লোবাল ডিফল্ট ব্যবহার করতে পারেন। ইন্ডেক্স তৈরি হওয়ার পর এই সংখ্যা পরিবর্তন করা যায়।
আসুন একটি ছোট উদাহরণ দেখি। আমি একটি ইন্ডেক্স তৈরি করেছি যার শার্ড কাউন্ট তিন এবং রেপ্লিকা সেটিং এক। আপনি আগের ডায়াগ্রামে দেখতে পাচ্ছেন, ইলাস্টিকসার্চ আপনার জন্য ছয়টি শার্ড তৈরি করেছে: তিনটি প্রাইমারি শার্ড (Ap, Bp, এবং Cp) এবং তিনটি রেপ্লিকা শার্ড (Ar, Br, এবং Cr)।
ইলাস্টিকসার্চ নিশ্চিত করে যে রেপ্লিকা এবং প্রাইমারি আলাদা হোস্টে থাকে, কিন্তু আপনি একই হোস্টে একাধিক প্রাইমারি শার্ড অ্যালোকেট করতে পারেন। হোস্টের বিষয়ে কথা বললে, আসুন ডুব মاریম কিভাবে আপনি আপনার হোস্টগুলোর জুড়ে শার্ড অ্যালোকেট করেন।
শার্ড অ্যালোকেশন এবং ক্লাস্টারড ইলাস্টিকসার্চ
ইলাস্টিকসার্চ ডিফল্টভাবে সব উপলব্ধ হোস্টের জুড়ে শার্ড অ্যালোকেট করার চেষ্টা করে। র্যাকস্পেস ObjectRocket-এ, প্রতিটি ক্লাস্টার মাস্টার নোড, ক্লায়েন্ট নোড, এবং ডেটা নোড নিয়ে গঠিত। আমাদের আর্কিটেকচারের ডেটা নোডগুলো বালতি হিসেবে কাজ করে যাগুলোতে আপনি শার্ড অ্যাসাইন করতে পারেন।
আগের উদাহরণটি ব্যবহার করে, আসুন সেই ছয়টি শার্ডকে ObjectRocket ফর ইলাস্টিকসার্চ ক্লাস্টারের সাথে দুইটি ডেটা নোডে (ন্যূনতম) অ্যাসাইন করি। নিচের ডায়াগ্রামে আপনি দেখতে পাচ্ছেন যে প্রতিটি শার্ডের জন্য, প্রাইমারি একটি ডেটা নোডে পড়ে, যখন রেপ্লিকা গ্যারান্টিড ভাবে অন্য নোডে থাকে। মনে রাখবেন এখানে শুধু একটি সম্ভাব্য অ্যালোকেশন দেখানো হয়েছে। অ্যালোকেশন যাই হোক, একমাত্র নিশ্চিত বিষয় হল একটি রেপ্লিকা সবসময় তার প্রাইমারি থেকে আলাদা একটি ডেটা নোডে রাখা হবে।
এখন, আসুন এই উদাহরণটি প্রসারিত করি এবং একটি তৃতীয় ডেটা নোড যোগ করি। লক্ষ্য করুন যে দুটি শার্ড নতুন ডেটা নোডে সরানো হয়েছে, তাই আপনার প্রতিটি নোডে দুটি শার্ড আছে।
শেষে, আসুন এই ক্লাস্টারে একটি নতুন ইন্ডেক্স যোগ করি যার শার্ড কাউন্ট দুই এবং নাম্বার অফ রেপ্লিকা দুই সেট করা আছে। এটি আপনাকে দুটি নতুন প্রাইমারি (Xp এবং Yp) এবং চারটি রেপ্লিকা (Xr0, Xr1, Yr0, Yr1) দেয় যেগুলো আপনি ক্লাস্টারের জুড়ে ছড়িয়ে দিতে পারেন নিচের ছবিতে দেখানো মতো:
এটিই সব।
ফাঁদগুলো
ইলাস্টিকসার্চ আপনার জন্য সব কঠিন কাজ করে, কিন্তু কিছু ফাঁদ আছে जिनसे বাঁচতে হবে।
ফাঁদ #১—বিশাল ইন্ডেক্স এবং বিশাল শার্ড
বিশাল ইন্ডেক্স এবং বিশাল শার্ডের সমস্যা সমাধান করা ইলাস্টিকসার্চে সবচেয়ে সহজ সমস্যার একটি। একটি ব্যবহারকারী একটি খুব ম্যানেজেবল সিঙ্গল ইন্ডেক্স দিয়ে শুরু করে। যাইহোক, যেনে যেনে তাদের অ্যাপ্লিকেশন বড় হয়, তাদের ইন্ডেক্সও বড় হয়। এতে বিশাল শার্ড তৈরি হয় কারণ শার্ড সাইজ সরাসরি ক্লাস্টার ডেটার পরিমাণের ওপর নির্ভরশীল।
এটি যে প্রথম সমস্যা তৈরি করে তা হল ক্লাস্টার ইউটিলাইজেশনে খারাপ দক্ষতা। শার্ডগুলো বড় হলে, সেগুলো ডেটা নোডে রাখা কঠিন হয়ে যায়। একটি শার্ড সেখানে স্টোর করতে ডেটা নোডের বড় ব্লক ফ্রি স্পেস লাগে। এই অবস্থা নোডগুলোর সাথে অনেক অনব্যবহৃত, বর্জিত স্পেস নিয়ে আসে। উদাহরণস্বরূপ, যদি আমার ৮ GB ডেটা নোড থাকে, কিন্তু প্রতিটি শার্ড ৬ GB হয়, তবে আমার প্রতিটি ডেটা নোডে ২ GB বর্জিত থাকবে। দ্বিতীয় সমস্যা হল হট স্পটিং। আপনি যদি আপনার ডেটাকে কম শার্ডে কনসোলিডেট করেন, তবে কমপ্লেক্স কোয়ারীগুলো বড় সংখ্যক নোডের জুড়ে বিভক্ত হয়ে প্যারালлеল এক্সিকিউট হতে পারবে না।
ইন্ডেক্সের সাথে কঙ্গালি করবেন না
স্ট্যালড স্পেস সমস্যা সমাধান করতে একাধিক ইন্ডেক্স ব্যবহার করুন। আপনার ডেটাকেই একাধিক ইন্ডেক্সের জুড়ে ছড়িয়ে দিন যাতে ক্লাস্টারে শার্ডের সংখ্যা বাড়ে এবং ডেটা সমানভাবে বিতরণ হয়। এছাড়া, টেট্রিস গেমের মতো, যখন ইলাস্টিকসার্চ শার্ড প্লেস করে, একাধিক ইন্ডেক্স কিউরেট করা সহজ। ইলাস্টিকসার্চের এলিয়াস ক্যাপাবিলিটি একাধিক ইন্সট্যান্সকে আপনার অ্যাপের কাছে সিঙ্গল ইন্ডেক্স হিসেবে প্রদর্শন করতে পারে। ইলাস্টিক স্ট্যাকের অধিকাংশ ডিফল্টভাবে ডেইলি ইন্ডেক্স তৈরি করে, যা একটি ভালো অভ্যাস। আপনি তারপর এলিয়াস ব্যবহার করে সার্চের সুযোগ নির্দিষ্ট ডেট রেঞ্জে সীমাবদ্ধ করতে পারেন, কিউরেটর ব্যবহার করে পুরনো ইন্ডেক্স বয়স কাটলে রিমুভ করতে পারেন, এবং পুরনো ডেটা রিইন্ডেক্স করা ছাড়া আপনার ডেটা বাড়ার সাথে সাথে ইন্ডেক্স সেটিংস মডিফাই করতে পারেন।
আপনার ইন্ডেক্স সাইজ বাড়ার সাথে সাথে শার্ড কাউন্ট বাড়ান
বেশি ফ্রিকোয়েন্টলি ইন্ডেক্স যোগ করুন এবং আপনার ইন্ডেক্স বাড়ার সাথে সাথে শার্ড কাউন্ট বাড়ান। আপনি শার্ড সাইজ আপনার কাঙ্ক্ষিত স্পেস অতিক্রম করতে শুরু করলে, আপনি আপনার ইন্ডেক্স টেমপ্লেট (বা যা আপনি নতুন ইন্ডেক্স তৈরি করতে ব্যবহার করেন) আপডেট করতে পারেন যাতে প্রতিটি ইন্ডেক্সের জন্য আরও বেশি শার্ড ব্যবহার করা হয়। যাইহোক, এটি শুধু তখনই সাহায্য করে যখন আপনি আঘাত নতুন ইন্ডেক্স সৃষ্টি করেন, তাই এই সুপারিশটি দ্বিতীয়ভাবে লিস্ট করা হয়েছে। অন্যথায়, শার্ড কাউন্ট মডিফাই করতে আপনাকে রিইন্ডেক্স করতে হবে, যা একাধিক ইন্ডেক্স ম্যানেজ করার চেয়ে বেশি কাজ।
আমাদের রুল অফ থাম্ব: যদি একটি শার্ড ডেটা নোডের সাইজের ৪০%-এর চেয়ে বড় হয়, তবে সেই শার্ড সম্ভবত খুব বড়। এই ক্ষেত্রে, আমরা আরও বেশি শার্ড বিশিষ্ট একটি ইন্ডেক্সে রিইন্ডেক্স করার সুপারিশ করি বা একটি বড় প্ল্যান সাইজে (প্রতি ডেটা নোডে বেশি ক্যাপাসিটি) যাওয়ার সুপারিশ করি।
ফাঁদ #২—খুব বেশি ইন্ডেক্স বা শার্ড
বিপরীত দিক হল খুব বেশি ইন্ডেক্স বা শার্ড। আগের সেকশন পড়লে আপনি বলতে পারেন, "ঠিক আছে। আমি প্রতিটি ডককে তার ইন্ডেক্সে রাখব এবং মিলিয়ন মিলিয়ন শার্ড তৈরি করব।" সমস্যাটা হল ইন্ডেক্স এবং শার্ডের ওভারহেড থাকে। সেই ওভারহেড স্টোরেজ, মেমরি রিসোর্স, এবং প্রসেসিং পারফরম্যান্স-এ প্রকাশ পায়।
কারণ ক্লাস্টারকে সব শার্ডের স্টেট এবং তারা কোথায় অবস্থিত সেটি মেইনটেইন করতে হয়, অতিরিক্ত সংখ্যক শার্ড একটি বড় বুকkeeপিং অপারেশন হয়ে যায়, যা মেমরি ইউজকে প্রভাবিত করে। এছাড়া, কারণ আপনাকে কোয়ারীগুলো আরও বেশি ভাগ করতে হয়, আপনি স্ক্যাটার বা গ্যাথার ফর কোয়ারী-এ অনেক বেশি সময় ব্যয় করেন। এই ফাঁদটি ক্লাস্টারের সাইজ, ইউজ কেস, এবং অন্যান্য ফ্যাক্টরের ওপর খুব নির্ভরশীল, কিন্তু সাধারণত আমরা কিছু সুপারিশের মাধ্যমে এটি মিটিগেট করতে পারি।
শার্ড ৫০ GB-এর চেয়ে বড় হওয়া উচিত নয়
সাধারণত, ২৫ GB বড় শার্ডের জন্য একটি আদর্শ সাইজ, এবং ৫০ GB রিইন্ডেক্সিং দাবি করে। এই বিবেচনা শার্ডের পারফরম্যান্স এবং প্রয়োজনে সেই শার্ডটি সরানোর প্রক্রিয়ার সাথে সম্পর্কিত। রিব্যালেন্সিং সময়, শার্ডগুলো ক্লাস্টারের অন্য একটি নোডে সরানো হয়। ৫০ GB ডেটা ট্রান্সফার অনেক সময় নিতে পারে এবং পুরো প্রক্রিয়ার 동안 দুটি নোডকে বাঁধে রাখে।
শার্ড সাইজ ডেটা নোড সাইজের ৪০%-এর চেয়ে কম রাখুন
যেvelop আর্লি اليمেনশনে উল্লেখ করা হয়েছে, দ্বিতীয় শার্ড সাইজ মেট্রিক যা আমাদের আগ্রহ সেটি হল একটি শার্ড ডেটা নোড ক্যাপাসিটির কত শতাংশ দখল করে। র্যাকস্পেস ObjectRocket সার্ভিসে, আমরা ভিন্ন প্ল্যান সাইজ অফার করি যা ডেটা নোডগুলোর স্টোরেজের সাথে সম্পর্কিত। আমরা ক্লাস্টার এবং শার্ডকে সাইজ করার চেষ্টা করি যাতে সবচেয়ে বড় শার্ডগুলো ডেটা নোডের ক্যাপাসিটির ৪০%-এর বেশি দখল না করে। একাধিক ভিন্ন সাইজের ইন্ডেক্স বিশিষ্ট ক্লাস্টারে, এটি прили সফল। যাইহোক, খুব কম বিশাল ইন্ডেক্স বিশিষ্ট ক্লাস্টারে, আমরা আরও আক্রমকভাবে চেষ্টা করি ডেটা নোডের ক্যাপাসিটি ৩০%-এর নিচে রাখতে।
আদর্শভাবে, নিশ্চিত করুন আপনি ডেটা নোডে ক্যাপাসিটি বর্জিত করছেন না। আপনার শার্ডগুলো যদি ডেটা নোডের সাইজের প্রায় ৪৫% হয়, তবে আপনাকে রফলি অর্ধেক ইউটিলাইজেশন বালা একটি ডেটা নোডের প্রয়োজন হবে সেই শার্ড প্লেস করতে। এটা অনেক অপ্রयुक्त স্পেয়ার ক্যাপাসিটি!
উপসংহার
সঠিক শার্ড এবং ইন্ডেক্সিং সেটিংস নির্বাচন করা কঠিন হতে পারে, কিন্তু প্রিমিটিভ প্ল্যানিং, কিছু ভালো সিদ্ধান্ত আপ-ফ্রন্টে নিয়ে, এবং চলমান টিউনিং করে, আপনি আপনার ক্লাস্টারকে স্বাস্থ্যকর এবং সর্বোত্তমভাবে চালাতে পারেন। আমরা ব্যবসায়গুলো তাদের ইলাস্টিকসার্চ ইনস্ট্যান্স পরিশোধ করতে সবসময় সাহায্য করি।
র্যাকস্পেস DBA সার্ভিস সম্পর্কে আরও জানুন।
ফিডব্যাক ট্যাব ব্যবহার করে মন্তব্য করুন বা প্রশ্ন জিজ্ঞাসা করুন। আপনি সেলস চ্যাট-এ ক্লিক করেও এখনই কথা বলার শুরু করতে পারেন।