Cloud Firestore প্রতিটি কোয়েরির জন্য একটি ইন্ডেক্স প্রয়োজন হওয়ার মাধ্যমে কোয়েরি পারফর্ম্যান্স নিশ্চিত করে। সবচেয়ে সাধারণ কোয়েরির জন্য প্রয়োজনীয় ইন্ডেক্স আপনার জন্য অটোমেটিক তৈরি করা হয়। আপনি অ্যাপ ব্যবহার ও পরীক্ষা করার সময়, Cloud Firestore ত্রুটি মেসেজ জেনারেট করে যা আপনাকে অতিরিক্ত ইন্ডেক্স তৈরি করতে সাহায্য করে যা আপনার অ্যাপের প্রয়োজন। এই পৃষ্ঠায় আপনার অটোমেটিক, ম্যানুয়াল এবং ভেক্টর ইন্ডেক্স কীভাবে ম্যানেজ করবেন তা বর্ণনা করা হয়েছে।
ত্রুটি মেসেজের মাধ্যমে অনুপস্থিত ইন্ডেক্স তৈরি করা
আপনি যদি এমন একটি রেঞ্জ ক্লজ সহ কম্পাউন্ড কোয়েরি করার চেষ্টা করেন যা আগে থেকে থাকা ইন্ডেক্সে ম্যাপ করা নেই, তাহলে আপনি একটি সমস্যার মেসেজ পাবেন। Firebase কনসোলে অনুপস্থিত ইন্ডেক্স তৈরি করার জন্য ত্রুটি মেসেজে একটি সরাসরি লিঙ্ক অন্তর্ভুক্ত থাকে।
Firebase কনসোলে জেনারেট করা লিঙ্কটি অনুসরণ করুন, অটোমেটিক পূরণ করা তথ্য পর্যালোচনা করুন এবং তৈরি করুন বিকল্পে ক্লিক করুন।
ভেক্টর ইন্ডেক্স প্রয়োজন হলে, ত্রুটি মেসেজে অনুপস্থিত ভেক্টর ইন্ডেক্স তৈরি করার জন্য একটি Google Cloud CLI কমান্ড অন্তর্ভুক্ত থাকবে। অনুপস্থিত ইন্ডেক্স তৈরি করতে কমান্ড রান করুন।
ভূমিকা ও অনুমতি
Cloud Firestore-এ ইন্ডেক্স তৈরি করার আগে, আপনাকে নিম্নলিখিত ভূমিকাগুলির মধ্যে যেকোনও একটিতে অ্যাসাইন করা হয়েছে কিনা তা নিশ্চিত করুন:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
আপনি কাস্টম ভূমিকা নির্ধারণ করে থাকলে, ইন্ডেক্স তৈরি করার জন্য নিম্নলিখিত সব অনুমতি অ্যাসাইন করুন:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Firebase কনসোল ব্যবহার করা
Firebase কনসোল থেকে ম্যানুয়ালি নতুন ইন্ডেক্স তৈরি করতে:

- Firebase কনসোলে, ডেটাবেস ও স্টোরেজ > Firestore বিকল্পে যান।
- ইনডেক্স ট্যাবে, ইনডেক্স যোগ করুন বিকল্পে ক্লিক করুন।
- কালেকশনের নাম লিখুন এবং যে ফিল্ড অনুযায়ী ইন্ডেক্স সাজাতে চান সেটি সেট করুন।
- তৈরি করুন বিকল্পে ক্লিক করুন।
ইন্ডেক্স ফিল্ডকে অবশ্যই ফিল্ড পাথের উপর বিধিনিষেধ মেনে চলতে হবে।
কোয়েরির সাইজের উপর নির্ভর করে, ইন্ডেক্স তৈরি হতে কয়েক মিনিট সময় লাগতে পারে। তৈরি করার পরে, আপনি কম্পোজিট ইন্ডেক্স বিভাগে আপনার ইন্ডেক্স এবং সেগুলির স্ট্যাটাস দেখতে পারবেন। সেগুলি এখনও তৈরি করা হলে, Firebase কনসোলে একটি বিল্ডিং স্ট্যাটাস বার অন্তর্ভুক্ত থাকে।
ইন্ডেক্স সরিয়ে দিন
কোনও ইন্ডেক্স মুছে ফেলতে:
- Firebase কনসোলে, ডেটাবেস ও স্টোরেজ > Firestore বিকল্পে যান।
- ইনডেক্স ট্যাবে, আপনি যে ইনডেক্স মুছতে চান সেটির উপর মাউস নিয়ে যান এবং সংশ্লিষ্ট মেনু থেকে মুছুন বিকল্প বেছে নিন।
- আপনি যে এটি মুছে ফেলতে চান তা কনফার্ম করতে, বিজ্ঞপ্তি থেকে মুছে ফেলুন বিকল্পে ক্লিক করুন।
Firebase CLI ব্যবহার করুন
এছাড়াও, আপনি Firebase CLI-এর মাধ্যমে ইন্ডেক্স ডিপ্লয় করতে পারবেন।
শুরু করতে, আপনার প্রোজেক্ট ডিরেক্টরিতে firebase init firestore রান করুন।
সেট-আপের সময়, Firebase CLI সঠিক ফর্ম্যাটে ডিফল্ট ইন্ডেক্স সহ
একটি JSON ফাইল তৈরি করে। আরও ইন্ডেক্স যোগ করতে ফাইলটি এডিট করুন এবং firebase deploy কমান্ডের সাহায্যে
এটি ডিপ্লয় করুন।
শুধুমাত্র Cloud Firestore ইন্ডেক্স ও নিয়ম ডিপ্লয় করতে, --only firestore ফ্ল্যাগ যোগ করুন।
Firebase কনসোল ব্যবহার করে ইন্ডেক্সে কোনও পরিবর্তন করলে, আপনার লোকাল ইন্ডেক্স ফাইলও আপডেট করতে ভুলবেন না। JSON ইন্ডেক্স ডেফিনিশন রেফারেন্স দেখুন।
Terraform ব্যবহার করুন
ডেটাবেসে ইনডেক্স তৈরি করা হচ্ছে
Cloud Firestore ডেটাবেসে সিঙ্গেল-ফিল্ড (অটোমেটিক) এবং কম্পোজিট (ম্যানুয়াল) দুই ধরনের ইন্ডেক্সই থাকতে পারে। আপনার ডেটাবেসের জন্য ইনডেক্স তৈরি করতে Terraform কনফিগারেশন ফাইল এডিট করতে পারবেন। অটোমেটিক ও ম্যানুয়াল ইন্ডেক্স আলাদা Terraform রিসোর্স টাইপ ব্যবহার করে
(google_firestore_index
এবং google_firestore_field)।
সিঙ্গেল-ফিল্ড (অটোমেটিক) ইন্ডেক্স
নিম্নলিখিত উদাহরণ Terraform কনফিগারেশন ফাইল chatrooms কালেকশনে name ফিল্ডে একটি সিঙ্গল-ফিল্ড ইন্ডেক্স তৈরি করে:
firestore.tf
resource "random_id" "variable"{
byte_length = 8
}
resource "google_firestore_field" "single-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms_${random_id.variable.hex}"
field = "name"
index_config {
indexes {
order = "ASCENDING"
query_scope = "COLLECTION_GROUP"
}
indexes {
array_config = "CONTAINS"
}
}
ttl_config {}
}
- project-id-এর জায়গায় আপনার প্রোজেক্ট আইডি লিখুন। প্রোজেক্ট আইডি অনন্য হতে হবে।
- database-id-এর জায়গায় আপনার ডেটাবেসের আইডি লিখুন।
কম্পোজিট (ম্যানুয়াল) ইন্ডেক্স
নিম্নলিখিত উদাহরণ Terraform কনফিগারেশন ফাইল chatrooms সংগ্রহে name ফিল্ড এবং description ফিল্ডের সংমিশ্রণের জন্য একটি কম্পোজিট ইন্ডেক্স তৈরি করে:
firestore.tf
resource "google_firestore_index" "composite-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms"
fields {
field_path = "name"
order = "ASCENDING"
}
fields {
field_path = "description"
order = "DESCENDING"
}
}
- project-id-এর জায়গায় আপনার প্রোজেক্ট আইডি লিখুন। প্রোজেক্ট আইডি অনন্য হতে হবে।
- database-id-এর জায়গায় আপনার ডেটাবেসের আইডি লিখুন।
ভেক্টর ইন্ডেক্স
নিম্নলিখিত উদাহরণ Terraform কনফিগারেশন ফাইল chatrooms কালেকশনে embedding ফিল্ডে একটি ভেক্টর ইন্ডেক্স তৈরি করে:
firestore.tf
resource "google_firestore_index" "vector-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms"
fields {
field_path = "__name__"
order = "ASCENDING"
}
fields {
field_path = "embedding"
vector_config {
dimension = 128
flat {}
}
}
}
- project-id-এর জায়গায় আপনার প্রোজেক্ট আইডি লিখুন। প্রোজেক্ট আইডি অনন্য হতে হবে।
- database-id-এর জায়গায় আপনার ডেটাবেসের আইডি লিখুন।
Index build time
ইনডেক্স তৈরি করতে, Cloud Firestore-কে ইনডেক্স সেট-আপ করতে হবে এবং তারপর আগে থেকে থাকা ডেটা দিয়ে ইনডেক্স ব্যাকফিল করতে হবে। ইনডেক্স তৈরির সময় হল সেট-আপের সময় ও ব্যাকফিলের সময়ের যোগফল:
ইনডেক্স সেট-আপ করতে কয়েক মিনিট সময় লাগে। একটি ইন্ডেক্স তৈরি করতে ন্যূনতম সময় হল কয়েক মিনিট, এমনকি একটি খালি ডেটাবেসের জন্যও।
ব্যাকফিল করতে কত সময় লাগবে তা নির্ভর করে নতুন ইনডেক্সে আগে থেকে থাকা ডেটার পরিমাণের উপর। ইনডেক্স সংজ্ঞার সাথে যত বেশি ফিল্ড ভ্যালু মিলবে, ইনডেক্স ব্যাকফিল করতে তত বেশি সময় লাগবে।
ইনডেক্স তৈরি করা হল দীর্ঘ সময় ধরে চলা অপারেশন।
আপনি ইন্ডেক্স তৈরি করা শুরু করার পরে, Cloud Firestore অপারেশনটিকে
একটি অনন্য নাম অ্যাসাইন করে। অপারেশনের নামের আগে projects/[PROJECT_ID]/databases/(default)/operations/ থাকে,
যেমন:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
তবে, describe কমান্ডের জন্য কোনও অপারেশন নাম উল্লেখ করার সময় আপনি প্রিফিক্স বাদ দিতে পারেন।
দীর্ঘ সময় ধরে চলা সব অপারেশনের তালিকা তৈরি করা হচ্ছে
দীর্ঘ সময় ধরে চলা অপারেশন তালিকাভুক্ত করতে, gcloud firestore operations list কমান্ড ব্যবহার করুন। এই কমান্ডটি বর্তমানে চলছে এবং সম্প্রতি সম্পূর্ণ হয়েছে এমন অপারেশনগুলির তালিকা দেখায়। সম্পূর্ণ হওয়ার পরে কয়েক দিনের জন্য অপারেশন তালিকাভুক্ত করা হয়:
gcloud firestore operations list
অপারেশন স্ট্যাটাস চেক করুন
দীর্ঘ সময় ধরে চলা সব অপারেশনের তালিকা দেখানোর পরিবর্তে, আপনি একটি অপারেশনের বিবরণ দেখাতে পারেন:
gcloud firestore operations describe operation-name
সম্পূর্ণ হওয়ার সময় অনুমান করা হচ্ছে
আপনার অপারেশন চলাকালীন, অপারেশনের সামগ্রিক স্ট্যাটাসের জন্য
state ফিল্ডের ভ্যালু দেখুন।
দীর্ঘ সময় ধরে চলা অপারেশনের স্ট্যাটাসের জন্য করা অনুরোধও মেট্রিক
workEstimated এবং workCompleted ফিরিয়ে দেয়। এইসব মেট্রিক ডকুমেন্টের সংখ্যার জন্য
ফেরত দেওয়া হয়। workEstimated-এ আনুমানিক মোট ডকুমেন্টের সংখ্যা দেখানো হয় যা
অপারেশন প্রসেস করবে। workCompleted
এখনও পর্যন্ত যতগুলি ডকুমেন্ট প্রসেস করা হয়েছে তার সংখ্যা দেখায়। অপারেশন সম্পূর্ণ হওয়ার পরে,
workCompleted-এ আসলে প্রসেস করা হয়েছে এমন ডকুমেন্টের মোট সংখ্যা দেখানো হয়, যা workEstimated-এর ভ্যালুর থেকে আলাদা হতে পারে।
অগ্রগতির আনুমানিক হিসেব পেতে workCompleted-কে workEstimated দিয়ে ভাগ করুন। অনুমানটি
সঠিক নাও হতে পারে কারণ এটি দেরিতে পরিসংখ্যান সংগ্রহের উপর নির্ভর
করে।
যেমন, এখানে একটি ইন্ডেক্স বিল্ডের প্রগ্রেস স্ট্যাটাস দেওয়া হল:
{
"operations": [
{
"name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
"metadata": {
"@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
"common": {
"operationType": "CREATE_INDEX",
"startTime": "2020-06-23T16:52:25.697539Z",
"state": "PROCESSING"
},
"progressDocuments": {
"workCompleted": "219327",
"workEstimated": "2198182"
}
},
},
...
কোনও অপারেশন সম্পূর্ণ হলে, অপারেশনের বিবরণে "done":
true থাকবে। অপারেশনের ফলাফলের জন্য
state ফিল্ডের ভ্যালু দেখুন। উত্তরে done ফিল্ড সেট করা না থাকলে,
সেক্ষেত্রে এর ভ্যালু হবে false। প্রসেস চলছে এমন অপারেশনের জন্য done ভ্যালুর
উপস্থিতির উপর নির্ভর করবেন না।
ইনডেক্স তৈরি করার সময় হওয়া সমস্যা
ম্যানুয়াল ইন্ডেক্স ও অটোমেটিক ইন্ডেক্স সংক্রান্ত ছাড় ম্যানেজ করার সময় ইন্ডেক্স তৈরি করা সংক্রান্ত সমস্যার সম্মুখীন হতে পারেন। ইনডেক্সিং অপারেশন ব্যর্থ হতে পারে যদি Cloud Firestore ইনডেক্সিং করার সময় ডেটাতে কোনও সমস্যা হয়। সাধারণত, এর অর্থ হল আপনি ইনডেক্স সীমায় পৌঁছে গেছেন। যেমন, অপারেশনটি প্রতিটি ডকুমেন্টের জন্য সর্বাধিক সংখ্যক ইন্ডেক্স এন্ট্রিতে পৌঁছে যেতে পারে।
ইনডেক্স তৈরি করা না গেলে, আপনি কনসোলে সমস্যার মেসেজ দেখতে পাবেন। আপনি ইন্ডেক্স করার সীমা অতিক্রম করেননি তা যাচাই করার পরে, ইন্ডেক্স করার অপারেশন আবার চেষ্টা করুন।