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

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

متى تقوم بتقسيم بياناتك

قد ترغب في تقسيم بياناتك عبر قواعد بيانات متعددة إذا كنت تستخدم Realtime Database وتناسب أيًا من السيناريوهات التالية:

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

كيفية تقسيم البيانات الخاصة بك

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

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

خريطة البيانات الخاصة بك

عندما تقوم بتعيين بياناتك إلى قواعد بيانات متعددة، حاول استيفاء الشروط التالية:

  • يتم تشغيل كل استعلام فقط مقابل مثيل قاعدة بيانات واحدة. لا تدعم قاعدة بيانات Realtime الاستعلامات عبر مثيلات قاعدة البيانات.
  • لا توجد مشاركة أو تكرار للبيانات عبر مثيلات قاعدة البيانات (أو الحد الأدنى من المشاركة أو الازدواجية).
  • يتصل كل مثيل تطبيق بقاعدة بيانات واحدة فقط في أي لحظة.

أثناء قيامك بتعيين بياناتك، فكر في تطبيق الاستراتيجيات التالية:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. انتقل إلى علامة التبويب "القواعد" في قسم "تطوير" > "قاعدة البيانات" .
    2. حدد قاعدة البيانات التي تريد تحريرها، ثم قم بتعديل القواعد.
  • لتحرير القواعد ونشرها من Firebase CLI، اتبع الخطوات التالية:

    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 CLI.

قم بتوصيل تطبيقك بمثيلات قاعدة بيانات متعددة

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

Web modular API

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 namespaced API

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);
سويفت
ملاحظة: منتج Firebase هذا غير متوفر في هدف App Clip.
// Get the default database instance for an app
var ref: DatabaseReference!

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

self.ref = [[FIRDatabase database] reference];
// احصل على مثيل قاعدة بيانات ثانوية عن طريق عنوان URL @property (قوي، غير ذري) FIRDatabaseReference *ref; self.ref = [[FIRDatabasedatabaseWithURL:@"https://testapp-1234.firebaseio.com"] مرجع];

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 CLI

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

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

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

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

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

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