একাধিক ক্ষেত্রের ওভারভিউতে পরিসীমা এবং অসমতা ফিল্টার সহ ক্যোয়ারী

ক্লাউড ফায়ারস্টোর একক প্রশ্নের একাধিক ক্ষেত্রে পরিসীমা এবং অসমতা ফিল্টার ব্যবহার করে সমর্থন করে। আপনি এখন একাধিক ক্ষেত্রগুলিতে পরিসীমা এবং অসমতার শর্ত থাকতে পারেন এবং ক্লাউড ফায়ারস্টোরে পোস্ট-ফিল্টারিং যুক্তির বাস্তবায়ন অর্পণ করে আপনার অ্যাপ্লিকেশন বিকাশকে সহজ করতে পারেন৷

একাধিক ক্ষেত্রে পরিসীমা এবং অসমতা ফিল্টার

নিম্নলিখিত ক্যোয়ারী সেই সমস্ত ব্যবহারকারীদের ফেরত দেয় যাদের বয়স 35 এর বেশি এবং উচ্চতা 60 থেকে 70 এর মধ্যে বয়স এবং উচ্চতার পরিসর ফিল্টার ব্যবহার করে৷

ওয়েব সংস্করণ 9 মডুলার

  const q = query(
      collection(db, "users"),
      where('age', '>', 35),
      where('height', '>', 60),
      where('height', '<', 70)
    );

সুইফট

 let query = db.collection("users")
   .whereField("age", isGreaterThan: 35)
   .whereField("height", isGreaterThan: 60)
   .whereField("height", isLessThan: 70)

উদ্দেশ্য গ

 FIRQuery *query = 
  [[[[self.db collectionWithPath:@"users"]
 queryWhereField:@"age" isGreaterThan:@35]
    queryWhereField:@"height" isGreaterThan:@60] 
        queryWhereField:@"height" isLessThan:@70];

জাভা অ্যান্ড্রয়েড

 Query query = db.collection("users")
  .whereGreaterThan("age", 35)
  .whereGreaterThan("height", 60)
  .whereLessThan("height", 70);

কোটলিন+কেটিএক্স অ্যান্ড্রয়েড

 val query = db.collection("users")
  .whereGreaterThan("age", 35)
  .whereGreaterThan("height", 60)
  .whereLessThan("height", 70)

জাভা

  db.collection("users")
    .whereGreaterThan("age", 35)
    .whereGreaterThan("height", 60)
    .whereLessThan("height", 70);

Node.js

db.collection("users")
  .where('age', '>', 35),
  .where('height', '>', 60),
  .where('height', '<', 70)

সূচক বিবেচনা

আপনি আপনার প্রশ্নগুলি চালানো শুরু করার আগে, নিশ্চিত করুন যে আপনি প্রশ্নগুলি এবং ক্লাউড ফায়ারস্টোর ডেটা মডেল সম্পর্কে পড়েছেন৷

ক্লাউড ফায়ারস্টোরে, একটি কোয়েরির ORDER BY ক্লজ নির্ধারণ করে যে কোয়েরি পরিবেশন করতে কোন সূচী ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ORDER BY a ASC, b ASC a ASC, b ASC ক্ষেত্রের একটি যৌগিক সূচক প্রয়োজন৷

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

ধরুন আপনি কর্মচারীদের একটি সংগ্রহের মাধ্যমে অনুসন্ধান করতে চান এবং এমন কর্মচারীদের খুঁজে পেতে চান যাদের বেতন 100000-এর বেশি এবং যাদের বছরের অভিজ্ঞতার সংখ্যা 0-এর বেশি। ডেটাসেট সম্পর্কে আপনার বোঝার উপর ভিত্তি করে, আপনি জানেন যে বেতনের সীমাবদ্ধতা আরও বেশি নির্বাচনী অভিজ্ঞতার সীমাবদ্ধতা। আদর্শ সূচক যা সূচক স্ক্যানের সংখ্যা হ্রাস করবে তা হবে (salary [...], experience [...]) । সুতরাং, যে প্রশ্নটি দ্রুত এবং সাশ্রয়ী হবে তা experience আগে salary অর্ডার করবে এবং নিম্নরূপ দেখাবে:

জাভা

db.collection("employees")
  .whereGreaterThan("salary", 100000)
  .whereGreaterThan("experience", 0)
  .orderBy("salary")
  .orderBy("experience");

Node.js

db.collection("employees")
  .where("salary", ">", 100000)
  .where("experience", ">", 0)
  .orderBy("salary")
  .orderBy("experience");

পাইথন

db.collection("employees")
  .where("salary", ">", 100000)
  .where("experience", ">", 0)
  .order_by("salary")
  .order_by("experience");

সূচী অপ্টিমাইজ করার জন্য সর্বোত্তম অনুশীলন

সূচীগুলি অপ্টিমাইজ করার সময়, নিম্নলিখিত সেরা অনুশীলনগুলি নোট করুন৷

সর্বাধিক নির্বাচনী পরিসর বা অসমতা ক্ষেত্র দ্বারা অনুসরণ করে সমতা অনুসারে সূচক ক্ষেত্রগুলিকে ক্রম করুন৷

ক্লাউড ফায়ারস্টোর orderBy() ক্যোয়ারির প্রথম ফিল্ডে সমতার সীমাবদ্ধতা এবং পরিসর বা অসমতার সীমাবদ্ধতা, যদি থাকে, তা পূরণ করতে একটি যৌগিক সূচকের বামতম ক্ষেত্রগুলি ব্যবহার করে৷ এই সীমাবদ্ধতাগুলি ক্লাউড ফায়ারস্টোর স্ক্যান করে এমন সূচক এন্ট্রির সংখ্যা কমাতে পারে। ক্লাউড ফায়ারস্টোর সূচকের অবশিষ্ট ক্ষেত্রগুলি ব্যবহার করে কোয়েরির অন্যান্য পরিসীমা বা অসমতার সীমাবদ্ধতাগুলি পূরণ করতে। এই সীমাবদ্ধতাগুলি ক্লাউড ফায়ারস্টোর স্ক্যান করে এমন সূচকের এন্ট্রির সংখ্যা কমায় না কিন্তু অতুলনীয় নথিগুলিকে ফিল্টার করে যাতে ক্লায়েন্টদের কাছে ফেরত দেওয়া নথিগুলির সংখ্যা হ্রাস পায়৷

দক্ষ সূচক তৈরির বিষয়ে আরও তথ্যের জন্য, একটি নিখুঁত সূচকের সংজ্ঞা দেখুন।

ক্যোয়ারী সীমাবদ্ধতা নির্বাচনের হ্রাসের ক্রমে অর্ডার ক্ষেত্র

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

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

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

জাভা

db.collection("employees")
  .whereGreaterThan("salary", 100000)
  .orderBy("salary")
  .get()
  .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
          // Order results by `experience`
        }
    });;

Node.js

const querySnapshot = await db.collection('employees')
                              .where("salary", ">", 100000)
                              .orderBy("salary")
                              .get();

// Order results by `experience`

পাইথন

results = db.collection("employees")
            .where("salary", ">", 100000)
            .order_by("salary")
            .stream()

// Order results by `experience`

ক্যোয়ারীতে experience উপর একটি অর্ডার যোগ করার সময় নথির একই সেট পাওয়া যাবে এবং ক্লায়েন্টদের ফলাফলগুলি পুনরায় অর্ডার করা থেকে বিরত থাকবে, ক্যোয়ারীটি আগের ক্যোয়ারী থেকে অনেক বেশি বহিরাগত সূচক এন্ট্রি পড়তে পারে। এর কারণ হল ক্লাউড ফায়ারস্টোর সর্বদা একটি সূচক পছন্দ করে যার সূচী ক্ষেত্র উপসর্গ কোয়েরির ধারা অনুসারে ক্রম অনুসারে মেলে। যদি অনুচ্ছেদে experience যোগ করা হয়, তাহলে ক্লাউড ফায়ারস্টোর ক্যোয়ারী ফলাফল গণনার জন্য (experience [...], salary [...]) সূচক নির্বাচন করবে। যেহেতু experience উপর অন্য কোন সীমাবদ্ধতা নেই, তাই ক্লাউড ফায়ারস্টোর চূড়ান্ত ফলাফল সেট খুঁজে পেতে salary ফিল্টার প্রয়োগ করার আগে employees সংগ্রহের সমস্ত সূচক এন্ট্রি পড়বে। এর মানে হল যে ইনডেক্স এন্ট্রিগুলি যেগুলি salary ফিল্টারকে সন্তুষ্ট করে না সেগুলি এখনও পড়া হয়, এইভাবে প্রশ্নের লেটেন্সি এবং খরচ বৃদ্ধি করে৷

মূল্য নির্ধারণ

একাধিক ক্ষেত্রে পরিসীমা এবং অসমতা ফিল্টার সহ ক্যোয়ারীগুলি পঠিত নথির উপর ভিত্তি করে বিল করা হয় এবং পঠিত সূচক এন্ট্রি।

বিস্তারিত তথ্যের জন্য, মূল্য পৃষ্ঠা দেখুন।

সীমাবদ্ধতা

ক্যোয়ারী সীমাবদ্ধতা ছাড়াও, একাধিক ক্ষেত্রে পরিসীমা এবং অসমতা ফিল্টার সহ প্রশ্নগুলি ব্যবহার করার আগে নিম্নলিখিত সীমাবদ্ধতাগুলি নোট করুন:

  • নথির ক্ষেত্রগুলিতে পরিসীমা বা অসমতা ফিল্টার সহ ক্যোয়ারী এবং নথি কী (__name__) তে শুধুমাত্র সমতা সীমাবদ্ধতা সমর্থিত নয়।
  • ক্লাউড ফায়ারস্টোর পরিসীমা বা অসমতার ক্ষেত্রগুলির সংখ্যা 10-এ সীমাবদ্ধ করে৷ এটি চালানোর জন্য খুব ব্যয়বহুল হয়ে উঠা প্রশ্নগুলিকে প্রতিরোধ করার জন্য৷

এরপর কি