استخدم Cloud Firestore مع قاعدة بيانات Firebase Realtime

يمكنك استخدام كل من Firebase Realtime Database وCloud Firestore في تطبيقك، والاستفادة من فوائد كل حل من حلول قاعدة البيانات لتناسب احتياجاتك. على سبيل المثال، قد ترغب في الاستفادة من دعم Realtime Database للتواجد، كما هو موضح في Build Presence in Cloud Firestore .

تعرف على المزيد حول الاختلافات بين قواعد البيانات .

نقل البيانات إلى Cloud Firestore

إذا قررت أنك تريد ترحيل بعض بياناتك من Realtime Database إلى Cloud Firestore، ففكر في التدفق التالي. نظرًا لأن كل قاعدة بيانات لها احتياجات واعتبارات هيكلية فريدة، فلا يوجد مسار ترحيل تلقائي. بدلاً من ذلك، يمكنك اتباع هذا التقدم العام:

  1. قم بتعيين بنية البيانات وقواعد الأمان من Realtime Database إلى Cloud Firestore. تعتمد كل من Realtime Database وCloud Firestore على مصادقة Firebase، لذلك لا تحتاج إلى تغيير مصادقة المستخدم لتطبيقك. ومع ذلك، تختلف قواعد الأمان ونموذج البيانات ومن المهم مراعاة هذه الاختلافات بعناية قبل البدء في نقل البيانات إلى Cloud Firestore.

  2. نقل البيانات التاريخية. أثناء قيامك بإعداد بنية البيانات الجديدة في Cloud Firestore، يمكنك تعيين البيانات الحالية ونقلها من Realtime Database إلى مثيل Cloud Firestore الجديد. ومع ذلك، إذا كنت تستخدم قاعدتي البيانات في تطبيقك، فلن تحتاج إلى نقل البيانات التاريخية من قاعدة بيانات الوقت الفعلي.

  3. قم بنسخ البيانات الجديدة إلى Firestore في الوقت الفعلي. استخدم Cloud Functions لكتابة بيانات جديدة إلى قاعدة بيانات Cloud Firestore الجديدة الخاصة بك عند إضافتها إلى قاعدة بيانات Realtime.

  4. اجعل Cloud Firestore قاعدة بياناتك الأساسية للبيانات التي تم ترحيلها. بمجرد ترحيل بعض بياناتك، استخدم Cloud Firestore كقاعدة البيانات الأساسية لديك وقلل من استخدام قاعدة بيانات Realtime للبيانات التي تم ترحيلها. فكر في إصدارات تطبيقك التي لا تزال مرتبطة بقاعدة بيانات الوقت الحقيقي لتلك البيانات وكيف تخطط لمواصلة دعمها.

تأكد من حساب تكاليف الفوترة لكل من Realtime Database و Cloud Firestore .

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

يتم تنظيم البيانات في Realtime Database كشجرة واحدة، بينما يدعم Cloud Firestore تسلسلات هرمية أكثر وضوحًا للبيانات من خلال المستندات والمجموعات والمجموعات الفرعية. إذا قمت بنقل بعض بياناتك من Realtime Database إلى Cloud Firestore، فقد ترغب في التفكير في بنية مختلفة لبياناتك.

الاختلافات الرئيسية للنظر فيها

إذا قمت بنقل البيانات من شجرة قاعدة بيانات Realtime الموجودة لديك إلى مستندات ومجموعات Cloud Firestore، فضع في اعتبارك الاختلافات الرئيسية التالية بين قواعد البيانات التي قد تؤثر على كيفية تنظيم البيانات في Cloud Firestore:

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

أفضل الممارسات في العمل

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

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

// /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 لعملاء Android أو Apple أو الويب، أو إدارة الوصول إلى الهوية (IAM) للخوادم، تأكد من تأمين بياناتك في Cloud Firestore بالإضافة إلى قاعدة بيانات Realtime. تتم معالجة مصادقة المستخدم عن طريق المصادقة لكلتا قاعدتي البيانات، لذلك لا تحتاج إلى تغيير تنفيذ المصادقة عند بدء استخدام Cloud Firestore.

الاختلافات الرئيسية للنظر فيها

  • تستخدم حزم SDK للأجهزة المحمولة والويب قواعد أمان Cloud Firestore، بينما تستخدم حزم SDK للخادم إدارة الوصول إلى الهوية (IAM) لتأمين البيانات.
  • لا تتتالي قواعد أمان Cloud Firestore إلا إذا استخدمت حرف بدل. المستندات والمجموعات لا ترث القواعد.
  • لم تعد بحاجة إلى التحقق من صحة البيانات بشكل منفصل (كما فعلت في Realtime Database ).
  • يتحقق Cloud Firestore من القواعد قبل تنفيذ الاستعلام للتأكد من أن المستخدم لديه حق الوصول المناسب لجميع البيانات التي يتم إرجاعها بواسطة الاستعلام.

انقل البيانات التاريخية إلى Cloud Firestore

بمجرد تعيين بياناتك وهياكل الأمان الخاصة بك لنماذج البيانات والأمان الخاصة بـ Cloud Firestore، يمكنك البدء في إضافة بياناتك. إذا كنت تخطط للاستعلام عن البيانات التاريخية بعد نقل تطبيقك من Realtime Database إلى Cloud Firestore، فأضف تصدير بياناتك القديمة إلى قاعدة بيانات Cloud Firestore الجديدة. إذا كنت تخطط لاستخدام كل من Realtime Database وCloud Firestore في تطبيقك، فيمكنك تخطي هذه الخطوة.

لتجنب استبدال البيانات الجديدة بالبيانات القديمة، قد ترغب في إضافة بياناتك التاريخية أولاً. إذا قمت بإضافة بيانات جديدة إلى قاعدتي البيانات في وقت واحد، كما تمت مناقشته في الخطوة التالية، فتأكد من إعطاء الأولوية للبيانات الجديدة المضافة إلى Cloud Firestore بواسطة Cloud Functions.

لترحيل البيانات التاريخية إلى Cloud Firestore، اتبع الخطوات التالية:

  1. قم بتصدير بياناتك من قاعدة بيانات Realtime أو استخدم نسخة احتياطية حديثة .
    1. انتقل إلى قسم قاعدة بيانات الوقت الحقيقي في وحدة تحكم Firebase.
    2. من علامة التبويب "البيانات" ، حدد عقدة المستوى الجذري لقاعدة البيانات الخاصة بك وحدد "تصدير JSON" من القائمة.
  2. أنشئ قاعدة بياناتك الجديدة في 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. تعرف على المزيد حول مشغلات قاعدة بيانات الوقت الفعلي لوظائف السحابة.

اجعل Cloud Firestore قاعدة بياناتك الأساسية للبيانات التي تم ترحيلها

إذا قررت استخدام Cloud Firestore كقاعدة بيانات أساسية لبعض بياناتك، فتأكد من حساب أي وظائف لنسخ البيانات قمت بإعدادها والتحقق من صحة قواعد أمان Cloud Firestore الخاصة بك.

  1. إذا استخدمت Cloud Functions للحفاظ على التكافؤ بين قواعد البيانات الخاصة بك، فتأكد من عدم تكرار عمليات الكتابة عبر قاعدتي البيانات في حلقة متكررة. قم بتبديل وظيفتك للكتابة إلى قاعدة بيانات واحدة، أو قم بإزالة الوظيفة تمامًا وابدأ في الإلغاء التدريجي لوظيفة الكتابة للبيانات التي تم ترحيلها في التطبيقات التي لا تزال مرتبطة بقاعدة بيانات الوقت الفعلي. تعتمد كيفية تعاملك مع هذا الأمر في تطبيقك على احتياجاتك المحددة ومستخدميك.

  2. تأكد من أن بياناتك مؤمنة بشكل صحيح. تحقق من صحة قواعد أمان Cloud Firestore أو إعداد IAM.