أفضل طريقة لتحسين الأداء وتوسيع نطاق بياناتك في Firebase Realtime Database هي تقسيم بياناتك عبر مثيلات Realtime Database المتعددة ، والتي تُعرف أيضًا باسم تقسيم قاعدة البيانات. تمنحك المشاركة المرونة للتوسع بما يتجاوز الحدود التي تنطبق على طبعات قاعدة البيانات الفردية ، بالإضافة إلى موازنة التحميل وتحسين الأداء.
متى تقوم بتقسيم بياناتك
قد ترغب في تجزئة بياناتك عبر قواعد بيانات متعددة إذا كنت تستخدم Realtime Database وتناسب أي من السيناريوهات التالية:
- تريد التوسع إلى ما يتجاوز حد 200000 اتصال متزامن ، أو 1000 عملية كتابة / ثانية ، أو أي من الحدود الأخرى لطبعة قاعدة بيانات واحدة.
- لديك مجموعات بيانات متعددة منفصلة وتريد تحسين الأداء (على سبيل المثال ، تطبيق دردشة يخدم مجموعات منفصلة ومستقلة من المستخدمين).
- تريد موازنة التحميل عبر قواعد بيانات متعددة لتحسين وقت التشغيل وتقليل مخاطر التحميل الزائد لطبعة قاعدة بيانات واحدة.
كيفية تقاسم البيانات الخاصة بك
لتقسيم بياناتك ، اتبع هذه الخطوات (الموضحة بمزيد من التفصيل أدناه):
- قم بتعيين بياناتك إلى قواعد بيانات متعددة وفقًا للاحتياجات المحددة لتطبيقك.
- إنشاء مثيلات قاعدة بيانات متعددة.
- قم بتكوين تطبيقك بحيث يتصل بمثيل Realtime Database الضروري لكل مجموعة بيانات.
ارسم خريطة لبياناتك
عندما تقوم بتعيين بياناتك إلى قواعد بيانات متعددة ، حاول تلبية الشروط التالية:
- يتم تشغيل كل استعلام مقابل طبعة قاعدة بيانات واحدة فقط. لا تدعم Realtime Database الاستعلامات عبر طبعات قاعدة البيانات.
- لا توجد مشاركة أو تكرار للبيانات عبر طبعات قاعدة البيانات (أو الحد الأدنى من المشاركة أو التكرار).
- كل مثيل تطبيق يتصل فقط بقاعدة بيانات واحدة في أي لحظة.
أثناء تخطيط بياناتك ، ضع في اعتبارك تطبيق الاستراتيجيات التالية:
إنشاء "جزء رئيسي"
قم بتخزين خريطة لكيفية تخزين بياناتك عبر مثيلات قاعدة البيانات. بهذه الطريقة ، يمكنك برمجيًا البحث عن مثيل قاعدة البيانات الذي يتوافق مع العميل المتصل. ضع في اعتبارك أن هذا قد يكون له عبء أكبر من الاتصال المباشر بطبعة قاعدة البيانات المعينة التي تحتاجها ، عندما تحتاجها.
دلو البيانات حسب الفئات أو حسب العميل
تخزين البيانات في طبعات قاعدة البيانات المنعزلة ، مجمعة حسب المستخدم أو نوع البيانات. على سبيل المثال ، إذا قمت بإنشاء تطبيق دردشة يخدم مؤسسات متعددة ، فيمكنك إنشاء مثيل قاعدة بيانات لكل مؤسسة وتخزين جميع بيانات الدردشة في طبعات قاعدة بيانات فريدة.
في هذه الحالة ، لا تشارك المؤسسة "أ" والمؤسسة "ب" البيانات ، ولا توجد أي بيانات مكررة في قواعد البيانات الخاصة بك ، وتقوم فقط بتنفيذ الاستعلامات على طبعة قاعدة بيانات واحدة. بالإضافة إلى ذلك ، يتصل المستخدمون في كل مؤسسة بقاعدة بيانات مؤسستهم فقط عندما يستخدمون تطبيق الدردشة.
يمكنك بعد ذلك إنشاء العديد من طبعات قاعدة البيانات مقدمًا واستخدام معرف المؤسسة لتعيين فريق إلى طبعة قاعدة البيانات الخاصة به. على سبيل المثال ، تقوم المؤسسة "أ" بتعيين قاعدة بيانات الوقت الفعلي أ.
تعتمد طريقة تعيين البيانات لتطبيقك على حالة الاستخدام الخاصة بك ، ولكن الشروط والاستراتيجيات الموضحة أعلاه يمكن أن تساعدك في تحديد ما يناسب بياناتك.
إنشاء العديد من مثيلات Realtime Database
إذا كنت تستخدم خطة تسعير Blaze ، فيمكنك إنشاء مثيلات قاعدة بيانات متعددة في نفس مشروع Firebase.
- في وحدة تحكم Firebase ، انتقل إلى علامة التبويب البيانات في قسم التطوير> قاعدة البيانات .
- حدد إنشاء قاعدة بيانات جديدة من القائمة في قسم قاعدة بيانات الوقت الفعلي .
- قم بتخصيص مرجع قاعدة البيانات وقواعد الأمان ، ثم انقر فوق حسنًا .
كرر العملية لإنشاء العديد من طبعات قاعدة البيانات التي تحتاجها. لكل مثيل قاعدة بيانات مجموعته الخاصة من قواعد أمان قاعدة بيانات Firebase Realtime ، بحيث يمكنك ضبط الوصول إلى بياناتك.
يمكنك إنشاء طبعات قاعدة البيانات وإدارتها في وحدة تحكم Firebase أو باستخدام Realtime Database Management REST API .
قم بتحرير ونشر قواعد أمان قاعدة البيانات Realtime لكل مثيل
تأكد من أن قواعد أمان Realtime Database تسمح بالوصول المناسب إلى كل مثيل قاعدة بيانات في مشروعك. تحتوي كل قاعدة بيانات على مجموعة القواعد الخاصة بها ، والتي يمكنك تعديلها ونشرها من وحدة تحكم Firebase ، أو استخدام Firebase CLI لنشر الأهداف .
لتعديل القواعد ونشرها من وحدة تحكم Firebase ، اتبع الخطوات التالية:
- انتقل إلى علامة التبويب القواعد في قسم التطوير> قاعدة البيانات .
- حدد قاعدة البيانات التي تريد تحريرها ، ثم قم بتعديل القواعد.
لتعديل القواعد ونشرها من Firebase CLI ، اتبع الخطوات التالية:
- عدّل القواعد في ملفات القواعد لطبعات قاعدة البيانات (على سبيل المثال ،
foo.rules.json
). - إنشاء وتطبيق أهداف النشر لإقران قواعد البيانات التي تستخدم نفس ملف القواعد. على سبيل المثال:
firebase target:apply database main my-db-1 my-db-2
firebase target:apply database other my-other-db-3
قم بتحديث ملف تكوين
firebase.json
باستخدام أهداف النشر:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }
قم بتشغيل أمر النشر:
firebase deploy
- عدّل القواعد في ملفات القواعد لطبعات قاعدة البيانات (على سبيل المثال ،
تأكد من تعديل القواعد ونشرها من نفس المكان باستمرار. يؤدي نشر القواعد من واجهة سطر الأوامر Firebase CLI إلى إلغاء أي تعديلات قمت بإجرائها في وحدة تحكم Firebase ، كما يؤدي تحرير القواعد مباشرةً في وحدة تحكم Firebase إلى إلغاء أي تغييرات حديثة قمت بنشرها من خلال واجهة سطر الأوامر Firebase CLI.
قم بتوصيل تطبيقك بمثيلات قاعدة بيانات متعددة
استخدم مرجع قاعدة البيانات للوصول إلى البيانات المخزنة في طبعات قاعدة البيانات الثانوية. يمكنك الحصول على المرجع لطبعة قاعدة بيانات معينة عن طريق عنوان URL أو التطبيق. إذا لم تحدد عنوان URL ، فستحصل على المرجع لطبعة قاعدة البيانات الافتراضية للتطبيق.
Web version 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);
Web version 8
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);
سويفت
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()// احصل على طبعة قاعدة بيانات ثانوية عن طريق URL var ref: 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"] مرجع] ؛
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 .