Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

يمكنك استخدام كل من Firebase Realtime Database و Cloud Firestore في تطبيقك ، والاستفادة من مزايا كل حل قاعدة بيانات لتناسب احتياجاتك. على سبيل المثال ، قد ترغب في الاستفادة من دعم Realtime Database للتواجد ، كما هو موضح في Build Presence في 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 الجديد. ومع ذلك ، إذا كنت تستخدم قاعدتي البيانات في تطبيقك ، فلن تحتاج إلى نقل البيانات التاريخية خارج قاعدة بيانات Realtime.

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

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

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

  1. قم بتصدير بياناتك من قاعدة بيانات Realtime أو استخدم نسخة احتياطية حديثة .
    1. انتقل إلى قسم Realtime Database في وحدة تحكم 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 Firestore عندما يكتب العميل إلى Realtime Database. تأكد من أن Cloud Firestore يعطي الأولوية للبيانات الجديدة القادمة من Cloud Functions على أي كتابات تقوم بها من ترحيل بياناتك التاريخية.

أنشئ وظيفة لكتابة بيانات جديدة أو متغيرة إلى Cloud Firestore في كل مرة يكتب فيها العميل البيانات إلى Realtime Database. تعرف على المزيد حول مشغلات Realtime Database لتشغيل وظائف السحابة.

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

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

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

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