تحسين أداء طلبات البحث

ينطبق ذلك على إصدار Cloud Firestore Enterprise فقط.

لتحديد المشاكل في طلبات البحث البطيئة وحلّها، استخدِم Query Explain للحصول على خطة تنفيذ طلب البحث وملف تعريف التنفيذ في وقت التشغيل. يوضّح القسم التالي الخطوات التي يمكنك اتّخاذها لتحسين أداء طلب البحث استنادًا إلى ملف التنفيذ:

الحدّ من عدد النتائج

استخدِم الحقل "عدد السجلات التي تم عرضها" في شجرة التنفيذ لتحديد ما إذا كان طلب البحث يعرض العديد من المستندات. يمكنك الحد من عدد المستندات التي يتم عرضها باستخدام العبارة $limit. يؤدي ذلك إلى تقليل حجم البايت المتسلسل للنتائج عند عرضها للعملاء عبر الشبكة. في الحالات التي يسبق فيها العقدة Limit العقدة MajorSort، يمكن لمحرك البحث دمج العقدتين Limit وMajorSort واستبدال عملية إنشاء وفرز كاملة في الذاكرة بفرز TopN، ما يقلل من متطلبات الذاكرة للاستعلام.

الحدّ من حجم مستند النتائج

ننصحك بالحدّ من حجم المستند الذي يتم عرضه باستخدام عبارة $project لتجنُّب جلب حقول غير ضرورية. يساعد ذلك في تقليل تكلفة الحوسبة والذاكرة اللازمة لمعالجة النتائج الوسيطة وحجم البايت المتسلسل للنتائج عند إرسالها إلى العملاء عبر الشبكة. في الحالات التي تغطي فيها الفهرسة العادية (غير المتعددة المفاتيح) جميع الحقول المشار إليها في طلب البحث، يتيح ذلك أيضًا أن تغطي عملية فحص الفهرس طلب البحث بالكامل، ما يجنّب الحاجة إلى جلب المستندات من وحدة التخزين الأساسية.

استخدام الفهارس

اتّبِع التعليمات التالية لإعداد الفهارس وتحسينها.

تحديد ما إذا كان طلب البحث يستخدم فهرسًا

يمكنك تحديد ما إذا كان طلب البحث يستخدم فهرسًا من خلال التحقّق من عُقد الأوراق في شجرة التنفيذ. إذا كانت عقدة الورقة في شجرة التنفيذ هي عقدة TableScan، هذا يعني أنّ طلب البحث لا يستخدم فهرسًا ويجري فحصًا للمستندات من وحدة التخزين الأساسية. في حال استخدام فهرس، ستعرض عقدة الورقة في شجرة التنفيذ معرّف الفهرس وحقول الفهرس.

تحديد ما إذا كان يمكن تحسين الفهرس المستخدَم

يكون الفهرس مفيدًا لطلب البحث إذا كان بإمكانه تقليل عدد المستندات التي يحتاج محرك البحث إلى استرجاعها من وحدة التخزين الأساسية، أو إذا كان ترتيب الحقول فيه يمكن أن يلبّي متطلبات الترتيب في طلب البحث.

إذا تم استخدام فهرس لطلب بحث، ولكن ظلّ محرّك طلب البحث يجلب العديد من المستندات ويتجاهلها، كما هو محدّد بواسطة عقدة Scan تعرض العديد من السجلات متبوعة بعقدة Filter تعرض عددًا قليلاً من السجلات، فهذا يشير إلى أنّ شرط طلب البحث الذي تم استيفاؤه باستخدام الفهرس ليس انتقائيًا. لإنشاء فهرس أكثر ملاءمة، يُرجى الاطّلاع على إنشاء فهارس.

إذا تم استخدام فهرس غير متعدد المفاتيح لتنفيذ طلب بحث، ولكن كان محرك البحث لا يزال يعيد ترتيب مجموعة النتائج في الذاكرة، كما هو موضّح من خلال عقدة MajorSort في شجرة تنفيذ طلب البحث، يشير ذلك إلى أنّه لا يمكن استخدام الفهرس المستخدَم لتلبية متطلبات الترتيب في طلب البحث. لإنشاء فهرس أكثر ملاءمة، يُرجى الاطّلاع على القسم التالي.

إنشاء الفهارس

اتّبِع مستندات إدارة الفهرس لإنشاء فهارس. لضمان إمكانية استخدام الفهارس في طلب البحث، أنشئ فهارس عادية (غير Multikey) تتضمّن الحقول بالترتيب التالي:

  1. جميع الحقول التي سيتم استخدامها في عوامل التشغيل الخاصة بالمساواة لزيادة فرص إعادة الاستخدام إلى أقصى حدّ في طلبات البحث، رتِّب الحقول بترتيب تنازلي حسب عدد مرات ظهورها في عوامل المساواة بين طلبات البحث.
  2. جميع الحقول التي سيتم ترتيبها حسبها (بالترتيب نفسه).
  3. الحقول التي سيتم استخدامها في عوامل تشغيل النطاق أو عدم المساواة بترتيب تنازلي حسب قابلية اختيار قيود طلب البحث.
  4. الحقول التي سيتم عرضها كنتيجة لطلب بحث في الفهرس: يتيح تضمين هذه الحقول في الفهرس أن يغطي الفهرس طلب البحث ويتجنب الحاجة إلى استرداد المستند من وحدة التخزين الأساسية.

بالنسبة إلى طلبات البحث التي تتضمّن فلترة حقول المصفوفات وفرزها، ننصحك بإنشاء فهارس ذات مفاتيح متعدّدة.

استخدام تلميح طلب البحث

إذا أنشأت فهرسًا أكثر ملاءمة لطلب البحث ولكن محرّك طلب البحث لا يستخدم هذا الفهرس، يمكنك تجاهل إعدادات محرّك طلب البحث المفضّلة للفهرس باستخدام تلميح طلب البحث.

لمزيد من المعلومات عن ناتج طلب البحث الذي يتم تنفيذه باستخدام Query Explain، يُرجى الاطّلاع على مرجع تنفيذ طلب البحث.