قم بفهرسة بياناتك

يتيح لك Firebase إجراء استعلامات مخصصة على بياناتك باستخدام مفتاح فرعي عشوائي. إذا كنت تعرف مقدمًا ما ستكون عليه فهارسك، فيمكنك تعريفها عبر قاعدة .indexOn في قواعد أمان قاعدة بيانات Firebase Realtime لتحسين أداء الاستعلام.

تحديد فهارس البيانات

يوفر 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() لإنشاء لوحة المتصدرين، فيمكننا تحسين استعلاماتنا عن طريق إضافة قاعدة .value في عقدة /scores الخاصة بنا:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}