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

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

في ما يلي بعض الأمثلة الشائعة للزيارات الواردة في الفاتورة:

  • البيانات التي يتم تنزيلها: عندما يحصل العملاء على بيانات من قاعدة البيانات، يفرض Firebase رسومًا على البيانات التي يتم تنزيلها. عادةً ما يشكل هذا الجزء الأكبر من تكاليف معدل نقل البيانات الخاص بك، ولكنه ليس العامل الوحيد في فاتورتك.
  • أعباء البروتوكول العامة: من الضروري بعض الزيارات الإضافية بين الخادم والعملاء لإنشاء جلسة وصيانتها. واستنادًا إلى البروتوكول الأساسي، قد تتضمن حركة البيانات هذه: مقدار زائد من بروتوكول الوقت الفعلي لقاعدة بيانات Firebase في الوقت الفعلي، وأعباء WebSocket، ومقدار رأس HTTP. في كل مرة يتم فيها إنشاء اتصال، يساهم هذا النفقات العامة، بالإضافة إلى أي نفقة عامة لتشفير طبقة المقابس الآمنة، في تكاليف الاتصال. على الرغم من أن هذا ليس مقدارًا كبيرًا من معدل نقل البيانات لطلب واحد، إلا أنه يمكن أن يكون جزءًا كبيرًا من فاتورتك إذا كانت حمولاتك صغيرة أو أجريت اتصالات متكررة وقصيرة.
  • التكلفة العامة لتشفير طبقة المقابس الآمنة: هناك تكلفة مرتبطة بالنفقات العامة لتشفير طبقة المقابس الآمنة (SSL) اللازمة للاتصالات الآمنة. وفي المتوسط، تبلغ هذه التكلفة حوالي 3.5 كيلوبايت لعملية تأكيد الاتصال الأولية وحوالي عشرات البايت لرؤوس سجلات طبقة النقل الآمنة في كل رسالة صادرة. في معظم التطبيقات، تمثل هذه نسبة صغيرة من فاتورتك. ومع ذلك، يمكن أن يصبح هذا نسبة كبيرة إذا كانت حالتك المحددة تتطلب الكثير من تأكيدات اتصال طبقة المقابس الآمنة. على سبيل المثال، قد تتطلّب الأجهزة التي لا تتوافق مع تذاكر جلسات بروتوكول أمان طبقة النقل (TLS) عددًا كبيرًا من عمليات تأكيد الاتصال لاتصال طبقة المقابس الآمنة (SSL).
  • بيانات وحدة تحكُّم Firebase: على الرغم من أنّ هذه البيانات ليست عادةً جزءًا كبيرًا من تكاليف قاعدة بيانات الوقت الفعلي، فإنّ Firebase يحصِّل رسومًا مقابل البيانات التي تقرأها وتكتبها من وحدة تحكُّم Firebase.

تقدير الاستخدام الذي تم إصدار فواتير به

للاطّلاع على الاتصالات الحالية لقاعدة بيانات الوقت الفعلي واستخدام البيانات، راجِع علامة التبويب الاستخدام في وحدة تحكُّم Firebase. يمكنك التحقق من الاستخدام خلال فترة الفوترة الحالية أو آخر 30 يومًا أو آخر 24 ساعة.

يعرض Firebase إحصاءات الاستخدام للمقاييس التالية:

  • عمليات الربط: عدد الاتصالات المتزامنة والمفتوحة حاليًا في الوقت الفعلي بقاعدة بياناتك. ويشمل ذلك عمليات الاتصال في الوقت الفعلي التالية: WebSocket والاستطلاعات الطويلة وأحداث البث التي أرسلها خادم HTML. ولا يشمل طلبات RESTful.
  • مساحة التخزين: مقدار البيانات المُخزَّنة في قاعدة البيانات. ولا يشمل ذلك استضافة Firebase أو البيانات المخزَّنة من خلال منتجات Firebase الأخرى.
  • عمليات التنزيل: كل وحدات البايت التي يتم تنزيلها من قاعدة البيانات، بما في ذلك البروتوكول وأعباء التشفير.
  • التحميل: يعرض هذا الرسم البياني مقدار قاعدة البيانات قيد الاستخدام، ومعالجة الطلبات، على مدار فترة زمنية محددة تبلغ دقيقة واحدة. قد ترى مشكلات في الأداء عندما تقترب قاعدة البيانات لديك من 100٪.

تحسين الاستخدام

هناك عدد من أفضل الممارسات التي يمكنك اتّباعها لتحسين استخدام قاعدة البيانات وتكاليف النطاق الترددي.

  • استخدام حِزم SDK الأصلية: استخدِم حِزم SDK التي تتوافق مع النظام الأساسي لتطبيقك بدلاً من REST API، كلما أمكن ذلك. تحتفظ حِزم SDK باتصالات مفتوحة، ما يقلّل من تكاليف تشفير طبقة المقابس الآمنة التي تتم إضافتها عادةً إلى واجهة برمجة تطبيقات REST.
  • التحقق من الأخطاء: في حال ارتفاع تكاليف معدل نقل البيانات بشكل غير متوقع، يُرجى التحقّق من أنّ تطبيقك لا يُجري مزامنة أو بيانات أكثر من المطلوب. لتحديد المشاكل، استخدِم أداة الملف الشخصي لقياس عمليات القراءة وتفعيل ميزة تسجيل تصحيح الأخطاء في حِزم تطوير البرامج (SDK) لكلّ من Android وObjective-C والويب. افحص الخلفية وعمليات المزامنة في تطبيقك للتأكد من أن كل شيء يعمل على النحو المطلوب.
  • تقليل الاتصالات: حاول تحسين معدل نقل بيانات الاتصال إذا أمكن. قد تكون طلبات REST المتكررة والمتكررة أكثر تكلفة من إجراء اتصال واحد مستمر باستخدام حزمة تطوير البرامج (SDK) الأصلية. إذا كنت تستخدم واجهة برمجة التطبيقات REST API، يمكنك استخدام اتصال HTTP ببروتوكول HTTP أو الأحداث التي يرسلها الخادم، والتي يمكن أن تقلّل التكاليف الناتجة عن عمليات تأكيد الاتصال من خلال طبقة المقابس الآمنة.
  • استخدام تذاكر جلسة بروتوكول أمان طبقة النقل (TLS): يمكنك تقليل التكاليف العامة لتشفير طبقة المقابس الآمنة (SSL) على الاتصالات المستأنفة، وذلك من خلال إصدار تذاكر جلسات بروتوكول أمان طبقة النقل (TLS). يعد ذلك مفيدًا بشكل خاص إذا كنت تحتاج إلى اتصالات متكررة وآمنة بقاعدة البيانات.
  • طلبات البحث للفهرس: تقلِّل فهرسة بياناتك إجمالي معدل نقل البيانات الذي تستخدمه لطلبات البحث، ما يؤدي إلى خفض تكاليفك وزيادة أداء قاعدة البيانات بشكل مزدوج. استخدِم أداة المحلِّل للعثور على طلبات البحث غير المفهرَسة في قاعدة البيانات.
  • تحسين المستمعين: يمكنك إضافة طلبات بحث للحدّ من البيانات التي تعرضها عمليات الاستماع، واستخدِم أدوات الاستماع التي لا تنزّل سوى تعديلات البيانات، مثلاً on() بدلاً من once(). بالإضافة إلى ذلك، ضع المستمعين في أبعد مسافة ممكنة من المسار للحد من كمية البيانات التي يقومون بمزامنتها.
  • تقليل تكاليف التخزين: يمكنك تنفيذ مهام التنظيف الدورية وتقليل أي بيانات مكررة في قاعدة البيانات.
  • استخدام القواعد: يمكنك منع أي عمليات قد تكون مكلفة وغير مصرّح بها على قاعدة البيانات. على سبيل المثال، يمكن أن يؤدي استخدام "قواعد أمان قاعدة بيانات Firebase في الوقت الفعلي" إلى تجنُّب سيناريو يقوم فيه مستخدم ضار بتنزيل قاعدة بياناتك بالكامل بشكل متكرر. تعرَّف على مزيد من المعلومات حول استخدام قواعد قاعدة بيانات Firebase في الوقت الفعلي.

تعتمد أفضل خطة تحسين لتطبيقك على حالة الاستخدام لديك. على الرغم من أنّ هذه القائمة ليست شاملة لأفضل الممارسات، يمكنك العثور على المزيد من النصائح والنصائح من خبراء Firebase على قناة Slack أو على Stack Overflow.