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

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

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

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

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

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

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

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

تحسين عمليات التواصل

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

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

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

تقسيم البيانات إلى أجزاء عبر قواعد بيانات متعددة

تقسيم البيانات عبر مثيلات قاعدة بيانات الوقت الفعلي المتعددة، والمعروفة باسم يوفر تقسيم قاعدة البيانات ثلاث فوائد:

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

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

يمكنك الاطّلاع على المزيد من المعلومات حول كيفية تقسيم البيانات والحالات التي تتطلّب ذلك.

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

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

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

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

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

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

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

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

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

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

على سبيل المثال، تفرض القاعدة التالية قيودًا على إمكانية الوصول للقراءة فقط لأول 1, 000 مستخدم. نتائج استعلام، حسب الترتيب حسب الأولوية:

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) على رمز قابل للتطوير يمكنك سهولة التحديث. تأكَّد من اختبار حالات الاستخدام بدقة وأخذ السيناريوهات في الاعتبار. حيث يمكنك زيادة قاعدة المستخدمين بشكل كبير، وتعزيز القدرة على لنشر التحديثات على الرمز. التفكير بعناية في التغييرات الرئيسية التي قد تحتاجها الخطوات التفصيلية، إذا قررت، على سبيل المثال، تقسيم بياناتك.