ইলাস্টিকসার্চ হল একটি ওপেন সোর্স, বিতরণ করা ভিত্তিক সার্চ এবং অ্যানালিটিক্স ইঞ্জিন যা Apache Lucene ব্যবহার করে দ্রুত রিয়েল-টাইম সার্চ কার্যকারিতা প্রদান করে। এটি একটি NoSQL ডেটা স্টোর যা নথি-ভিত্তিক, মাপযোগ্য এবং ডিফল্টরূপে স্কিমলেস। ইলাস্টিকসার্চ বড় ডেটা সেটের সাথে স্কেলে কাজ করার জন্য ডিজাইন করা হয়েছে। একটি অনুসন্ধান ইঞ্জিন হিসাবে, এটি দ্রুত সূচীকরণ এবং অনুসন্ধান ক্ষমতা প্রদান করে যা একাধিক নোড জুড়ে অনুভূমিকভাবে স্কেল করা যেতে পারে। JSON- নির্লজ্জ প্লাগ: হল ক্লাউডে একটি রিয়েল-টাইম ইনডেক্সিং ডাটাবেস। এটি স্বয়ংক্রিয়ভাবে সূচীগুলি তৈরি করে যা শুধুমাত্র অনুসন্ধানের জন্য নয় বরং একত্রিতকরণ এবং যোগদানের জন্য অপ্টিমাইজ করা হয়, এটি আপনার অ্যাপ্লিকেশনগুলির জন্য ডেটা কোয়েরি করার জন্য দ্রুত এবং সহজ করে তোলে, এটি কোথা থেকে আসে এবং এটি কোন ফর্ম্যাটে তা নির্বিশেষে৷ কিন্তু এই পোস্টটি কিছু সমাধান হাইলাইট করার বিষয়ে। , যদি আপনি সত্যিই এসকিউএল-স্টাইল ইলাস্টিকসার্চে যোগদান করতে চান। রকসেট কেন ডেটা সম্পর্ক গুরুত্বপূর্ণ? আমরা একটি অত্যন্ত সংযুক্ত বিশ্বে বাস করি যেখানে ডেটা সম্পর্ক পরিচালনা করা গুরুত্বপূর্ণ। রিলেশনাল ডাটাবেসগুলি সম্পর্ক পরিচালনার ক্ষেত্রে ভাল, কিন্তু ক্রমাগত পরিবর্তনশীল ব্যবসায়িক প্রয়োজনীয়তাগুলির সাথে, এই ডাটাবেসের স্থির স্কিমার ফলে স্কেলেবিলিটি এবং কর্মক্ষমতা সমস্যা দেখা দেয়। ঐতিহ্যগত ডেটা হ্যান্ডলিং পদ্ধতির সাথে যুক্ত বিভিন্ন চ্যালেঞ্জ মোকাবেলা করার ক্ষমতার কারণে NoSQL ডেটা স্টোরের ব্যবহার ক্রমশ জনপ্রিয় হয়ে উঠছে। এন্টারপ্রাইজগুলি ক্রমাগত জটিল ডেটা স্ট্রাকচার নিয়ে কাজ করছে যেখানে ডেটা বিশ্লেষণের জন্য একত্রিতকরণ, যোগদান এবং ফিল্টারিং ক্ষমতা প্রয়োজন। অসংগঠিত ডেটার বিস্ফোরণের সাথে সাথে, ডেটা বিশ্লেষণের উদ্দেশ্যে বিভিন্ন উত্স থেকে ডেটা যুক্ত করার প্রয়োজন ক্রমবর্ধমান সংখ্যক ব্যবহারের ক্ষেত্রে। যদিও যোগদানগুলি প্রাথমিকভাবে একটি SQL ধারণা, তারা NoSQL জগতেও সমানভাবে গুরুত্বপূর্ণ। এসকিউএল-শৈলী যোগদান ইলাস্টিকসার্চে প্রথম শ্রেণীর নাগরিক হিসাবে সমর্থিত নয়। এই নিবন্ধটি আলোচনা করবে কিভাবে ইলাস্টিকসার্চে সম্পর্কগুলিকে বিভিন্ন কৌশল ব্যবহার করে যেমন ডিনরমালাইজিং, অ্যাপ্লিকেশন-সাইড যোগদান, নেস্টেড নথি এবং পিতামাতা-সন্তানের সম্পর্ক ব্যবহার করে। এটি প্রতিটি পদ্ধতির সাথে যুক্ত ব্যবহারের ক্ষেত্রে এবং চ্যালেঞ্জগুলিও অন্বেষণ করবে। ইলাস্টিকসার্চে সম্পর্কের সাথে কীভাবে ডিল করবেন যেহেতু ইলাস্টিকসার্চ একটি রিলেশনাল ডাটাবেস নয়, জয়েনগুলি একটি SQL ডাটাবেসের মতো নেটিভ কার্যকারিতা হিসাবে বিদ্যমান নয়। এটি স্টোরেজ দক্ষতার বিপরীতে অনুসন্ধান দক্ষতার উপর বেশি ফোকাস করে। সঞ্চিত ডেটা কার্যত চ্যাপ্টা বা অস্বাভাবিক করা হয় দ্রুত অনুসন্ধান ব্যবহারের ক্ষেত্রে চালাতে। ইলাস্টিকসার্চে সম্পর্ক নির্ধারণের একাধিক উপায় রয়েছে। আপনার ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে, আপনি আপনার ডেটা মডেল করতে ইলাস্টিকসার্চে নীচের কৌশলগুলির মধ্যে একটি নির্বাচন করতে পারেন: এক-এক সম্পর্ক: অবজেক্ট ম্যাপিং এক-থেকে-অনেক সম্পর্ক: নেস্টেড নথি এবং পিতামাতা-সন্তান মডেল বহু-থেকে-অনেক সম্পর্ক: অস্বাভাবিককরণ এবং অ্যাপ্লিকেশন-সাইড যোগদান এক থেকে এক অবজেক্ট ম্যাপিং সহজ এবং এখানে বেশি আলোচনা করা হবে না। এই ব্লগের অবশিষ্টাংশে আরও বিস্তারিতভাবে অন্য দুটি পরিস্থিতি কভার করা হবে। ইলাস্টিকসার্চে আপনার ডেটা মডেল পরিচালনা করা ইলাস্টিকসার্চে ডেটা পরিচালনা করার জন্য চারটি সাধারণ পদ্ধতি রয়েছে: অস্বাভাবিককরণ অ্যাপ্লিকেশন-সাইড যোগদান নেস্টেড অবজেক্ট পিতা-মাতা-সন্তানের সম্পর্ক অস্বাভাবিককরণ ডিনরমালাইজেশন ইলাস্টিকসার্চে সেরা ক্যোয়ারী সার্চ পারফরম্যান্স প্রদান করে, যেহেতু কোয়েরির সময় ডেটা সেটে যোগদানের প্রয়োজন নেই। প্রতিটি নথি স্বাধীন এবং এতে সমস্ত প্রয়োজনীয় ডেটা রয়েছে, এইভাবে ব্যয়বহুল যোগদানের ক্রিয়াকলাপগুলির প্রয়োজনীয়তা দূর করে৷ অস্বাভাবিককরণের সাথে, সূচীকরণের সময় ডেটা একটি চ্যাপ্টা কাঠামোতে সংরক্ষণ করা হয়। যদিও এটি নথির আকার বৃদ্ধি করে এবং প্রতিটি নথিতে ডুপ্লিকেট ডেটা সঞ্চয় করে। ডিস্ক স্থান একটি ব্যয়বহুল পণ্য এবং এইভাবে উদ্বেগের জন্য সামান্য কারণ নয়. অস্বাভাবিককরণের জন্য কেস ব্যবহার করুন ডিস্ট্রিবিউটেড সিস্টেমের সাথে কাজ করার সময়, নেটওয়ার্ক জুড়ে ডেটা সেটে যোগদান করার সময় উল্লেখযোগ্য দেরি হতে পারে। আপনি ডেটা ডিনরমালাইজ করে এই ব্যয়বহুল যোগদানের ক্রিয়াকলাপগুলি এড়াতে পারেন। বহু-থেকে-অনেক সম্পর্কগুলি ডেটা সমতলকরণের মাধ্যমে পরিচালনা করা যেতে পারে। ডেটা ডিনরমালাইজেশনের সাথে চ্যালেঞ্জ চ্যাপ্টা নথিতে ডেটার নকলের জন্য অতিরিক্ত স্টোরেজ স্পেস প্রয়োজন। একটি সমতল কাঠামোতে ডেটা পরিচালনা করা প্রকৃতির সম্পর্কযুক্ত ডেটা সেটগুলির জন্য অতিরিক্ত ওভারহেড বহন করে। একটি প্রোগ্রামিং দৃষ্টিকোণ থেকে, ডিনরমালাইজেশনের জন্য অতিরিক্ত ইঞ্জিনিয়ারিং ওভারহেড প্রয়োজন। একাধিক রিলেশনাল টেবিলে সংরক্ষিত ডেটা সমতল করার জন্য আপনাকে অতিরিক্ত কোড লিখতে হবে এবং ইলাস্টিকসার্চে একটি একক বস্তুতে ম্যাপ করতে হবে। আপনার ডেটা ঘন ঘন পরিবর্তিত হলে ডেটা ডিনরমালাইজ করা ভাল ধারণা নয়। এই ধরনের ক্ষেত্রে অস্বাভাবিককরণের জন্য সমস্ত নথি আপডেট করার প্রয়োজন হবে যখন ডেটার কোনো উপসেট পরিবর্তন করতে হবে এবং তাই এড়ানো উচিত। সমতল ডেটা সেটের সাথে ইন্ডেক্সিং অপারেশনে বেশি সময় লাগে যেহেতু আরও ডেটা ইন্ডেক্স করা হচ্ছে৷ যদি আপনার ডেটা ঘন ঘন পরিবর্তিত হয়, তাহলে এটি নির্দেশ করবে যে আপনার ইন্ডেক্সিং রেট বেশি, যা ক্লাস্টার পারফরম্যান্সের সমস্যা সৃষ্টি করতে পারে। অ্যাপ্লিকেশন-সাইড যোগদান নথিগুলির মধ্যে সম্পর্ক বজায় রাখার প্রয়োজন হলে অ্যাপ্লিকেশন-সাইড যোগদানগুলি ব্যবহার করা যেতে পারে। ডেটা পৃথক সূচকে সংরক্ষণ করা হয় এবং কোয়েরির সময় আবেদনের দিক থেকে যোগদানের ক্রিয়াকলাপগুলি সম্পাদন করা যেতে পারে। এটি, যাইহোক, নথিতে যোগদানের জন্য আপনার অ্যাপ্লিকেশন থেকে অনুসন্ধানের সময় অতিরিক্ত প্রশ্নগুলি চালাতে বাধ্য করে। অ্যাপ্লিকেশন-সাইড যোগদানের জন্য কেস ব্যবহার করুন অ্যাপ্লিকেশন-সাইড যোগদান নিশ্চিত করে যে ডেটা স্বাভাবিক থাকে। পরিবর্তনগুলি এক জায়গায় করা হয় এবং আপনার নথিগুলিকে ক্রমাগত আপডেট করার প্রয়োজন নেই৷ এই পদ্ধতির সাথে ডেটা অপ্রয়োজনীয়তা হ্রাস করা হয়। এই পদ্ধতিটি ভাল কাজ করে যখন কম নথি থাকে এবং ডেটা পরিবর্তন কম ঘন ঘন হয়। অ্যাপ্লিকেশন-সাইড যোগদানের সাথে চ্যালেঞ্জ অনুসন্ধানের সময় নথিতে যোগদানের জন্য অ্যাপ্লিকেশনটিকে একাধিক প্রশ্ন সম্পাদন করতে হবে। যদি ডেটা সেটের অনেক ভোক্তা থাকে, তাহলে আপনাকে একাধিকবার একই প্রশ্নের সেট চালাতে হবে, যা কার্যক্ষমতার সমস্যা হতে পারে। এই পদ্ধতিটি, তাই, ইলাস্টিকসার্চের প্রকৃত শক্তিকে লাভ করে না। এই পদ্ধতির ফলে বাস্তবায়ন পর্যায়ে জটিলতা দেখা দেয়। নথিগুলির মধ্যে সম্পর্ক স্থাপনের জন্য যোগদানের ক্রিয়াকলাপগুলি বাস্তবায়নের জন্য অ্যাপ্লিকেশন স্তরে অতিরিক্ত কোড লেখার প্রয়োজন৷ নেস্টেড অবজেক্ট অ্যারের প্রতিটি বস্তুর সম্পর্ক বজায় রাখার প্রয়োজন হলে নেস্টেড পদ্ধতি ব্যবহার করা যেতে পারে। নেস্টেড নথিগুলি অভ্যন্তরীণভাবে পৃথক লুসিন নথি হিসাবে সংরক্ষণ করা হয় এবং ক্যোয়ারী করার সময় যোগদান করা যেতে পারে। এগুলি হল ইনডেক্স-টাইম জয়েন, যেখানে একাধিক লুসিন নথি একটি একক ব্লকে সংরক্ষণ করা হয়। অ্যাপ্লিকেশনের দৃষ্টিকোণ থেকে, ব্লকটি একটি একক ইলাস্টিকসার্চ নথির মতো দেখায়। প্রশ্ন করা তাই তুলনামূলকভাবে দ্রুত, যেহেতু সমস্ত ডেটা একই বস্তুতে থাকে। নেস্টেড নথিগুলি এক থেকে একাধিক সম্পর্কের সাথে ডিল করে। নেস্টেড ডকুমেন্টের জন্য কেস ব্যবহার করুন যখন আপনার নথিতে অবজেক্টের অ্যারে থাকে তখন নেস্টেড নথি তৈরি করা পছন্দ হয়। নীচের চিত্র 1 দেখায় যে কীভাবে ইলাস্টিকসার্চে নেস্টেড টাইপ অবজেক্টের অ্যারেগুলিকে আলাদা লুসিন নথি হিসাবে অভ্যন্তরীণভাবে সূচীবদ্ধ করার অনুমতি দেয়। লুসিনের অভ্যন্তরীণ বস্তুর কোনো ধারণা নেই, তাই ইলাস্টিকসার্চ কীভাবে মূল নথিকে সমতল বহু-মূল্যবান ক্ষেত্রগুলিতে রূপান্তরিত করে তা দেখতে আকর্ষণীয়। নেস্টেড ক্যোয়ারী ব্যবহার করার একটি সুবিধা হল এটি ক্রস-অবজেক্ট ম্যাচ করবে না, তাই অপ্রত্যাশিত ম্যাচের ফলাফল এড়ানো হয়। এটি বস্তুর সীমানা সম্পর্কে সচেতন, অনুসন্ধানগুলিকে আরও সঠিক করে তোলে। চিত্র 1: নেস্টেড পদ্ধতি ব্যবহার করে ইলাস্টিকসার্চে পৃথক লুসিন নথি হিসাবে অভ্যন্তরীণভাবে সূচীকৃত বস্তুর বিন্যাস নেস্টেড অবজেক্টের সাথে চ্যালেঞ্জ একটি নেস্টেড অবজেক্ট যোগ/আপডেট/মুছে ফেলার জন্য রুট অবজেক্ট এবং এর নেস্টেড অবজেক্টগুলিকে অবশ্যই পুনঃসূচীকরণ করতে হবে। অন্য কথায়, একটি চাইল্ড রেকর্ড আপডেটের ফলে পুরো ডকুমেন্ট পুনরায় ইন্ডেক্স করা হবে। নেস্টেড নথি সরাসরি অ্যাক্সেস করা যাবে না. তারা শুধুমাত্র এর সম্পর্কিত রুট নথি দ্বারা অ্যাক্সেস করা যেতে পারে। অনুসন্ধানের অনুরোধগুলি সার্চ কোয়েরির সাথে মেলে এমন নেস্টেড নথিগুলি ফেরত না দিয়ে সম্পূর্ণ নথি ফেরত দেয়৷ যদি আপনার ডেটা সেট ঘন ঘন পরিবর্তিত হয়, নেস্টেড নথিগুলি ব্যবহার করার ফলে প্রচুর পরিমাণে আপডেট হবে৷ পিতা-মাতা-সন্তানের সম্পর্ক পিতামাতা-সন্তানের সম্পর্কগুলি পৃথক নথিতে সম্পর্কযুক্ত বস্তুগুলিকে সম্পূর্ণরূপে পৃথক করার জন্য সুবিধা দেয়—পিতামাতা এবং শিশু। এটি আপনাকে পৃথক ইলাস্টিকসার্চ নথিতে একটি সম্পর্কগত কাঠামোতে নথি সংরক্ষণ করতে সক্ষম করে যা আলাদাভাবে আপডেট করা যেতে পারে। যোগদানের ডেটাটাইপকে যখন নথিগুলি প্রায়ই আপডেট করা প্রয়োজন তখন পিতামাতা-সন্তানের সম্পর্ক উপকারী। এই পদ্ধতিটি পরিস্থিতিগুলির জন্য আদর্শ যখন ডেটা ঘন ঘন পরিবর্তিত হয়। মূলত, আপনি বেস ডকুমেন্টটিকে অভিভাবক এবং সন্তান সমন্বিত একাধিক নথিতে আলাদা করুন। এটি পিতামাতা এবং শিশু উভয় নথিকে একে অপরের থেকে স্বাধীনভাবে সূচী/আপডেট/মুছে ফেলার অনুমতি দেয়। পিতামাতা এবং শিশুর নথিতে অনুসন্ধান করা হচ্ছে সূচীকরণ এবং অনুসন্ধানের সময় ইলাস্টিকসার্চ কর্মক্ষমতা অপ্টিমাইজ করার জন্য, সাধারণ সুপারিশ হল নথির আকার বড় না হয় তা নিশ্চিত করা। আপনি আপনার নথিকে আলাদা নথিতে ভাঙ্গার জন্য পিতামাতা-সন্তান মডেলের সুবিধা নিতে পারেন। তবে এটি বাস্তবায়নে কিছু চ্যালেঞ্জ রয়েছে। পিতামাতা এবং সন্তানের নথিগুলিকে একই শার্ডে রাউট করতে হবে যাতে অনুসন্ধানের সময় তাদের সাথে যোগদান মেমরিতে এবং কার্যকরী হয়। সন্তানের নথির রাউটিং মান হিসাবে অভিভাবক আইডি ব্যবহার করা প্রয়োজন। ক্ষেত্রটি অভিভাবক নথির ID এবং প্রকারের সাথে Elasticsearch প্রদান করে, যা অভ্যন্তরীণভাবে শিশু নথিগুলিকে অভিভাবক নথির মতো একই শার্ডে রুট করতে দেয়। _parent ইলাস্টিক সার্চ আপনাকে জটিল JSON অবজেক্ট থেকে অনুসন্ধান করতে দেয়। তবে, এটি থেকে দক্ষতার সাথে অনুসন্ধান করার জন্য ডেটা কাঠামোর একটি পুঙ্খানুপুঙ্খ বোঝার প্রয়োজন। পিতামাতা-সন্তান মডেল অনুসন্ধান কার্যকারিতা সহজ করার জন্য একাধিক ফিল্টার ব্যবহার করে: প্রশ্ন has_child কোয়েরির সাথে মিলে যাওয়া চাইল্ড ডকুমেন্ট আছে এমন প্যারেন্ট ডকুমেন্ট ফেরত দেয়। প্রশ্ন has_parent একজন অভিভাবককে গ্রহণ করে এবং সংশ্লিষ্ট পিতামাতার সাথে মিলে যাওয়া সন্তানের নথি ফেরত দেয়। প্রশ্ন inner_hits ক্যোয়ারী থেকে প্রাসঙ্গিক বাচ্চাদের তথ্য নিয়ে আসে। has_child চিত্র 2 দেখায় কিভাবে আপনি এক-থেকে-অনেক সম্পর্ক প্রদর্শন করতে পিতামাতা-সন্তান মডেল ব্যবহার করতে পারেন। সন্তানের নথিগুলি অভিভাবককে প্রভাবিত না করে যোগ/মুছে ফেলা/আপডেট করা যেতে পারে। অভিভাবক নথির ক্ষেত্রেও একই কথা প্রযোজ্য, যা শিশুদের পুনঃসূচীকরণ ছাড়াই আপডেট করা যেতে পারে। চিত্র 2: এক থেকে একাধিক সম্পর্কের জন্য পিতামাতা-সন্তান মডেল পিতামাতা-সন্তানের সম্পর্কের সাথে চ্যালেঞ্জ যোগদান অপারেশনের কারণে প্রশ্নগুলি আরও ব্যয়বহুল এবং স্মৃতি-নিবিড়। পিতামাতা-সন্তানের নির্মাণের জন্য একটি ওভারহেড রয়েছে, যেহেতু সেগুলি পৃথক নথি যেগুলি ক্যোয়ারী করার সময় অবশ্যই যোগ দিতে হবে৷ অভিভাবক এবং তার সমস্ত সন্তান একই শার্ডে বিদ্যমান তা নিশ্চিত করতে হবে। পিতামাতা-সন্তান সম্পর্কের সাথে নথি সংরক্ষণ করা বাস্তবায়নের জটিলতা জড়িত। উপসংহার সঠিক ইলাস্টিকসার্চ ডিজাইন নির্বাচন করা অ্যাপ্লিকেশন কর্মক্ষমতা এবং রক্ষণাবেক্ষণের জন্য গুরুত্বপূর্ণ। Elasticsearch-এ আপনার ডেটা মডেল ডিজাইন করার সময়, এখানে আলোচনা করা চারটি মডেলিং পদ্ধতির প্রতিটির বিভিন্ন সুবিধা এবং অসুবিধাগুলি নোট করা গুরুত্বপূর্ণ৷ ডেটা মডেলিং এই নিবন্ধে, আমরা অন্বেষণ করেছি কিভাবে নেস্টেড অবজেক্ট এবং পিতা-মাতা-সন্তান সম্পর্ক ইলাস্টিকসার্চে এসকিউএল-এর মতো জয়েন অপারেশনগুলিকে সক্ষম করে। আপনি অ্যাপ্লিকেশন-সাইড যোগদানের সাথে সম্পর্ক পরিচালনা করতে আপনার অ্যাপ্লিকেশনে কাস্টম যুক্তি প্রয়োগ করতে পারেন। যেসব ক্ষেত্রে আপনাকে ইলাস্টিকসার্চে একাধিক ডেটা সেটে যোগদান করতে হবে, সেই ক্ষেত্রে আপনি পারফরম্যান্ট কোয়েরি সক্ষম করতে ইলাস্টিকসার্চ ইনডেক্সে এই দুটি ডেটা সেট ইনজেস্ট এবং লোড করতে পারেন। বাক্সের বাইরে, এসকিউএল ডাটাবেসের মতো ইলাস্টিকসার্চের যোগদান নেই। যদিও আপনার নথিতে সম্পর্ক স্থাপনের জন্য সম্ভাব্য সমাধান রয়েছে, এই পদ্ধতির প্রতিটি উপস্থাপনের চ্যালেঞ্জ সম্পর্কে সচেতন হওয়া গুরুত্বপূর্ণ। নেটিভ এসকিউএল ব্যবহার করে রকসেটের সাথে যোগ দেয় যখন রিয়েল-টাইম অ্যানালিটিক্সের জন্য একাধিক ডেটা সেট একত্রিত করার প্রয়োজন হয়, তখন একটি ডাটাবেস যা নেটিভ এসকিউএল যোগদান প্রদান করে তা এই ব্যবহারের ক্ষেত্রে আরও ভালভাবে পরিচালনা করতে পারে। ইলাস্টিকসার্চের মতো, রকসেট ডাটাবেস, ইভেন্ট স্ট্রীম এবং ডেটা লেক থেকে ডেটার উপর একটি ইন্ডেক্সিং স্তর হিসাবে ব্যবহৃত হয়, যা এই উত্সগুলি থেকে স্কিমলেস ইনজেস্টের অনুমতি দেয়। ইলাস্টিকসার্চের বিপরীতে, রকসেট যোগদান সহ ক্ষমতা প্রদান করে, আপনি কীভাবে আপনার ডেটা ব্যবহার করতে পারেন সে সম্পর্কে আপনাকে আরও নমনীয়তা দেয়। পূর্ণ-বৈশিষ্ট্যযুক্ত SQL এর সাথে অনুসন্ধান করার এছাড়াও প্রকাশিত. এখানে