paint-brush
4 ইলাস্টিক সার্চ পারফরম্যান্স চ্যালেঞ্জ এবং কীভাবে সেগুলি সমাধান করা যায়দ্বারা@rocksetcloud
4,113 পড়া
4,113 পড়া

4 ইলাস্টিক সার্চ পারফরম্যান্স চ্যালেঞ্জ এবং কীভাবে সেগুলি সমাধান করা যায়

দ্বারা Rockset5m2024/05/16
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই ব্লগে, আমরা ধীর সূচীকরণ, অনুসন্ধানের গতি, শার্ড এবং সূচকের আকার এবং মাল্টি-টেনেন্সি সহ স্কেলে সাধারণ ইলাস্টিকসার্চ কর্মক্ষমতা চ্যালেঞ্জগুলির সমাধানের মধ্য দিয়ে চলেছি।
featured image - 4 ইলাস্টিক সার্চ পারফরম্যান্স চ্যালেঞ্জ এবং কীভাবে সেগুলি সমাধান করা যায়
Rockset HackerNoon profile picture


ইলাস্টিক সার্চ স্কেলিং

ইলাস্টিকসার্চ হল একটি NoSQL সার্চ এবং অ্যানালিটিক্স ইঞ্জিন যা লগ অ্যানালিটিক্স, টেক্সট সার্চ, রিয়েল-টাইম অ্যানালিটিক্স এবং আরও অনেক কিছুর জন্য ব্যবহার করা সহজ। এটি বলেছিল, হুডের নীচে ইলাস্টিকসার্চ হল একটি জটিল, বিতরণ করা সিস্টেম যেখানে অনেকগুলি লিভার রয়েছে যা সর্বোত্তম কর্মক্ষমতা অর্জনের জন্য টানতে পারে।


এই ব্লগে, আমরা ধীর সূচীকরণ, অনুসন্ধানের গতি, শার্ড এবং সূচকের আকার এবং মাল্টি-টেনেন্সি সহ স্কেলে সাধারণ ইলাস্টিকসার্চ কর্মক্ষমতা চ্যালেঞ্জগুলির সমাধানের মধ্য দিয়ে চলেছি। অনেক সমাধান প্রকৌশল নেতা এবং স্থপতিদের সাথে সাক্ষাত্কার এবং আলোচনা থেকে উদ্ভূত হয় যাদের হাতে সিস্টেমটি স্কেলে পরিচালনা করার অভিজ্ঞতা রয়েছে।

আমি কিভাবে ইলাস্টিকসার্চে ইন্ডেক্সিং কর্মক্ষমতা উন্নত করতে পারি?

উচ্চ লেখার থ্রুপুট আছে এমন কাজের চাপের সাথে মোকাবিলা করার সময়, ইন্ডেক্সিং কর্মক্ষমতা বাড়াতে আপনাকে ইলাস্টিকসার্চ টিউন করতে হতে পারে। সূচীকরণের জন্য পর্যাপ্ত সম্পদ থাকার জন্য আমরা বেশ কয়েকটি সর্বোত্তম অনুশীলন প্রদান করি যাতে অপারেশনটি আপনার অ্যাপ্লিকেশনে অনুসন্ধান কার্যকারিতাকে প্রভাবিত না করে:


  • রিফ্রেশ ব্যবধান বাড়ান : ইলাস্টিকসার্চ ইনডেক্স রিফ্রেশ করে অনুসন্ধানের জন্য নতুন ডেটা উপলব্ধ করে। রিফ্রেশগুলি প্রতি সেকেন্ডে স্বয়ংক্রিয়ভাবে ঘটতে সেট করা হয় যখন একটি সূচক শেষ 30 সেকেন্ডে একটি প্রশ্ন পেয়েছে। আপনি সূচীকরণের জন্য আরও সংস্থান সংরক্ষণ করতে রিফ্রেশ ব্যবধান বাড়াতে পারেন।


  • বাল্ক এপিআই ব্যবহার করুন : বড় আকারের ডেটা ইনজেস্ট করার সময়, আপডেট এপিআই ব্যবহার করে সূচীকরণের সময় কয়েক সপ্তাহ লাগে । এই পরিস্থিতিতে, আপনি বাল্ক API ব্যবহার করে আরও সম্পদ-দক্ষ উপায়ে ডেটার সূচীকরণের গতি বাড়াতে পারেন। এমনকি বাল্ক এপিআই-এর সাথেও, আপনি সূচীকৃত নথির সংখ্যা এবং বাল্ক অনুরোধের সামগ্রিক আকার সম্পর্কে সচেতন হতে চান যাতে এটি ক্লাস্টার কর্মক্ষমতাকে বাধাগ্রস্ত না করে। ইলাস্টিক বাল্ক সাইজ বেঞ্চমার্ক করার পরামর্শ দেয় এবং সাধারণ নিয়ম হিসাবে 5-15 এমবি/বাল্ক অনুরোধ


  • ইনডেক্স বাফারের আকার বাড়ান : আপনি অসামান্য ইন্ডেক্সিং অনুরোধের জন্য মেমরির সীমা স্তূপের 10% ডিফল্ট মানের উপরে বাড়াতে পারেন। ইন্ডেক্সিং-ভারী কাজের চাপের জন্য এটি পরামর্শ দেওয়া যেতে পারে তবে মেমরির নিবিড় অন্যান্য ক্রিয়াকলাপগুলিকে প্রভাবিত করতে পারে।


  • প্রতিলিপি নিষ্ক্রিয় করুন: সূচীকরণের গতি বাড়ানোর জন্য আপনি প্রতিলিপিকে শূন্যে সেট করতে পারেন তবে ইলাস্টিকসার্চ আপনার কাজের চাপের রেকর্ডের সিস্টেম হলে এটি পরামর্শ দেওয়া হয় না।


  • ইন-প্লেস আপসার্ট এবং ডেটা মিউটেশন সীমিত করুন : সন্নিবেশ, আপডেট এবং মুছে ফেলার জন্য সম্পূর্ণ নথিগুলিকে পুনঃসূচীকরণ করা প্রয়োজন। আপনি যদি ইলাস্টিকসার্চে সিডিসি বা লেনদেন সংক্রান্ত ডেটা স্ট্রিমিং করেন, তাহলে আপনি কম ডেটা সঞ্চয় করার কথা বিবেচনা করতে চাইতে পারেন কারণ তখন পুনঃসূচীকরণের জন্য কম ডেটা থাকে।


  • ডেটা স্ট্রাকচার সরলীকরণ করুন: মনে রাখবেন নেস্টেড অবজেক্টের মতো ডেটা স্ট্রাকচার ব্যবহার করলে লেখা এবং সূচী বৃদ্ধি পাবে। ক্ষেত্রগুলির সংখ্যা এবং ডেটা মডেলের জটিলতা সহজ করে, আপনি সূচীকরণের গতি বাড়াতে পারেন।

ইলাস্টিকসার্চে আমার অনুসন্ধানের গতি বাড়ানোর জন্য আমার কী করা উচিত?

যখন আপনার প্রশ্নগুলি কার্যকর করতে খুব বেশি সময় নিচ্ছে তখন এর অর্থ হতে পারে তবে আপনাকে আপনার ডেটা মডেলকে সরল করতে হবে বা ক্যোয়ারী জটিলতা সরাতে হবে। এখানে বিবেচনা করার জন্য কয়েকটি ক্ষেত্র রয়েছে:


  • একটিযৌগিক সূচক তৈরি করুন: দুটি নিম্ন কার্ডিনালিটি ক্ষেত্রগুলির মান একত্রে একত্রিত করে একটি উচ্চ কার্ডিনালিটি ক্ষেত্র তৈরি করুন যা সহজেই অনুসন্ধান এবং পুনরুদ্ধার করা যায়। উদাহরণস্বরূপ, আপনি জিপকোড এবং মাসের সাথে একটি ক্ষেত্র মার্জ করতে পারেন, যদি এই দুটি ক্ষেত্র হয় যা আপনি সাধারণত আপনার প্রশ্নের জন্য ফিল্টার করছেন।


  • নথির কাস্টম রাউটিং সক্ষম করুন: ফলাফল ফেরাতে ইলাস্টিকসার্চ সমস্ত শার্ডে একটি প্রশ্ন সম্প্রচার করে। কাস্টম রাউটিং এর মাধ্যমে, আপনি ক্যোয়ারী এক্সিকিউশনের গতি বাড়ানোর জন্য আপনার ডেটা কোন শার্ডে থাকবে তা নির্ধারণ করতে পারেন। এটি বলেছে, কাস্টম রাউটিং গ্রহণ করার সময় আপনি হটস্পটগুলির সন্ধানে থাকতে চান।


  • স্ট্রাকচার্ড সার্চের জন্য কীওয়ার্ড ফিল্ড টাইপ ব্যবহার করুন: আপনি যখন আইডি বা জিপকোডের মতো বিষয়বস্তুর উপর ভিত্তি করে ফিল্টার করতে চান, তখন দ্রুত পুনরুদ্ধারের জন্য পূর্ণসংখ্যার ধরন বা অন্যান্য সাংখ্যিক ক্ষেত্রের প্রকারের পরিবর্তে কীওয়ার্ড ফিল্ড টাইপ ব্যবহার করার পরামর্শ দেওয়া হয়।


  • অভিভাবক-সন্তান এবং নেস্টেড অবজেক্টগুলি থেকে দূরে সরে যান: ইলাস্টিকসার্চে যোগদান সমর্থনের অভাবের জন্য পিতা-মাতার-সন্তানের সম্পর্ক একটি ভাল সমাধান এবং এটি ইনজেশনের গতি বাড়াতে এবং রিইন্ডেক্সিং সীমিত করতে সহায়তা করেছে। অবশেষে, সংস্থাগুলি এই পদ্ধতির সাথে মেমরি সীমা আঘাত করে। যখন এটি ঘটে, আপনি ডেটা ডিনরমালাইজেশন করে ক্যোয়ারী কর্মক্ষমতা দ্রুত করতে সক্ষম হবেন।

স্কেলের জন্য আমি কীভাবে ইলাস্টিক সার্চ শার্ড এবং সূচীগুলিকে আকার দিতে পারি?

ইলাস্টিকসার্চ-এর সাথে অনেক স্কেলিং চ্যালেঞ্জ শার্ডিং এবং ইন্ডেক্সিং কৌশলের দিকে চলে যায়। আপনার কতগুলি শার্ড থাকা উচিত বা আপনার শার্ডগুলি কত বড় হওয়া উচিত তার সমস্ত কৌশলের সাথে কোনও একটি আকার ফিট করে না। কৌশল নির্ধারণের সর্বোত্তম উপায় হল ইউনিফর্ম, উৎপাদন কাজের চাপের উপর পরীক্ষা এবং বেঞ্চমার্ক চালানো। এখানে বিবেচনা করার জন্য কিছু অতিরিক্ত পরামর্শ রয়েছে:


  • ফোর্স মার্জ এপিআই ব্যবহার করুন : প্রতিটি শার্ডে সেগমেন্টের সংখ্যা কমাতে ফোর্স মার্জ এপিআই ব্যবহার করুন। সেগমেন্ট মার্জ স্বয়ংক্রিয়ভাবে পটভূমিতে ঘটবে এবং যেকোনও মুছে ফেলা নথি সরিয়ে ফেলবে। একটি ফোর্স মার্জ ব্যবহার করে পুরানো নথি ম্যানুয়ালি মুছে ফেলতে পারে এবং কর্মক্ষমতা বাড়াতে পারে। এটি সম্পদ-নিবিড় হতে পারে এবং তাই সর্বোচ্চ ব্যবহারের সময় ঘটতে হবে না।


  • লোডের ভারসাম্যহীনতা থেকে সাবধান থাকুন: ইলাস্টিকসার্চের কাছে শার্ড দ্বারা সম্পদের ব্যবহার বোঝার এবং শার্ড বসানো নির্ধারণ করার সময় এটি বিবেচনায় নেওয়ার একটি ভাল উপায় নেই। ফলস্বরূপ, গরম শার্ড থাকা সম্ভব। এই পরিস্থিতি এড়াতে, আপনি ডেটা নোটের চেয়ে বেশি শার্ড এবং ডেটা নোডের চেয়ে ছোট শার্ডগুলি বিবেচনা করতে পারেন।


  • সময়-ভিত্তিক সূচী ব্যবহার করুন: সময়-ভিত্তিক সূচকগুলি ধরে রাখার উপর ভিত্তি করে আপনার ক্লাস্টারে সূচী এবং শার্ডের সংখ্যা কমাতে পারে। ইলাস্টিকসার্চ একটি রোলওভার সূচক APIও অফার করে যাতে আপনি সংস্থানগুলি খালি করতে বয়স বা নথির আকারের উপর ভিত্তি করে একটি নতুন সূচকে রোলওভার করতে পারেন।

মাল্টি-টেনেন্সির জন্য আমার কীভাবে ডিজাইন করা উচিত?

মাল্টি-টেনেন্সির জন্য সবচেয়ে সাধারণ কৌশল হল গ্রাহক বা ভাড়াটে প্রতি একটি সূচক থাকা বা কাস্টম রাউটিং ব্যবহার করা। আপনার কাজের চাপের জন্য আপনি কীভাবে কৌশলগুলি ওজন করতে পারেন তা এখানে:


  • গ্রাহক বা ভাড়াটে প্রতি সূচক: গ্রাহকের দ্বারা পৃথক সূচী কনফিগার করা কোম্পানিগুলির জন্য ভাল কাজ করে যেগুলির ব্যবহারকারীর সংখ্যা কম, কয়েক হাজার থেকে কয়েক হাজার গ্রাহক এবং যখন গ্রাহকরা ডেটা ভাগ করে না। প্রতিটি গ্রাহকের নিজস্ব স্কিমা থাকলে এবং আরও নমনীয়তার প্রয়োজন হলে প্রতি গ্রাহকের জন্য একটি সূচক থাকাও সহায়ক।


  • কাস্টম রাউটিং: কাস্টম রাউটিং আপনাকে দস্তাবেজটি যে শার্ডে থাকে তা নির্দিষ্ট করতে সক্ষম করে, উদাহরণস্বরূপ গ্রাহক আইডি বা টেন্যান্ট আইডি, একটি ডকুমেন্ট ইন্ডেক্স করার সময় রাউটিং নির্দিষ্ট করতে। একটি নির্দিষ্ট গ্রাহকের উপর ভিত্তি করে অনুসন্ধান করার সময়, দ্রুত প্রতিক্রিয়ার সময়ের জন্য গ্রাহকের ডেটা ধারণকারী ক্যোয়ারী সরাসরি শার্ডে যাবে। কাস্টম রাউটিং একটি ভাল পন্থা যখন আপনার গ্রাহকদের মধ্যে একটি সামঞ্জস্যপূর্ণ স্কিমা থাকে এবং আপনার প্রচুর গ্রাহক থাকে, যখন আপনি একটি ফ্রিমিয়াম মডেল অফার করেন তখন এটি সাধারণ।

ইলাস্টিকসার্চ স্কেল করা বা না করা!

ইলাস্টিক সার্চ লগ অ্যানালিটিক্স এবং টেক্সট সার্চ ব্যবহারের ক্ষেত্রে ডিজাইন করা হয়েছে। অনেক সংস্থা যেগুলি স্কেলে রিয়েল-টাইম অ্যানালিটিক্সের জন্য ইলাস্টিকসার্চ ব্যবহার করে তাদের কার্যক্ষমতা বা খরচ দক্ষতা বজায় রাখার জন্য ট্রেডঅফ করতে হবে, যার মধ্যে কোয়েরি জটিলতা সীমিত করা এবং ডেটা ইনজেস্ট লেটেন্সি অন্তর্ভুক্ত। আপনি যখন ব্যবহারের ধরণগুলি সীমিত করতে শুরু করেন, আপনার রিফ্রেশের ব্যবধান আপনার SLA ছাড়িয়ে যায় বা আপনি আরও ডেটাসেট যোগ করেন যেগুলিকে একসাথে যুক্ত করতে হবে, তখন ইলাস্টিকসার্চের বিকল্পগুলি সন্ধান করা বোধগম্য হতে পারে।


রকসেট বিকল্পগুলির মধ্যে একটি এবং এটি রিয়েল-টাইম স্ট্রিমিং ডেটা ইনজেশন এবং স্কেলে কম লেটেন্সি প্রশ্নের জন্য তৈরি করা হয়েছে। ইলাস্টিকসার্চ থেকে কীভাবে স্থানান্তর করা যায় তা শিখুন এবং দুটি সিস্টেমের মধ্যে স্থাপত্যগত পার্থক্যগুলি অন্বেষণ করুন।