التوسُّع باستخدام قواعد البيانات المتعددة

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

متى يتم تجزئة بياناتك

قد ترغب في تجزئة بياناتك عبر قواعد بيانات متعددة إذا كنت تستخدم قاعدة بيانات الوقت الفعلي وتتناسب مع أي من السيناريوهات التالية:

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

كيفية تجزئة بياناتك

لتقسيم بياناتك، اتبع الخطوات التالية (الموضحة بمزيد من التفصيل أدناه):

  1. يمكنك ربط بياناتك بقواعد بيانات متعددة وفقًا لاحتياجات تطبيقك الخاصة.
  2. إنشاء مثيلات قاعدة بيانات متعددة.
  3. اضبط تطبيقك لكي يتصل بمثيل قاعدة البيانات في الوقت الفعلي اللازم. لكل مجموعة بيانات.

تعيين البيانات

عند تعيين بياناتك لقواعد بيانات متعددة، حاول تلبية الشروط التالية:

  • يعمل كل استعلام على مثيل قاعدة بيانات واحد فقط. لا تتوافق "قاعدة بيانات الوقت الفعلي" مع طلبات البحث في جميع مثيلات قاعدة البيانات.
  • عدم مشاركة البيانات أو تكرارها عبر مثيلات قاعدة البيانات (أو الحد الأدنى من المشاركة أو التكرار).
  • يتصل كل نسخة افتراضية من التطبيق بقاعدة بيانات واحدة فقط في أي وقت محدد.

أثناء تخطيط بياناتك، ننصحك بتطبيق الاستراتيجيات التالية:

إنشاء "جزء رئيسي"

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

تجميع البيانات حسب الفئات أو حسب العميل

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

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

يمكنك بعد ذلك إنشاء مثيلات قاعدة بيانات متعددة مقدمًا واستخدام معرف المؤسسة لتعيين فريق لمثيل قاعدة البيانات الخاص بها. على سبيل المثال: تربط المؤسسة A بقاعدة البيانات في الوقت الفعلي A.

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

إنشاء مثيلات قاعدة بيانات في الوقت الفعلي متعددة

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

إنشاء قاعدة بيانات في وحدة تحكم Firebase باستخدام قائمة السياقات في قسم قواعد البيانات

  1. في "وحدة تحكُّم Firebase"، انتقِل إلى علامة التبويب البيانات في التطوير > قاعدة البيانات .
  2. اختَر إنشاء قاعدة بيانات جديدة من القائمة في القسم قاعدة بيانات الوقت الفعلي.
  3. خصِّص مرجع قاعدة البيانات قواعد الأمان، ثم انقر على حسنًا .

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

يمكنك إنشاء مثيلات قاعدة البيانات وإدارتها في وحدة تحكُّم Firebase أو باستخدام Realtime Database Management REST API.

تعديل "قواعد أمان قاعدة البيانات في الوقت الفعلي" ونشرها لكل مثيل

تأكد من أن قواعد أمان قاعدة البيانات في الوقت الفعلي تسمح بالوصول المناسب إلى كل لمثيل قاعدة البيانات في مشروعك. لكل قاعدة بيانات مجموعة من القواعد الخاصة بها، التي يمكنك تعديلها ونشرها من وحدة تحكُّم Firebase، أو باستخدام واجهة سطر الأوامر في Firebase لنشر الأهداف:

  • لتعديل القواعد ونشرها من "وحدة تحكُّم Firebase"، اتّبِع الخطوات التالية:

    1. الانتقال إلى قسم علامة التبويب القواعد في التطوير > قاعدة البيانات.
    2. اختَر قاعدة البيانات التي تريد تعديلها، ثم عدِّل القواعد.
  • لتعديل القواعد ونشرها من واجهة سطر الأوامر في Firebase، اتّبِع الخطوات التالية:

    1. تعديل القواعد في ملفات القواعد لمثيلات قاعدة البيانات (على سبيل المثال، foo.rules.json).
    2. يمكنك إنشاء أهداف النشر وتطبيقها لربط قواعد البيانات التي تستخدم ملف القواعد نفسه. مثل:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. عدِّل ملف إعداد firebase.json باستخدام أهداف النشر:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. شغّل أمر التفعيل:

      firebase deploy

احرص على تعديل القواعد ونشرها بشكل منتظم من المكان نفسه. النشر من Firebase CLI تلغي أي تعديلات أجريتها في وحدة تحكُّم Firebase وتعديل القواعد مباشرةً في "وحدة تحكُّم Firebase" لإلغاء أي تغييرات حديثة أجريتها من خلال واجهة سطر الأوامر في Firebase.

ربط تطبيقك بنُسخ قاعدة بيانات متعدّدة

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

Web

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

const app1 = initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Web

const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Swift
ملاحظة: لا يتوفّر منتج Firebase هذا في هدف App Clip.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// الحصول على مثيل قاعدة بيانات ثانوية بواسطة عنوان URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
ملاحظة: لا يتوفّر منتج Firebase هذا في هدف App Clip.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// الحصول على مثيل قاعدة بيانات ثانوية بواسطة عنوان URL @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabaseDatabaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

Kotlin+KTX

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Java

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

تحديد مثيل عند استخدام واجهة سطر الأوامر في Firebase

استخدِم الخيار --instance لتحديد قاعدة بيانات Firebase في الوقت الفعلي التي تريد استخدامها تطبيق أمر واجهة سطر الأوامر في Firebase عليه. على سبيل المثال، استخدم الأمر التالي لتشغيل المحلل لمثيل قاعدة بيانات باسم my-example-shard.firebaseio.com:

firebase database:profile --instance "my-example-shard"

تحسين الاتصالات في كل قاعدة بيانات

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

الحصول على مزيد من النصائح

إذا كنت بحاجة إلى مزيد من المساعدة في تقسيم بياناتك عبر مثيلات قاعدة بيانات متعددة، على خبراء Firebase على قناة Slack أو Stack Overflow.