يمكنك استخدام كل من Firebase Realtime Database وCloud Firestore في تطبيقك، و الاستفادة من مزايا كل حلّ من حلول قواعد البيانات بما يناسب احتياجاتك. على سبيل المثال، قد تريد الاستفادة من ميزة "حالة التواجد" في Realtime Database، كما هو موضّح فيإنشاء ميزة "حالة التواجد" في Cloud Firestore.
مزيد من المعلومات عن الـ اختلافات بين قواعد البيانات.
نقل البيانات إلى Cloud Firestore
إذا قرّرت نقل بعض بياناتك من Realtime Database إلى Cloud Firestore، ننصحك باتّباع سير العمل التالي. بما أنّ كل قاعدة بيانات لها احتياجات فريدة واعتبارات هيكلية مختلفة، لا يتوفّر مسار تلقائي لنقل البيانات. بدلاً من ذلك، يمكنك اتّباع هذا التدرّج العام:
ربط بنية البيانات وقواعد الأمان من Realtime Database بـ Cloud Firestore. تعتمد كل من Realtime Database وCloud Firestore على مصادقة Firebase، لذا لن تحتاج إلى تغيير مصادقة المستخدم لتطبيقك. ومع ذلك، تختلف قواعد الأمان ونموذج البيانات، ومن المهم مراعاة هذه الاختلافات بعناية قبل البدء في نقل البيانات إلى Cloud Firestore.
نقل البيانات السابقة : أثناء إعداد بنية البيانات الجديدة في Cloud Firestore، يمكنك ربط البيانات الحالية ونقلها من Realtime Database إلى مثيل Cloud Firestore الجديد. ومع ذلك، إذا كنت تستخدم كلتا قاعدتَي البيانات في تطبيقك، لن تحتاج إلى نقل البيانات السابقة من Realtime Database.
عرض البيانات الجديدة في Firestore في الوقت الفعلي استخدِم Cloud Functions لكتابة البيانات الجديدة في قاعدة بياناتك الجديدة Cloud Firestore عند إضافتها إلى Realtime Database.
استخدام Cloud Firestore كقاعدة البيانات الأساسية للبيانات التي تم نقلها. بعد نقل بعض بياناتك، استخدِم Cloud Firestore كقاعدة البيانات الأساسية وقلِّل استخدام Realtime Database للبيانات التي تم نقلها. ضَع في اعتبارك إصدارات تطبيقك التي لا تزال مرتبطة بـ Realtime Database لتلك البيانات وكيفية مواصلة دعمها.
تأكَّد من مراعاة تكاليف الفوترة لكل من Realtime Database وCloud Firestore.
ربط بياناتك
يتم تنظيم البيانات في Realtime Database على شكل شجرة واحدة، بينما تتيح Cloud Firestore تسلسلات هرمية أكثر وضوحًا للبيانات من خلال المستندات والمجموعات و المجموعات الفرعية. إذا نقلت بعض بياناتك من Realtime Database إلى Cloud Firestore، قد تريد استخدام بنية مختلفة لبياناتك.
الاختلافات الرئيسية التي يجب مراعاتها
إذا نقلت بيانات من شجرة Realtime Database الحالية إلى Cloud Firestore مستندات ومجموعات، ضَع في اعتبارك الاختلافات الرئيسية التالية بين قاعدتَي البيانات التي قد تؤثر في كيفية تنظيم البيانات في Cloud Firestore:
- توفّر طلبات البحث السطحية مزيدًا من المرونة في بنى البيانات الهرمية.
- توفّر طلبات البحث المعقّدة مزيدًا من الدقة وتقلِّل الحاجة إلى تكرار البيانات.
- توفّر مؤشرات طلبات البحث ترقيمًا أكثر فعالية.
- لم تعُد المعاملات تتطلّب جذرًا مشتركًا لجميع بياناتك، وأصبحت أكثر كفاءة.
- تختلف تكاليف الفوترة بين Realtime Database وCloud Firestore. في كثير من الحالات، قد يكون Cloud Firestoreأكثر تكلفة من Realtime Database، خاصةً إذا كنت تعتمد على العديد من العمليات الصغيرة. ننصحك بتقليل عدد العمليات في قاعدة بياناتك وتجنُّب عمليات الكتابة غير الضرورية. مزيد من المعلومات عن الاختلافات في الفوترة بين Realtime Database و Cloud Firestore.
أفضل الممارسات قيد التنفيذ
يعكس المثال التالي بعض الاعتبارات التي قد تتخذها أثناء نقل بياناتك بين قاعدتَي البيانات. يمكنك الاستفادة من عمليات القراءة السطحية وإمكانات طلبات البحث المحسّنة لبنى بيانات أكثر طبيعية مما قد تكون استخدمته مع Realtime Database.
لنفترض أنّ لديك تطبيقًا إرشاديًا للمدينة يساعد المستخدمين في العثور على المعالم البارزة في المدن حول العالم. بما أنّ Realtime Database لا يتيح عمليات القراءة السطحية، قد يكون عليك تنظيم البيانات في عقدتَين على المستوى الأعلى، على النحو التالي:
// /cities/$CITY_KEY
{
name: "New York",
population: 8000000,
capital: False
}
// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
name: "Empire State Building",
category: "Architecture"
}
Cloud Firestore تتيح عمليات القراءة السطحية، لذا فإنّ طلب البحث عن مستندات في مجموعة لا يؤدي إلى جلب البيانات من المجموعات الفرعية. وبالتالي، يمكنك تخزين معلومات المعالم في مجموعة فرعية:
// /cities/$CITY_ID
{
name: "New York",
population: 8000000,
capital: False,
landmarks: [... subcollection ...]
}
الحد الأقصى لحجم المستند هو 1 ميغابايت، وهذا سبب آخر لتخزين المعالم كمجموعة فرعية، ما يحافظ على صغر حجم كل مستند مدينة، بدلاً من تضخيم المستندات بقوائم متداخلة.
تقلِّل إمكانات طلبات البحث المتقدّمة في Cloud Firestore الحاجة إلى
تكرار البيانات لأنماط الوصول الشائعة. على سبيل المثال، لنفترض أنّ هناك شاشة في التطبيق الإرشادي للمدينة تعرض جميع العواصم مرتّبة حسب عدد السكان.
في Realtime Database، الطريقة الأكثر فعالية لإجراء ذلك هي الاحتفاظ بقائمة منفصلة
من العواصم التي تكرِّر البيانات من قائمة cities، على النحو التالي:
{
cities: {
// ...
},
capital-cities: {
// ...
}
}
في Cloud Firestore، يمكنك التعبير عن قائمة بالعواصم مرتّبة حسب عدد السكان كطلب بحث واحد:
db.collection('cities')
.where('capital', '==', true)
.orderBy('population')
مزيد من المعلومات عن Cloud Firestore نموذج بيانات والاطّلاع على حلولنا للحصول على مزيد من الأفكار حول كيفية تنظيم قاعدة بياناتCloud Firestore
تأمين بياناتك
سواء كنت تستخدم Cloud Firestore Security Rules لـ عملاء Android أو Apple أو الويب، أو إدارة الهوية والوصول (IAM) للخوادم، تأكَّد من تأمين بياناتك في Cloud Firestore و في Realtime Database. تتولّى خدمة المصادقة عملية مصادقة المستخدم لكلتا قاعدتَي البيانات، لذا لن تحتاج إلى تغيير عملية تنفيذ خدمة المصادقة عند البدء في استخدام Cloud Firestore.
الاختلافات الرئيسية التي يجب مراعاتها
- تستخدم حِزم SDK للأجهزة الجوّالة والويب Cloud Firestore Security Rules، بينما تستخدم حِزم SDK للخوادم إدارة الهوية والوصول (IAM) لتأمين البيانات.
- Cloud Firestore Security Rules لا تتسلسل إلا إذا كنت تستخدم حرف بدل. لا تكتسب المستندات والمجموعات القواعد بخلاف ذلك.
- لم تعُد بحاجة إلى التحقق من صحة البيانات بشكل منفصل (كما كنت تفعل في Realtime Database).
- Cloud Firestore تتحقّق من القواعد قبل تنفيذ طلب بحث للتأكّد من أنّ المستخدم لديه إذن الوصول المناسب لجميع البيانات التي يعرضها طلب البحث.
نقل البيانات السابقة إلى Cloud Firestore
بعد ربط بنى البيانات والأمان بنماذج البيانات والأمان في Cloud Firestore's ، يمكنك البدء في إضافة بياناتك. إذا كنت تخطط لطلب البحث عن البيانات السابقة بعد نقل تطبيقك من Realtime Database إلى Cloud Firestore، أضِف تصديرًا لبياناتك القديمة إلى قاعدة بياناتك الجديدة Cloud Firestore. إذا كنت تخطط لاستخدام كل من Realtime Database و Cloud Firestore في تطبيقك، يمكنك تخطّي هذه الخطوة.
لتجنُّب استبدال البيانات الجديدة بالبيانات القديمة، قد تريد إضافة بياناتك السابقة أولاً. إذا أضفت بيانات جديدة إلى كلتا قاعدتَي البيانات في الوقت نفسه، كما هو موضّح في الخطوة التالية، تأكَّد من منح الأولوية للبيانات الجديدة التي أضافتها Cloud Firestore بواسطة Cloud Functions.
لنقل البيانات السابقة إلى Cloud Firestore، اتّبِع الخطوات التالية:
- صدِّر بياناتك من Realtime Database أو
استخدِم نسخة احتياطية حديثة.
- انتقِل إلى قسم Realtime Database في Firebase Console.
- من علامة التبويب البيانات ، اختَر العقدة على مستوى الجذر في قاعدة بياناتك وانقر على تصدير JSON من القائمة.
أنشِئ قاعدة بياناتك الجديدة في Cloud Firestore و أضِف بياناتك.
ضَع في اعتبارك الاستراتيجيات التالية أثناء نقل بعض بياناتك إلى Cloud Firestore:
- اكتب نصًا برمجيًا مخصّصًا ينقل بياناتك. لا يمكننا تقديم نموذج لهذا النص البرمجي لأنّ كل قاعدة بيانات لها احتياجات فريدة، Cloud Firestore يمكن لخبراء على قناة Slack أو على Stack Overflow مراجعة النص البرمجي أو تقديم نصائح لحالتك المحدّدة.
- استخدِم حِزم SDK للخوادم (Node.js أو Java أو Python أو Go) لكتابة البيانات مباشرةً في Cloud Firestore. للحصول على تعليمات حول إعداد حِزم SDK للخوادم، يُرجى الاطّلاع على مقالة البدء.
- لتسريع عمليات نقل البيانات الكبيرة، استخدِم عمليات الكتابة المجمّعة وأرسِل ما يصل إلى 500 عملية في طلب شبكة واحد.
- للبقاء ضمن حدود معدّل Cloud Firestore، قصر العمليات على 500 عملية كتابة/ثانية لكل مجموعة.
إضافة بيانات جديدة إلى Cloud Firestore
للحفاظ على التكافؤ بين قاعدتَي البيانات، أضِف بيانات جديدة إلى كلتا قاعدتَي البيانات في الوقت الفعلي. استخدِم Cloud Functions لتفعيل عملية كتابة في Cloud Firestore عندما يكتب أحد العملاء في Realtime Database. تأكَّد من أنّ Cloud Firestore يمنح الأولوية للبيانات الجديدة الواردة من Cloud Functions على أي عمليات كتابة تجريها من عملية نقل البيانات السابقة.
أنشِئ دالة لكتابة البيانات الجديدة أو المتغيّرة في Cloud Firestore في كل مرة يكتب فيها أحد العملاء بيانات في Realtime Database. مزيد من المعلومات عن Realtime Database مشغّلات لـ Cloud Functions.
استخدام Cloud Firestore كقاعدة البيانات الأساسية للبيانات التي تم نقلها
إذا قرّرت استخدام Cloud Firestore كقاعدة البيانات الأساسية لبعض بياناتك، تأكَّد من مراعاة أي دوال لعرض البيانات بشكل متطابق أعددتها والتحقق من صحة Cloud Firestore Security Rules.
إذا كنت تستخدم Cloud Functions للحفاظ على التكافؤ بين قاعدتَي البيانات، تأكَّد من عدم تكرار عمليات الكتابة في كلتا قاعدتَي البيانات في حلقة تكرار. بدِّل دالتك للكتابة في قاعدة بيانات واحدة، أو أزِل الـ دالة تمامًا وابدأ في إيقاف وظيفة الكتابة تدريجيًا للـ بيانات التي تم نقلها في التطبيقات التي لا تزال مرتبطة بـ Realtime Database. تعتمد كيفية التعامل مع ذلك في تطبيقك على احتياجاتك المحدّدة واحتياجات المستخدمين.
تأكَّد من تأمين بياناتك بشكل صحيح. تحقَّق من صحة Cloud Firestore Security Rules أو إعداد إدارة الهوية والوصول (IAM).