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

يسمح لك 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"
    }
  }
}