ছিন্ন ক্ষেত্র

এই পৃষ্ঠায় Cloud Firestore শ্রেডেড ফিল্ডের ব্যবহার কীভাবে দেখা ও নিয়ন্ত্রণ করা যায়, তা বর্ণনা করা হয়েছে। এটি ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণে উপলব্ধ।

ডকুমেন্ট লেখার সময়, Cloud Firestore নির্ধারণ করতে পারে যে নির্দিষ্ট কিছু ফিল্ড শ্রেডেড ফরম্যাটে সংরক্ষণ করা উচিত। শ্রেডেড ফিল্ডগুলো সম্পূর্ণ ডকুমেন্ট পড়ার পরিবর্তে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো পড়ার মাধ্যমে কোয়েরির পারফরম্যান্স উন্নত করে।

শ্রেডেড ফিল্ড থেকে উপকৃত হওয়া কোয়েরি

যেখানে প্রযোজ্য, সেখানে শ্রেডেড ফিল্ডের রিডগুলো নিম্নলিখিত কোয়েরি শেপগুলোতে প্রয়োগ করা হয়:

  • অ্যাগ্রিগেশন কোয়েরি : যে কোয়েরিগুলোতে অ্যাগ্রিগেশন অপারেশনের জন্য শুধুমাত্র ফিল্ডের একটি উপসেট অ্যাক্সেস করার প্রয়োজন হয়। উদাহরণস্বরূপ:

    db.pipeline()
      .collection("/customers")
      .where(lessThan("account_balance", 0))
      .aggregate(
        countAll().as("total"),
      )
    

    অথবা গ্রুপ-বাই সহ:

    db.pipeline()
      .collection("/customers")
      .where(lessThan("account_balance", 0))
      .aggregate({
        accumulators: [
          field('account_balance').average().as('avg_account_balance')
        ],
        groups: [field('market_segment')]
      })
    
  • প্রজেকশন কোয়েরি : যে কোয়েরিগুলো শুধুমাত্র ফিল্ডের একটি নির্দিষ্ট উপসেট ফেরত দেয়। উদাহরণস্বরূপ:

    db.pipeline()
      .collection("/customers")
      .select("family_name", "given_name")
      .limit(10)
    
  • ফিল্টার কোয়েরি : সেইসব কোয়েরি যেখানে Cloud Firestore কোয়েরি ইঞ্জিন নির্ধারণ করে যে ডকুমেন্ট ফিল্টারিংয়ের জন্য শ্রেডেড ফিল্ড ব্যবহার করা সুবিধাজনক। উদাহরণস্বরূপ:

    db.pipeline()
      .collection("/customers")
      .where(equal("given_name", "alice"))
    

ছিন্ন ক্ষেত্রগুলির ব্যবহার দেখুন

কোনো কোয়েরিতে শ্রেডেড ফিল্ড ব্যবহৃত হয়েছে কিনা তা পরীক্ষা করতে আপনি কোয়েরি এক্সপ্লেইন ব্যবহার করতে পারেন। কোয়েরি প্ল্যানের TableScan নোডে একটি Storage সেকশন থাকে, যেখানে নিম্নলিখিত মেট্রিকগুলো অন্তর্ভুক্ত থাকে:

  • স্ক্যান আকৃতি :
    • shredded_fields_only : কোয়েরিটি শুধুমাত্র শ্রেডেড ফিল্ডগুলো থেকে ডেটা পড়ে।
    • shredded_fields_backjoin : এই কোয়েরিটি শ্রেডেড ফিল্ডগুলো থেকে ডেটা পড়ে এবং অন্যান্য ফিল্ডের জন্য মূল ডকুমেন্টের সাথে জয়েন করে।
  • ব্যবহৃত শ্রেডেড ফিল্ডসমূহ : শ্রেডেড ফিল্ড হিসাবে পঠিত ফিল্ড নামগুলির একটি তালিকা।
  • পুনঃপরীক্ষার সংখ্যা : পুনঃপরীক্ষার জন্য কাউন্টারগুলির একটি ম্যাপ। পুনঃপরীক্ষা মানে হলো, শ্রেড করা ফিল্ডগুলি স্ক্যান করার সময় মূল সম্পূর্ণ ডকুমেন্ট থেকে পড়া। এটি ঘটতে পারে যদি কোনো ডকুমেন্টের ফিল্ডের মান ৮ কিলোবাইট (KiB) অতিক্রম করে, যা শ্রেড করা ফিল্ডগুলির স্টোরেজের জন্য অনেক বড়।

উদাহরণ আউটপুট

...
└── • TableScan
        source: /customers
        order: UNDEFINED
        row range: (-∞..+∞)
        filter: ($account_balance_1 < 0L)
        output bindings: {$account_balance_1=account_balance, $market_segment_1=market_segment}
        variables: [$account_balance_1, $market_segment_1]

        Execution:
         records returned: 1,374
         latency: 26.58 ms
         post-filtered rows: 13,626
         records scanned: 15,000
         data bytes read: 23.73 MiB (24,887,141 B)

        Storage:
         scan shape: shredded_fields_only
         shredded fields used: [account_balance, market_segment]

ছিন্ন ক্ষেত্রের ব্যবহার নিয়ন্ত্রণ করুন

ডিফল্টরূপে, Cloud Firestore উপলব্ধ থাকলে শ্রেডেড ফিল্ড ব্যবহার করে। আপনি table_scan_method কোয়েরি অপশন ব্যবহার করে এই আচরণটি নিয়ন্ত্রণ করতে পারেন।

table_scan_method অপশনের জন্য সমর্থিত মানসমূহ:

  • shredded_fields_enabled (ডিফল্ট): উপলব্ধ থাকলে শ্রেডেড ফিল্ড ব্যবহার করুন।
  • shredded_fields_disabled : শ্রেডেড ফিল্ড ব্যবহার করবেন না।
  • force_shredded_fields : শ্রেডেড ফিল্ড স্ক্যান করে টেবিল স্ক্যান সম্পন্ন করা না গেলে কোয়েরিটি ব্যর্থ করে দিন।

উদাহরণ

var opts = new PipelineExecuteOptions()
    .with("table_scan_method", "shredded_fields_disabled");

var snapshot = db.pipeline()
    .collection("/customers")
    .where(equal("given_name", "alice"))
    .execute(opts)
    .get();

কোয়েরি পারফরম্যান্স সতর্কতা

অদক্ষ শ্রেডেড ফিল্ড ব্যবহার শনাক্ত হলে Cloud Firestore কোয়েরি এক্সপ্লেইন ফলাফলে পারফরম্যান্স সতর্কতা জারি করতে পারে। উদাহরণস্বরূপ:

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

  • হাই-রিচেক কোয়েরি : এটি তখন ঘটে যখন কোয়েরিটি ঘন ঘন সম্পূর্ণ ডকুমেন্ট রিড করতে বাধ্য হয়, যা পারফরম্যান্সকে প্রভাবিত করতে পারে। রিচেক ট্রিগার করে এমন বড় মান শনাক্ত করতে আপনি storage_size মতো ফাংশন ব্যবহার করতে পারেন।

এইসব ক্ষেত্রে, কোয়েরি অপশন ব্যবহার করে শ্রেডেড ফিল্ড রিড নিষ্ক্রিয় করার কথা বিবেচনা করুন।

সীমাবদ্ধতা

Cloud Firestore শুধুমাত্র শীর্ষ-স্তরের ফিল্ডগুলো শ্রেড করে। এটি প্রতি কালেকশন গ্রুপে শ্রেড করা যাবে এমন ফিল্ডের সংখ্যাও সীমিত করে।