Cloud Firestore একটি একক কোয়েরিতে একাধিক ক্ষেত্রে পরিসর এবং বৈষম্য ফিল্টার ব্যবহার সমর্থন করে। আপনি একাধিক ক্ষেত্রে পরিসর এবং বৈষম্য শর্ত রাখতে পারেন এবং Cloud Firestore পোস্ট-ফিল্টারিং লজিকের বাস্তবায়ন অর্পণ করে আপনার অ্যাপ্লিকেশন ডেভেলপমেন্টকে সহজ করতে পারেন।
একাধিক ক্ষেত্রের পরিসর এবং বৈষম্য ফিল্টার
নিম্নলিখিত কোয়েরিটি জনসংখ্যা এবং ঘনত্বের উপর রেঞ্জ ফিল্টার ব্যবহার করে এমন সমস্ত শহরগুলিকে দেখায় যেখানে জনসংখ্যা ১০,০০,০০০ এর বেশি এবং জনসংখ্যার ঘনত্ব প্রতি ইউনিট এলাকার ১০,০০০ এর কম।
ওয়েব সংস্করণ ৯ মডুলার
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)
অবজেক্টিভ-সি
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);
নোড.জেএস
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)
পিএইচপি
সি#
রুবি
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");
নোড.জেএস
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`
}
});;
নোড.জেএস
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 রেঞ্জ বা অসমতার ক্ষেত্রের সংখ্যা ১০-এর মধ্যে সীমাবদ্ধ করে। এটি কোয়েরি চালানো যাতে খুব বেশি ব্যয়বহুল না হয় তার জন্য।
এরপর কি?
- আপনার কোয়েরিগুলি অপ্টিমাইজ করার বিষয়ে জানুন।
- সহজ এবং জটিল প্রশ্ন সম্পাদন সম্পর্কে আরও জানুন।
- Cloud Firestore কীভাবে ইনডেক্স ব্যবহার করে তা বুঝুন।