Schema Design এর বেস্ট প্র্যাকটিস

Latest Technologies - ইলাস্টিকসার্চ (ElasticSearch) - Data Mapping এবং Schema Design | NCTB BOOK

Schema Design এর বেস্ট প্র্যাকটিস

Elasticsearch-এ Schema Design একটি গুরুত্বপূর্ণ কাজ, যা ডেটার কাঠামো এবং সার্চ অপারেশনের পারফরম্যান্স নির্ধারণ করে। একটি ভালোভাবে পরিকল্পিত স্কিমা Elasticsearch-কে ডেটা ইন্ডেক্স এবং সার্চ অপারেশন দ্রুত ও কার্যকরভাবে পরিচালনা করতে সহায়ক করে। নিচে Schema Design-এর কিছু বেস্ট প্র্যাকটিস আলোচনা করা হলো, যা অনুসরণ করে আপনি Elasticsearch-এর পারফরম্যান্স এবং কার্যকারিতা উন্নত করতে পারবেন।

১. সঠিক ফিল্ড টাইপ নির্ধারণ করা

  • প্রতিটি ফিল্ডের জন্য সঠিক ডেটা টাইপ নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটা ইন্ডেক্সিং এবং সার্চ অপারেশন দ্রুত করতে সহায়ক করে।
  • উদাহরণস্বরূপ:
    • ফ্রি-টেক্সটের জন্য text টাইপ ব্যবহার করুন।
    • সুনির্দিষ্ট মানের জন্য keyword টাইপ ব্যবহার করুন।
    • সংখ্যামূলক ডেটার জন্য integer, float, বা double ব্যবহার করুন।
    • তারিখ এবং সময়ের জন্য date টাইপ ব্যবহার করুন।

ভুল:

"price": { "type": "text" }

সঠিক:

"price": { "type": "float" }
  • ফিল্ডের সঠিক টাইপ নির্ধারণ করলে Elasticsearch ইন্ডেক্স এবং সার্চ অপারেশন দ্রুত করতে পারে।

২. Text এবং Keyword ফিল্ডের পার্থক্য বোঝা এবং সঠিকভাবে প্রয়োগ করা

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

উদাহরণ:

{
  "properties": {
    "title": { "type": "text" },
    "category": { "type": "keyword" }
  }
}
  • এখানে "title" ফিল্ডে text এবং "category" ফিল্ডে keyword টাইপ ব্যবহার করা হয়েছে।

৩. ইন্ডেক্সিং সীমিত করা

  • সব ফিল্ড ইন্ডেক্স করা প্রয়োজন নেই। শুধুমাত্র যে ফিল্ডগুলো সার্চ অপারেশনের জন্য প্রয়োজন, সেগুলো ইন্ডেক্স করা উচিত।
  • index: false ব্যবহার করে প্রয়োজনীয় নয় এমন ফিল্ডগুলো ইন্ডেক্সিং থেকে বাদ দিন, যা ইন্ডেক্স সাইজ কমায় এবং পারফরম্যান্স বাড়ায়।

উদাহরণ:

{
  "properties": {
    "description": { "type": "text", "index": false },
    "name": { "type": "keyword" }
  }
}
  • এখানে "description" ফিল্ড ইন্ডেক্স করা হয়নি, কারণ এটি সার্চ অপারেশনের জন্য প্রয়োজন নেই।

৪. Dynamic Mapping সীমিত রাখা

  • Dynamic Mapping Elasticsearch-এ ডিফল্টভাবে সক্রিয় থাকে, যা নতুন ফিল্ড সনাক্ত করে ডেটা টাইপ নির্ধারণ করে।
  • Dynamic Mapping সবসময় সঠিক ডেটা টাইপ নির্ধারণ করতে পারে না এবং এটি সার্চ পারফরম্যান্সের উপর নেতিবাচক প্রভাব ফেলতে পারে।
  • যখন সম্ভব, Static Mapping ব্যবহার করা উচিত, যাতে প্রতিটি ফিল্ড এবং তার ডেটা টাইপ আগে থেকেই নির্ধারণ করা থাকে।

উদাহরণ:

PUT /fixed-index
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "username": { "type": "keyword" },
      "created_at": { "type": "date", "format": "yyyy-MM-dd" }
    }
  }
}
  • এখানে "dynamic": "strict" ব্যবহার করে Dynamic Mapping বন্ধ রাখা হয়েছে।

৫. Nested এবং Object টাইপ ব্যবহারে সতর্ক থাকা

  • Nested এবং Object টাইপ জটিল ডেটা স্ট্রাকচার সংরক্ষণের জন্য ব্যবহৃত হয়, তবে এগুলো ব্যবহার করলে সার্চ এবং ইন্ডেক্সিং পারফরম্যান্সে প্রভাব পড়তে পারে।
  • শুধুমাত্র যেখানে Nested ডেটার জন্য আলাদা ডকুমেন্ট সংরক্ষণ এবং সার্চের প্রয়োজন আছে, সেখানে nested টাইপ ব্যবহার করা উচিত।

উদাহরণ:

{
  "properties": {
    "comments": {
      "type": "nested",
      "properties": {
        "user": { "type": "keyword" },
        "message": { "type": "text" }
      }
    }
  }
}
  • এখানে "comments" ফিল্ডে nested টাইপ ব্যবহার করা হয়েছে, যা জটিল কোয়েরির জন্য উপযোগী।

৬. Date ফিল্ডের ফরম্যাট নির্ধারণ করা

  • Date ফিল্ডে সঠিক ফরম্যাট নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ, যাতে Elasticsearch ডেটা সঠিকভাবে ইন্ডেক্স এবং রিট্রিভ করতে পারে।
  • ডিফল্ট ফরম্যাট ছাড়াও, কাস্টম ফরম্যাট ব্যবহার করে তারিখ সংরক্ষণ করা উচিত।

উদাহরণ:

{
  "properties": {
    "event_date": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }
  }
}
  • এখানে "event_date" ফিল্ডে কাস্টম ফরম্যাট নির্ধারণ করা হয়েছে।

৭. Geo-Point এবং Geo-Shape ফিল্ডের সঠিক ব্যবহার

  • ভৌগোলিক ডেটা সংরক্ষণের জন্য geo_point বা geo_shape টাইপ ব্যবহার করা উচিত। এটি জিওস্পেশিয়াল কোয়েরি চালাতে এবং অবস্থানভিত্তিক ডেটা বিশ্লেষণ করতে সহায়ক।
  • যেসব ক্ষেত্রে অবস্থানের ভিত্তিতে সার্চ প্রয়োজন সেখানে geo_point ব্যবহার করা উচিত এবং বড় আকারের ভৌগোলিক আকারের জন্য geo_shape

উদাহরণ:

{
  "properties": {
    "location": { "type": "geo_point" }
  }
}
  • এখানে "location" ফিল্ডে geo_point টাইপ ব্যবহার করা হয়েছে।

৮. Field Name এবং Type Naming Conventions অনুসরণ করা

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

৯. Completion এবং Suggestion ফিল্ড সঠিকভাবে ব্যবহার করা

  • যদি অটো-কমপ্লিশন বা সাজেশন সার্চ প্রয়োজন হয়, তবে completion টাইপ ব্যবহার করা উচিত। এটি সার্চ টাইম কমাতে সাহায্য করে।
  • শুধুমাত্র যেখানে দ্রুত সাজেশন প্রয়োজন সেখানে এটি ব্যবহার করুন, কারণ এটি মেমোরি ব্যবহার বাড়াতে পারে।

উদাহরণ:

{
  "properties": {
    "suggest": { "type": "completion" }
  }
}
  • এখানে "suggest" ফিল্ডে completion টাইপ ব্যবহার করা হয়েছে, যা অটো-কমপ্লিশন সার্চের জন্য উপযোগী।

১০. ইন্ডেক্স সাইজ এবং শার্ড সংখ্যা নির্ধারণ করা

  • Schema Design করার সময় শার্ড এবং রেপ্লিকা সংখ্যা নির্ধারণ করা উচিত। ডেটার পরিমাণ এবং স্কেল অনুযায়ী শার্ড সংখ্যা নির্ধারণ করলে ইন্ডেক্স পারফরম্যান্স উন্নত হয়।
  • ইন্ডেক্স তৈরির সময় সঠিকভাবে শার্ড এবং রেপ্লিকা সংখ্যা নির্ধারণ করতে ভুলবেন না।

উদাহরণ:

PUT /optimized-index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}
  • এখানে ৩টি শার্ড এবং ১টি রেপ্লিকা নির্ধারণ করা হয়েছে।

উপসংহার

Elasticsearch-এ Schema Design করার সময় কিছু বেস্ট প্র্যাকটিস অনুসরণ করলে ইন্ডেক্সিং এবং সার্চ অপারেশনের পারফরম্যান্স ও কার্যকারিতা উন্নত হয়। সঠিক ফিল্ড টাইপ নির্ধারণ, প্রয়োজনীয় ফিল্ডগুলো ইন্ডেক্স করা, এবং Dynamic Mapping নিয়ন্ত্রণ করার মতো চর্চাগুলো Elasticsearch-কে আরও কার্যকর করে তোলে। Schema Design

Content added By
Promotion