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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • لتعديل القواعد ونشرها من وحدة تحكم 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 ، فستحصل على المرجع لطبعة قاعدة البيانات الافتراضية للتطبيق.

الويب 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 فار المرجع: 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 (قوية، nonatomic) FIRDatabaseReference * المرجع. 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 الخيار لتحديد أي قاعدة بيانات Firebase الحقيقي تريد تطبيق أمر Firebase CLI ل. على سبيل المثال، استخدم الأمر التالي لتشغيل ملفات التعريف لمثيل قاعدة بيانات باسم my-example-shard.firebaseio.com :

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

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

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

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

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