تحسين أداء قاعدة البيانات

هناك بعض الطرق المختلفة لتحسين أداء "قاعدة بيانات Firebase في الوقت الفعلي" في تطبيقك. ولمعرفة ما يمكنك فعله لتحسين أداء قاعدة بيانات الوقت الفعلي، اجمع البيانات من خلال أدوات مراقبة قاعدة بيانات الوقت الفعلي المختلفة، ثم أجرِ التغييرات على تطبيقك أو استخدام قاعدة بيانات الوقت الفعلي وفقًا لذلك.

مراقبة أداء قاعدة بيانات الوقت الفعلي

يمكنك جمع بيانات عن أداء قاعدة بيانات الوقت الفعلي من خلال بعض الأدوات المختلفة، حسب مستوى الدقة الذي تريده:

  • نظرة عامة عالية المستوى: استخدِم أداة المحلِّل للحصول على قائمة بطلبات البحث غير المفهرسة ونظرة عامة في الوقت الفعلي على عمليات القراءة/الكتابة.
  • تقديرات الاستخدام الواردة في الفاتورة: يمكنك استخدام مقاييس الاستخدام المتوفّرة في وحدة تحكُّم Firebase للاطّلاع على الاستخدام الذي تم إصدار فواتير به ومقاييس الأداء العالي المستوى.
  • التوغّل التفصيلي: يمكنك استخدام ميزة المراقبة في السحابة الإلكترونية لإلقاء نظرة أكثر دقة على أداء قاعدة البيانات بمرور الوقت.

تحسين الأداء حسب المقياس

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

نظرة سريعة على استراتيجيات تحسين الأداء
المقياس الوصف أفضل الممارسات
التحميل/الاستخدام عليك تحسين مقدار سعة قاعدة البيانات قيد الاستخدام لمعالجة طلبات في أي وقت محدد (تنعكس في مقاييس **التحميل** أو **io/database_load**). تحسين بنية بياناتك
تحويل البيانات إلى أجزاء صغيرة في قواعد البيانات
تحسين كفاءة المستمعين
الحدّ من عمليات التنزيل باستخدام القواعد المستندة إلى طلبات البحث
تحسين عمليات الربط
الاتصالات النشطة يجب تحقيق التوازن بين عدد الاتصالات المتزامنة والنشطة بقاعدة بياناتك لتكون ضمن الحدّ الأقصى للاتصال الذي يبلغ 200,000 اتصال. تقسيم البيانات في جميع قواعد البيانات
تقليل الاتصالات الجديدة
معدل نقل البيانات الصادر إذا كانت عمليات التنزيل من قاعدة البيانات تبدو أعلى مما تريد، يمكنك تحسين كفاءة عمليات القراءة وخفض أعباء التشفير. تحسين عمليات الربط
تحسين بنية البيانات
الحدّ من عمليات التنزيل باستخدام القواعد المستنِدة إلى طلبات البحث
إعادة استخدام جلسات طبقة المقابس الآمنة (SSL)
تحسين كفاءة المستمعين
حظر الوصول إلى البيانات
سعة التخزين عليك التأكّد من عدم تخزين البيانات غير المستخدَمة أو تحقيق توازن بين بياناتك المخزَّنة وقواعد البيانات الأخرى و/أو منتجات Firebase لتظل ضمن الحصة. إزالة البيانات غير المستخدَمة
تحسين بنية البيانات
تخزين البيانات في جميع قواعد البيانات
استخدام Cloud Storage for Firebase

تحسين عمليات الربط

لا تزال الطلبات المريحة مثل GET وPUT تتطلب اتصالاً، على الرغم من أن هذا الاتصال قصير الأجل. يمكن أن تؤدي هذه الاتصالات المتكررة قصيرة الأجل في الواقع إلى زيادة تكاليف الاتصال وتحميل قاعدة البيانات والنطاق الترددي الصادر أكثر بكثير من الاتصالات النشطة في الوقت الفعلي بقاعدة البيانات.

استخدِم حِزم تطوير البرامج (SDK) الأصلية للنظام الأساسي لتطبيقك، بدلاً من REST API، كلما أمكن ذلك. تحتفظ حِزم SDK باتصالات مفتوحة، ما يقلل من تكاليف تشفير طبقة المقابس الآمنة (SSL) وحِمل قاعدة البيانات التي يمكن إضافتها باستخدام واجهة برمجة تطبيقات REST.

إذا كنت تستخدم واجهة برمجة التطبيقات REST، يمكنك استخدام عملية مصادقة HTTP للحفاظ على اتصال مفتوح أو استخدام الأحداث التي يرسلها الخادم، ما يمكن أن يؤدي إلى تقليل التكاليف الناتجة عن عمليات تأكيد الاتصال من خلال طبقة المقابس الآمنة.

تقسيم البيانات عبر قواعد بيانات متعددة

يوفّر تقسيم بياناتك على مثيلات متعددة من قاعدة بيانات الوقت الفعلي، والمعروفة باسم تقسيم قاعدة البيانات إلى أجزاء، ثلاث مزايا:

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

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

تعرّف على مزيد من المعلومات عن كيفية تقسيم البيانات ووقت تقسيمها.

بناء هياكل بيانات فعالة

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

على وجه الخصوص، يجب مراعاة عمليات الكتابة والحذف عند تنظيم بياناتك. على سبيل المثال، قد يكون حذف المسارات التي تحتوي على آلاف أوراق الشجر مكلفًا. يمكن أن يؤدي تقسيمها إلى مسارات ذات أشجار فرعية متعددة وأوراق أقل في كل عقدة إلى تسريع عملية الحذف.

بالإضافة إلى ذلك، يمكن أن تشغل كل كتابة 0.1٪ من إجمالي استخدام قاعدة البيانات الخاصة بك. نظِّم بياناتك بطريقة تسمح لك بتجميع عمليات الكتابة في عملية واحدة باعتبارها تحديثات متعددة المسارات إما من خلال طرق update() في حِزم SDK أو طلبات PATCH RESTful.

لتحسين بنية البيانات والأداء، اتّبِع أفضل الممارسات الخاصة بهياكل البيانات.

منع الوصول غير المصرّح به

يمكنك منع العمليات غير المصرح بها على قاعدة البيانات باستخدام قواعد أمان قاعدة البيانات في الوقت الفعلي. على سبيل المثال، يمكن أن يؤدي استخدام القواعد إلى تجنب سيناريو يقوم فيه مستخدم ضار بتنزيل قاعدة بياناتك بالكامل بشكل متكرر.

تعرَّف على مزيد من المعلومات حول استخدام قواعد قاعدة بيانات Firebase في الوقت الفعلي.

استخدام القواعد المستنِدة إلى طلبات البحث للحدّ من عمليات التنزيل

تقيّد قواعد أمان قاعدة البيانات في الوقت الفعلي الوصول إلى البيانات في قاعدة البيانات، ولكن يمكنها أيضًا أن تكون بمثابة حدود على البيانات التي يتم عرضها من خلال عمليات القراءة. عند استخدام القواعد المستندة إلى طلبات البحث، كما هو محدّد في تعبيرات query. مثل query.limitToFirst، تسترد طلبات البحث البيانات المرتبطة بالقاعدة فقط.

على سبيل المثال، تفرض القاعدة التالية قيودًا على إمكانية الوصول للقراءة إلى أوّل 1000 نتيجة فقط من طلب البحث، حسب الترتيب حسب الأولوية:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

تعرَّف على مزيد من المعلومات عن قواعد أمان قاعدة البيانات في الوقت الفعلي.

طلبات البحث للفهرس

وتقلل فهرسة بياناتك من إجمالي معدل نقل البيانات الذي تستخدمه لكل طلب بحث يشغّله تطبيقك.

إعادة استخدام جلسات طبقة المقابس الآمنة

يمكنك تقليل التكاليف العامة لتشفير طبقة المقابس الآمنة (SSL) على الاتصالات المستأنفة من خلال إصدار تذاكر جلسات بروتوكول أمان طبقة النقل (TLS). هذا مفيد بشكل خاص إذا كنت تحتاج إلى اتصالات متكررة وآمنة بقاعدة البيانات.

تحسين كفاءة المستمع

ضَع المستمعين في أبعد مسافة ممكنة من المسار للحد من كمية البيانات التي يزامنونها. يجب أن يكون المستمعون على مقربة من البيانات التي تريدهم أن يحصلوا عليها. لا تستمع إلى جذر قاعدة البيانات، حيث يؤدي ذلك إلى تنزيل قاعدة البيانات بأكملها.

يمكنك إضافة طلبات بحث للحدّ من البيانات التي تعرضها عمليات الاستماع، واستخدِم المستمعين الذين ينزّلون تعديلات البيانات فقط، مثل on() بدلاً من once(). يمكنك حجز مبلغ .once() مقابل الإجراءات التي لا تتطلب تعديل البيانات. بالإضافة إلى ذلك، يمكنك ترتيب طلبات البحث باستخدام orderByKey()، كلما أمكن، لتحقيق أفضل أداء. يمكن أن يكون الفرز باستخدام orderByChild() أبطأ من 6 إلى 8 مرات، ويمكن أن يكون الفرز باستخدام orderByValue() بطيئًا جدًا لمجموعات البيانات الكبيرة، لأنه يتطلب قراءة الموقع بالكامل من طبقة الثبات.

احرص أيضًا على إضافة مستمعين ديناميكيين وإزالتهم عند عدم الحاجة إليهم.

حذف البيانات غير المستخدمة

إزالة أي بيانات غير مستخدمة أو مكررة بشكل دوري في قاعدة البيانات الخاصة بك. يمكنك استخدام نُسخ احتياطية لفحص بياناتك يدويًا أو الاحتفاظ بنسخة احتياطية منها بشكل دوري في حزمة على Google Cloud Storage. ويمكنك أيضًا استضافة البيانات المخزَّنة من خلال Cloud Storage for Firebase.

رمز قابل للتوسّع يمكنك تعديله

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