ফায়ারবেস আপনাকে একটি যথেচ্ছ চাইল্ড কী ব্যবহার করে আপনার ডেটার উপর অ্যাড-হক কোয়েরি চালানোর সুযোগ দেয়। আপনার ইনডেক্সগুলো কী হবে তা যদি আপনি আগে থেকেই জানেন, তাহলে কোয়েরির পারফরম্যান্স উন্নত করার জন্য আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেস সিকিউরিটি রুলস-এর .indexOn রুলের মাধ্যমে সেগুলো নির্ধারণ করতে পারেন।
ডেটা সূচক সংজ্ঞায়িত করা
ফায়ারবেস আপনার ডেটা সাজানো এবং কোয়েরি করার জন্য শক্তিশালী টুল সরবরাহ করে। বিশেষত, ফায়ারবেস আপনাকে যেকোনো সাধারণ চাইল্ড কী ব্যবহার করে নোডের একটি সংগ্রহের উপর অ্যাড-হক কোয়েরি করার সুযোগ দেয়। আপনার অ্যাপ যত বড় হয়, এই কোয়েরির পারফরম্যান্স তত খারাপ হতে থাকে। তবে, আপনি যদি ফায়ারবেসকে জানান যে আপনি কোন কীগুলো কোয়েরি করবেন, তাহলে ফায়ারবেস সার্ভারে সেই কীগুলোকে ইনডেক্স করে রাখবে, যা আপনার কোয়েরির পারফরম্যান্স উন্নত করবে।
orderByChild ব্যবহার করে ইন্ডেক্সিং
এটা ব্যাখ্যা করার সবচেয়ে সহজ উপায় হলো একটি উদাহরণ দেওয়া। Firebase-এ আমরা সবাই একমত যে ডাইনোসর বেশ চমৎকার একটি প্রাণী। এখানে ডাইনোসর সম্পর্কিত তথ্যের একটি নমুনা ডেটাবেস থেকে একটি কোড স্নিপেট দেওয়া হলো। orderByChild() এর সাথে .indexOn কীভাবে কাজ করে, তা ব্যাখ্যা করার জন্য আমরা এটি ব্যবহার করব।
{
"lambeosaurus": {
"height" : 2.1,
"length" : 12.5,
"weight": 5000
},
"stegosaurus": {
"height" : 4,
"length" : 9,
"weight" : 2500
}
} ধরা যাক, আমাদের অ্যাপে প্রায়শই ডাইনোসরগুলোকে নাম, উচ্চতা এবং দৈর্ঘ্য অনুসারে সাজানোর প্রয়োজন হয়, কিন্তু ওজন অনুসারে কখনোই নয়। আমরা ফায়ারবেসকে এই তথ্যটি জানিয়ে আমাদের কোয়েরিগুলোর পারফরম্যান্স উন্নত করতে পারি। যেহেতু ডাইনোসরগুলোর নামগুলো কেবল কী (key), ফায়ারবেস ইতিমধ্যেই ডাইনোসরের নাম দিয়ে করা কোয়েরিগুলোর জন্য অপটিমাইজ করে, কারণ এটিই রেকর্ডের কী। আমরা .indexOn ব্যবহার করে ফায়ারবেসকে উচ্চতা এবং দৈর্ঘ্যের জন্যও কোয়েরি অপটিমাইজ করতে বলতে পারি:
{
"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"
}
}
}