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

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

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