Firebase আপনাকে একটি ইচ্ছাকৃত চাইল্ড কী ব্যবহার করে আপনার ডেটাতে অ্যাড-হক কোয়েরি করতে দেয়। যদি আপনি আগে থেকেই জানেন যে আপনার ইনডেক্সগুলি কী হবে, তাহলে আপনি কোয়েরি কর্মক্ষমতা উন্নত করতে আপনার Firebase রিয়েলটাইম ডাটাবেস সুরক্ষা নিয়মের .indexOn নিয়মের মাধ্যমে সেগুলি সংজ্ঞায়িত করতে পারেন।
ডেটা সূচক নির্ধারণ করা
Firebase আপনার ডেটা অর্ডার এবং কোয়েরি করার জন্য শক্তিশালী টুল প্রদান করে। বিশেষ করে, Firebase আপনাকে যেকোনো সাধারণ চাইল্ড কী ব্যবহার করে নোডের একটি সংগ্রহে অ্যাড-হক কোয়েরি করার অনুমতি দেয়। আপনার অ্যাপটি যত বড় হবে, এই কোয়েরির কর্মক্ষমতা তত কমবে। তবে, আপনি যদি Firebase কে আপনার কোয়েরি করা কী সম্পর্কে বলেন, তাহলে Firebase সার্ভারে সেই কীগুলি সূচী করবে, যা আপনার কোয়েরির কর্মক্ষমতা উন্নত করবে।
orderByChild দিয়ে ইনডেক্সিং
এটি ব্যাখ্যা করার সবচেয়ে সহজ উপায় হল একটি উদাহরণ। Firebase-এর আমরা সকলেই একমত যে ডাইনোসররা বেশ দারুন। এখানে ডাইনোসরের তথ্যের একটি নমুনা ডাটাবেস থেকে একটি স্নিপেট দেওয়া হল। আমরা এটি ব্যবহার করে ব্যাখ্যা করব কিভাবে .indexOn orderByChild() এর সাথে কাজ করে।
{
"lambeosaurus": {
"height" : 2.1,
"length" : 12.5,
"weight": 5000
},
"stegosaurus": {
"height" : 4,
"length" : 9,
"weight" : 2500
}
} কল্পনা করা যাক যে আমাদের অ্যাপে, আমাদের প্রায়শই নাম, উচ্চতা এবং দৈর্ঘ্য অনুসারে ডাইনোসর অর্ডার করতে হয়, কিন্তু ওজন অনুসারে নয়। Firebase কে এই তথ্য জানিয়ে আমরা আমাদের প্রশ্নের কর্মক্ষমতা উন্নত করতে পারি। যেহেতু ডাইনোসরের নাম কেবল চাবিকাঠি, তাই Firebase ইতিমধ্যেই ডাইনোসরের নাম অনুসারে প্রশ্নের জন্য অপ্টিমাইজ করে, যেহেতু এটি রেকর্ডের চাবিকাঠি। আমরা .indexOn ব্যবহার করে Firebase কে উচ্চতা এবং দৈর্ঘ্যের জন্যও প্রশ্নগুলি অপ্টিমাইজ করতে বলতে পারি:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
} অন্যান্য নিয়মের মতো, আপনি আপনার নিয়মের যেকোনো স্তরে একটি .indexOn নিয়ম নির্দিষ্ট করতে পারেন। উপরের উদাহরণের জন্য আমরা এটিকে রুট লেভেলে রেখেছি কারণ সমস্ত ডাইনোসর ডেটা ডাটাবেসের রুটে সংরক্ষণ করা হয়।
orderByValue দিয়ে ইন্ডেক্সিং
এই উদাহরণে, আমরা দেখাবো কিভাবে .indexOn orderByValue() এর সাথে কাজ করে। ধরুন আমরা নিম্নলিখিত ডেটা ব্যবহার করে ডাইনো স্পোর্টস স্কোরের একটি লিডারবোর্ড তৈরি করছি:
{
"scores": {
"bruhathkayosaurus" : 55,
"lambeosaurus" : 21,
"linhenykus" : 80,
"pterodactyl" : 93,
"stegosaurus" : 5,
"triceratops" : 22
}
} যেহেতু আমরা লিডারবোর্ড তৈরি করতে orderByValue() ব্যবহার করছি, তাই আমাদের /scores নোডে একটি .value নিয়ম যোগ করে আমরা আমাদের কোয়েরিগুলি অপ্টিমাইজ করতে পারি:
{
"rules": {
"scores": {
".indexOn": ".value"
}
}
}