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

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