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

Cloud Firestore একক প্রশ্নের একাধিক ক্ষেত্রে পরিসীমা এবং অসমতা ফিল্টার ব্যবহার করে সমর্থন করে। আপনি একাধিক ক্ষেত্রে পরিসীমা এবং অসমতার শর্ত থাকতে পারেন এবং Cloud Firestore পোস্ট-ফিল্টারিং লজিক বাস্তবায়নের দায়িত্ব অর্পণ করে আপনার অ্যাপ্লিকেশন বিকাশকে সহজ করতে পারেন।

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

নিম্নলিখিত ক্যোয়ারীটি জনসংখ্যা এবং ঘনত্বের পরিসীমা ফিল্টার ব্যবহার করে সেই সমস্ত শহরগুলিকে ফেরত দেয় যেখানে জনসংখ্যা 1,000,000 লোকের বেশি এবং জনসংখ্যার ঘনত্ব প্রতি ইউনিট প্রতি 10,000 লোকের কম৷

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

const q = query(
    collection(db, "cities"),
    where('population', '>', 1000000),
    where('density', '<', 10000),
  );

সুইফট

let query = db.collection("cities")
  .whereField("population", isGreaterThan: 1000000)
  .whereField("density", isLessThan: 10000)

উদ্দেশ্য-C

FIRQuery *query =
 [[[[self.db collectionWithPath:@"cities"]
queryWhereField:@"population" isGreaterThan:@1000000]
   queryWhereField:@"density" isLessThan:@10000];

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

Query query = db.collection("cities")
 .whereGreaterThan("population", 1000000)
 .whereLessThan("density", 10000);

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

val query = db.collection("cities")
 .whereGreaterThan("population", 1000000)
 .whereLessThan("density", 10000)

যাও

   query := client.Collection("cities").
      Where("population", ">", 1000000).
      Where("density", "<", 10000)

জাভা

db.collection("cities")
  .whereGreaterThan("population", 1000000)
  .whereLessThan("density", 10000);

Node.js

db.collection("cities")
  .where('population', '>', 1000000),
  .where('density', '<', 10000)

পাইথন

from google.cloud import firestore

db = firestore.Client()
query = db.collection("cities")
.where("population", ">", 1000000)
.where("density", "<", 10000)

পিএইচপি

$collection = $db->collection('samples/php/cities');
$chainedQuery = $collection
    ->where('population', '>', 1000000)
    ->where('density', '<', 10000);

সি#

CollectionReference citiesRef = db.Collection("cities");
Query query = citiesRef
    .WhereGreaterThan("Population", 1000000)
    .WhereLessThan("Density", 10000);
QuerySnapshot querySnapshot = await query.GetSnapshotAsync();
foreach (DocumentSnapshot documentSnapshot in querySnapshot)
{
    var name = documentSnapshot.GetValue<string>("Name");
    var population = documentSnapshot.GetValue<int>("Population");
    var density = documentSnapshot.GetValue<int>("Density");
    Console.WriteLine($"City '{name}' returned by query. Population={population}; Density={density}");
}

রুবি

query = cities_ref.where("population", ">", "1000000")
                  .where("density", "<", 10000)

সি++

CollectionReference cities_ref = db->Collection("cities");
Query query = cities_ref.WhereGreaterThan("population", FieldValue::Integer(1000000))
                       .WhereLessThan("density", FieldValue::Integer(10000));

ঐক্য

CollectionReference citiesRef = db.Collection("cities");
Query query = citiesRef.WhereGreaterThan("population", 1000000)
                      .WhereLessThan("density", 10000);

ডার্ট

final citiesRef = FirebaseFirestore.instance.collection('cities')
final query = citiesRef.where("population", isGreaterThan: 1000000)
                  .where("density", isLessThan: 10000);

সূচক বিবেচনা

আপনি আপনার প্রশ্নগুলি চালানোর আগে, প্রশ্নগুলি এবং Cloud Firestore ডেটা মডেল সম্পর্কে পড়ুন৷

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

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

ধরুন আপনি কর্মচারীদের একটি সংগ্রহের মাধ্যমে অনুসন্ধান করতে চান এবং মার্কিন যুক্তরাষ্ট্রের এমন কর্মচারীদের খুঁজে বের করতে চান যাদের বেতন $100,000 এর বেশি এবং যাদের বছরের অভিজ্ঞতার সংখ্যা 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");

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

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

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

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

দক্ষ সূচক তৈরি সম্পর্কে আরও তথ্যের জন্য, সূচক বৈশিষ্ট্য দেখুন।

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

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

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

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

জাভা

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

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

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

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

সীমাবদ্ধতা

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

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

এরপর কি