ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

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

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

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

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

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

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

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

ارسم خريطة لبياناتك

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

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

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

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

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

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

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

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

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

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

إنشاء العديد من مثيلات Realtime Database

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

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

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

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

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

تحرير ونشر Realtime Database Rules لكل مثيل

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

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

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

    1. عدّل القواعد في ملفات القواعد foo.rules.json قاعدة البيانات (على سبيل المثال ، 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 ، فستحصل على المرجع لطبعة قاعدة البيانات الافتراضية للتطبيق.

الويب v8

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);

الويب الإصدار 9

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);
سويفت
// Get the default database instance for an app
var ref: DatabaseReference!

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

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

جافا

// 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();

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

حدد مثيلاً عند استخدام Firebase CLI

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

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

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

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

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

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