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

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

تعريف مؤشرات البيانات

يوفر 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"
    }
  }
}