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

- Firebase কনসোলের Cloud Firestore বিভাগে যান।
- ইনডেক্স ট্যাবে যান এবং অ্যাড ইনডেক্স-এ ক্লিক করুন।
- সংগ্রহের নাম লিখুন এবং যে ফিল্ডগুলোর ভিত্তিতে ইনডেক্সটি সাজাতে চান, সেগুলো সেট করুন।
- তৈরি করুন- এ ক্লিক করুন।
ইনডেক্স ফিল্ডগুলোকে অবশ্যই ফিল্ড পাথের উপর আরোপিত সীমাবদ্ধতা মেনে চলতে হবে।
কোয়েরির আকারের উপর নির্ভর করে ইনডেক্স তৈরি হতে কয়েক মিনিট সময় লাগতে পারে। এগুলো তৈরি করার পর, আপনি কম্পোজিট ইনডেক্স (Composite Indexes) বিভাগে আপনার ইনডেক্স এবং সেগুলোর অবস্থা দেখতে পারবেন। যদি সেগুলো তখনও তৈরি হতে থাকে, তাহলে ফায়ারবেস কনসোলে (Firebase console) একটি বিল্ডিং স্ট্যাটাস বার (building status bar) দেখা যায়।
সূচকগুলি সরান
একটি ইনডেক্স মুছে ফেলতে:
- Firebase কনসোলের Cloud Firestore বিভাগে যান।
- ইনডেক্স ট্যাবে ক্লিক করুন।
- যে ইনডেক্সটি মুছতে চান তার উপর মাউস রাখুন এবং কনটেক্সট মেনু থেকে ডিলিট নির্বাচন করুন।
- অ্যালার্ট থেকে ডিলিট বাটনে ক্লিক করে নিশ্চিত করুন যে আপনি এটি মুছে ফেলতে চান।
ফায়ারবেস সিএলআই ব্যবহার করুন
আপনি Firebase CLI ব্যবহার করেও ইনডেক্স ডেপ্লয় করতে পারেন। শুরু করার জন্য, আপনার প্রজেক্ট ডিরেক্টরিতে firebase init firestore চালান। সেটআপের সময়, Firebase CLI সঠিক ফরম্যাটে ডিফল্ট ইনডেক্সগুলো সহ একটি JSON ফাইল তৈরি করে। আরও ইনডেক্স যোগ করতে ফাইলটি এডিট করুন এবং firebase deploy কমান্ড দিয়ে এটি ডেপ্লয় করুন।
শুধুমাত্র Cloud Firestore ইনডেক্স এবং রুলস ডিপ্লয় করতে, --only firestore ফ্ল্যাগটি যোগ করুন।
আপনি যদি Firebase কনসোল ব্যবহার করে ইনডেক্সগুলিতে কোনো পরিবর্তন করেন, তাহলে আপনার লোকাল ইনডেক্স ফাইলটিও আপডেট করে নিন। এর জন্য JSON ইনডেক্স ডেফিনিশন রেফারেন্সটি দেখুন।
টেরাফর্ম ব্যবহার করুন
ডাটাবেসে ইনডেক্স তৈরি করা
Cloud Firestore ডাটাবেসে একক-ফিল্ড (স্বয়ংক্রিয়) এবং কম্পোজিট (ম্যানুয়াল) উভয় প্রকার ইনডেক্স অন্তর্ভুক্ত থাকতে পারে। আপনি আপনার ডাটাবেসের জন্য একটি ইনডেক্স তৈরি করতে টেরাফর্ম কনফিগারেশন ফাইলটি সম্পাদনা করতে পারেন। স্বয়ংক্রিয় এবং ম্যানুয়াল ইনডেক্স দুটি ভিন্ন টেরাফর্ম রিসোর্স টাইপ ( google_firestore_index এবং google_firestore_field ) ব্যবহার করে।
একক-ক্ষেত্র (স্বয়ংক্রিয়) সূচক
নিম্নলিখিত উদাহরণ টেরাফর্ম কনফিগারেশন ফাইলটি 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 এর জায়গায় আপনার ডাটাবেস আইডি বসান।
যৌগিক (ম্যানুয়াল) সূচক
নিম্নলিখিত উদাহরণ টেরাফর্ম কনফিগারেশন ফাইলটি 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 এর জায়গায় আপনার ডাটাবেস আইডি বসান।
ভেক্টর সূচক
নিম্নলিখিত উদাহরণ টেরাফর্ম কনফিগারেশন ফাইলটি 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 এর জায়গায় আপনার ডাটাবেস আইডি বসান।
সূচক তৈরির সময়
একটি ইনডেক্স তৈরি করতে, 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 যদি ইনডেক্স করা ডেটাতে কোনো সমস্যার সম্মুখীন হয়, তাহলে একটি ইনডেক্সিং অপারেশন ব্যর্থ হতে পারে। সাধারণত, এর অর্থ হলো আপনি ইনডেক্সের সীমায় পৌঁছে গেছেন। উদাহরণস্বরূপ, অপারেশনটি প্রতি ডকুমেন্টে ইনডেক্স এন্ট্রির সর্বোচ্চ সংখ্যায় পৌঁছে যেতে পারে।
ইনডেক্স তৈরি ব্যর্থ হলে, আপনি কনসোলে ত্রুটির বার্তা দেখতে পাবেন। আপনি কোনো ইনডেক্স সীমাতে পৌঁছাচ্ছেন না তা যাচাই করার পর, আপনার ইনডেক্স অপারেশনটি পুনরায় চেষ্টা করুন।