Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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