השתמש ב-Cloud Firestore עם Firebase Realtime Database

אתה יכול להשתמש גם ב-Firebase Realtime Database וגם Cloud Firestore באפליקציה שלך, ולמנף את היתרונות של כל פתרון מסד נתונים כדי להתאים לצרכים שלך. לדוגמה, ייתכן שתרצה למנף את התמיכה של Realtime Database בנוכחות, כפי שמתואר ב- Build Presence in Cloud Firestore .

למידע נוסף על ההבדלים בין מסדי הנתונים .

העברת נתונים ל-Cloud Firestore

אם החלטת שאתה רוצה להעביר חלק מהנתונים שלך ממסד נתונים בזמן אמת ל-Cloud Firestore, שקול את הזרימה הבאה. מכיוון שלכל מסד נתונים יש צרכים ייחודיים ושיקולים מבניים, אין נתיב העברה אוטומטי. במקום זאת, תוכל לעקוב אחר ההתקדמות הכללית הזו:

  1. מפה את מבנה הנתונים וכללי האבטחה ממסד נתונים בזמן אמת ל-Cloud Firestore. גם מסד נתונים בזמן אמת וגם Cloud Firestore מסתמכים על אימות Firebase, כך שאינך צריך לשנות את אימות המשתמש עבור האפליקציה שלך. עם זאת, כללי האבטחה ומודל הנתונים שונים וחשוב לקחת בחשבון בקפידה את הפערים הללו לפני שתתחיל להעביר נתונים ל-Cloud Firestore.

  2. העבר נתונים היסטוריים. בזמן שאתה מגדיר את מבנה הנתונים החדש שלך ב-Cloud Firestore, אתה יכול למפות ולהעביר נתונים קיימים ממסד נתונים בזמן אמת למופע החדש שלך ב-Cloud Firestore. עם זאת, אם אתה משתמש בשני מסדי הנתונים באפליקציה שלך, אינך צריך להעביר נתונים היסטוריים ממסד הנתונים בזמן אמת.

  3. שיקוף נתונים חדשים ל-Firestore בזמן אמת. השתמש בפונקציות הענן כדי לכתוב נתונים חדשים למסד הנתונים החדש שלך ב-Cloud Firestore כאשר הם מתווספים למסד הנתונים בזמן אמת.

  4. הפוך את Cloud Firestore למסד הנתונים הראשי שלך עבור הנתונים שהועברו. לאחר העברת חלק מהנתונים שלך, השתמש ב-Cloud Firestore כמסד הנתונים הראשי שלך וצמצם את השימוש במסד הנתונים בזמן אמת עבור הנתונים שהועברו. שקול גרסאות של האפליקציה שלך שעדיין קשורות למסד נתונים בזמן אמת עבור הנתונים האלה וכיצד אתה מתכנן להמשיך לתמוך בהן.

ודא שאתה אחראי על עלויות החיוב הן עבור מסד נתונים בזמן אמת והן עבור Cloud Firestore .

מפה את הנתונים שלך

נתונים במסד נתונים בזמן אמת בנויים כעץ בודד, בעוד ש-Cloud Firestore תומכת בהיררכיות נתונים מפורשות יותר באמצעות מסמכים, אוספים ותתי-אוספים. אם תעביר חלק מהנתונים שלך ממסד נתונים בזמן אמת ל-Cloud Firestore, אולי תרצה לשקול ארכיטקטורה אחרת עבור הנתונים שלך.

הבדלים עיקריים שיש לקחת בחשבון

אם אתה מעביר נתונים מעץ מסד הנתונים הקיים שלך בזמן אמת למסמכים ואוספים של Cloud Firestore, זכור את ההבדלים העיקריים הבאים בין מסדי הנתונים שעשויים להשפיע על אופן בניית הנתונים ב-Cloud Firestore:

  • שאילתות רדודות מציעות גמישות רבה יותר במבני נתונים היררכיים.
  • שאילתות מורכבות מציעות פירוט רב יותר ומפחיתות את הצורך בנתונים כפולים.
  • סמני שאילתה מציעים עימוד חזק יותר.
  • עסקאות כבר לא דורשות שורש משותף לכל הנתונים שלך, והן יעילות יותר.
  • עלויות החיוב שונות בין Realtime Database לבין Cloud Firestore. במקרים רבים, Cloud Firestore עשוי להיות יקר יותר ממסד נתונים בזמן אמת, במיוחד אם אתה מסתמך על פעולות קטנות רבות. שקול להפחית את מספר הפעולות במסד הנתונים שלך ולהימנע מכתיבה מיותרת. למידע נוסף על ההבדלים בחיוב בין Realtime Database לבין Cloud Firestore.

שיטות עבודה מומלצות בפעולה

הדוגמה הבאה משקפת כמה מהשיקולים שאתה עשוי לעשות בעת העברת הנתונים שלך בין מסדי נתונים. אתה יכול למנף קריאה רדודה ויכולות שאילתות משופרות עבור מבני נתונים טבעיים יותר ממה שאולי השתמשת עם מסד נתונים בזמן אמת.

שקול אפליקציית מדריך ערים המסייעת למשתמשים למצוא ציוני דרך בולטים בערים ברחבי העולם. מכיוון שבמסד הנתונים בזמן אמת אין קריאות רדודות, ייתכן שהיית צריך לבנות את הנתונים בשני צמתים ברמה העליונה, באופן הבא:

// /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 ...]
}

למסמכים יש גודל מקסימלי של 1MB, וזו סיבה נוספת לאחסן נקודות ציון כתת-אוסף, ולהשאיר כל מסמך עירוני קטן, במקום מסמכים נפוחים עם רשימות מקוננות.

יכולות השאילתה המתקדמות של Cloud Firestore מפחיתות את הצורך בשכפול נתונים עבור דפוסי גישה נפוצים. לדוגמה, שקול מסך באפליקציית מדריך העיר שמציג את כל ערי הבירה לפי אוכלוסייה. במסד נתונים בזמן אמת, הדרך היעילה ביותר לעשות זאת היא לשמור רשימה נפרדת של ערי בירה המשכפלת נתונים מרשימת cities , באופן הבא:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

ב-Cloud Firestore, אתה יכול לבטא רשימה של ערי בירה לפי סדר האוכלוסייה בשאילתה בודדת:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

קרא עוד על מודל הנתונים של Cloud Firestore והסתכל בפתרונות שלנו לקבלת רעיונות נוספים כיצד לבנות את מסד הנתונים שלך ב-Cloud Firestore.

אבטח את הנתונים שלך

בין אם אתה משתמש בכללי אבטחה של Cloud Firestore עבור אנדרואיד, אפל או לקוחות אינטרנט, או בניהול גישת זהות (IAM) עבור שרתים, ודא שאתה מאבטח את הנתונים שלך ב-Cloud Firestore כמו גם במסד נתונים בזמן אמת. אימות המשתמש מטופל על ידי אימות עבור שני מסדי הנתונים, כך שאינך צריך לשנות את היישום שלך של אימות כאשר אתה מתחיל להשתמש ב-Cloud Firestore.

הבדלים עיקריים שיש לקחת בחשבון

  • ערכות SDK לנייד ולאינטרנט משתמשות בכללי האבטחה של Cloud Firestore, בעוד שערכות SDK של שרתים משתמשות בניהול גישה לזהות (IAM) כדי לאבטח נתונים.
  • כללי האבטחה של Cloud Firestore אינם משתפכים אלא אם כן אתה משתמש בתו כללי. מסמכים ואוספים אינם יורשים כללים בדרך אחרת.
  • אינך צריך עוד לאמת נתונים בנפרד (כפי שעשית במסד נתונים בזמן אמת ).
  • Cloud Firestore בודק כללים לפני ביצוע שאילתה כדי לוודא שלמשתמש יש את הגישה המתאימה לכל הנתונים המוחזרים על ידי השאילתה.

העבר נתונים היסטוריים ל-Cloud Firestore

לאחר מיפת הנתונים ומבני האבטחה שלך למודלים של נתונים ואבטחה של Cloud Firestore, תוכל להתחיל להוסיף את הנתונים שלך. אם אתה מתכנן לבצע שאילתות נתונים היסטוריים לאחר העברת האפליקציה שלך ממסד נתונים בזמן אמת ל-Cloud Firestore, הוסף ייצוא של הנתונים הישנים שלך למסד הנתונים החדש של Cloud Firestore. אם אתה מתכנן להשתמש גם במסד נתונים בזמן אמת וגם ב-Cloud Firestore באפליקציה שלך, תוכל לדלג על שלב זה.

כדי להימנע מהחלפת נתונים חדשים בנתונים ישנים, ייתכן שתרצה להוסיף תחילה את הנתונים ההיסטוריים שלך. אם אתה מוסיף נתונים חדשים לשני מסדי הנתונים בו-זמנית, כפי שנדון בשלב הבא, ודא שאתה נותן עדיפות לנתונים חדשים שנוספו ל-Cloud Firestore על ידי Cloud Functions.

כדי להעביר נתונים היסטוריים ל-Cloud Firestore, בצע את השלבים הבאים:

  1. ייצא את הנתונים שלך ממסד נתונים בזמן אמת או השתמש בגיבוי עדכני .
    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 Firestore בכל פעם שלקוח כותב למסד נתונים בזמן אמת. ודא ש-Cloud Firestore נותן עדיפות לנתונים חדשים המגיעים מ-Cloud Functions על פני כל כתיבה שאתה מבצע מהעברת הנתונים ההיסטוריים שלך.

צור פונקציה לכתיבת נתונים חדשים או משתנים ל-Cloud Firestore בכל פעם שלקוח כותב נתונים למסד נתונים בזמן אמת. למידע נוסף על טריגרים של מסד נתונים בזמן אמת עבור פונקציות ענן.

הפוך את Cloud Firestore למסד הנתונים הראשי שלך עבור הנתונים שהועברו

אם החלטת להשתמש ב-Cloud Firestore כמסד הנתונים הראשי שלך עבור חלק מהנתונים שלך, ודא שאתה אחראי לכל פונקציות שיקוף הנתונים שהגדרת ולאמת את כללי האבטחה שלך ב-Cloud Firestore.

  1. אם השתמשת ב-Cloud Functions כדי לשמור על זוגיות בין מסדי הנתונים שלך, ודא שאתה לא משכפל פעולות כתיבה על פני שני מסדי הנתונים בלולאה. החלף את הפונקציה שלך לכתיבה למסד נתונים בודד, או הסר את הפונקציה לחלוטין והתחל לבטל בהדרגה את פונקציונליות הכתיבה עבור הנתונים שהועברו באפליקציות שעדיין קשורות למסד נתונים בזמן אמת. איך אתה מטפל בזה עבור האפליקציה שלך תלוי בצרכים הספציפיים שלך ובמשתמשים שלך.

  2. ודא שהנתונים שלך מאובטחים כהלכה. אמת את כללי האבטחה של Cloud Firestore או הגדרת IAM.