ניהול מסדי נתונים

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

תפקידים והרשאות נדרשים

כדי ליצור ולנהל מסדי נתונים, צריך את התפקיד הבא בניהול זהויות והרשאות גישה (IAM):

התפקיד הזה נותן את ההרשאות הבאות שנדרשות כדי ליצור ולנהל מסדי נתונים:

  • יצירת מסד נתונים: datastore.databases.create
  • קריאת הגדרות מסד הנתונים: datastore.databases.getMetadata
  • הגדרת מסד נתונים: datastore.databases.update
  • מחיקת מסד נתונים: datastore.databases.delete
  • שכפול מסד נתונים: datastore.databases.clone

יצירת מסד נתונים

כדי ליצור מסד נתונים, משתמשים באחת מהשיטות הבאות:

המסוף
מסוף Firebase
  1. במסוף Firebase, נכנסים אל Databases & Storage (מסדי נתונים ואחסון) > Firestore.

    כניסה ל-Firestore

  2. לוחצים על Add database.
  3. בוחרים באפשרות מהדורה רגילה. לוחצים על Next.
  4. מזינים מזהה מסד נתונים.
  5. בוחרים מיקום למסד הנתונים. לוחצים על הבא.
  6. צריך לבחור מצב התחלה ל-Cloud Firestore Security Rules:

    מצב בדיקה
    מתאים לתחילת העבודה עם ספריות הלקוח לנייד ולאינטרנט, אבל מאפשר לכל אחד לקרוא את הנתונים ולשכתב אותם. אחרי הבדיקה, חשוב לעיין בקטע אבטחת הנתונים.
    מצב ייצור
    דוחה את כל פעולות הקריאה והכתיבה מלקוחות בנייד ובאינטרנט.
    לשרתי האפליקציות המאומתים (Node.js, ‏ Python, ‏ Java) עדיין תהיה גישה למסד הנתונים
  7. לוחצים על יצירה.
gcloud

משתמשים בפקודה gcloud firestore databases create.

  • כדי ליצור מסד נתונים ב-Cloud Firestore Standard Edition:

    gcloud firestore databases create \
    --database=DATABASE_ID \
    --location=LOCATION \
    --edition=standard
    --type=DATABASE_TYPE

    מחליפים את מה שכתוב בשדות הבאים:

‫--delete-protection הוא דגל אופציונלי להפעלת הגנה מפני מחיקה. כדי למחוק מסד נתונים שההגנה מפני מחיקה מופעלת בו, צריך להשבית את ההגדרה הזו. הגדרה זו מושבתת כברירת מחדל.

כדי להוסיף תגים למסד הנתונים, משתמשים בדגל --tags. לדוגמה:

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Firebase CLI
firebase firestore:databases:create DATABASE_ID \n--location=LOCATION \n[--edition EDITION] \n[--firestore-data-access FIRESTORE_ACCESS] \n[--realtime-updates REALTIME_UPDATES] \n[--delete-protection DELETE_PROTECTION_ENABLEMENT]

מחליפים את מה שכתוב בשדות הבאים:

Terraform
resource "google_firestore_database" "database" {
  project     = "project-id"
  name        = DATABASE_ID
  location_id = LOCATION
  type        = DATABASE_TYPE

  // Optional
  delete_protection_state = DELETE_PROTECTION_STATE
}

מחליפים את מה שכתוב בשדות הבאים:

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

מזהה מסד הנתונים

מזהה מסד נתונים תקין צריך לעמוד בכללים הבאים:

  • השם יכול לכלול רק אותיות, מספרים ומקפים (-).
  • האותיות חייבות להיות קטנות.
  • התו הראשון חייב להיות אות.
  • התו האחרון חייב להיות אות או מספר.
  • לפחות 4 תווים.
  • עד 63 תווים.
  • אסור שהערך יהיה UUID או דומה ל-UUID. לדוגמה, אל תשתמשו במזהה כמו f47ac10b-58cc-0372-8567-0e02b2c3d479.

יש חריג אחד לכללים האלה: במהדורת Standard, אם לא תזינו מזהה בעצמכם, ייווצר מסד נתונים בשם (default).

שימו לב: אחרי שמוחקים מסד נתונים, אי אפשר להשתמש שוב במזהה שלו במשך כ-5 דקות.

הגנה מפני מחיקה

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

הגדרת Cloud Firestore Security Rules למסדי הנתונים

משתמשים ב-CLI של Firebase כדי לפרוס את Cloud Firestore Security Rules בכל אחד ממסדי הנתונים. מדריך לניהול ופריסה של Cloud Firestore Security Rules

גישה למסד נתונים בעל שם באמצעות ספריית לקוח

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

הצגת רשימה של מסדי נתונים

כדי להציג את רשימת מסדי הנתונים, משתמשים באחת מהשיטות הבאות:

המסוף

נכנסים לדף Databases במסוף Google Cloud.

כניסה לדף Databases

gcloud

משתמשים בפקודה gcloud firestore databases list כדי להציג את רשימת כל מסדי הנתונים בפרויקט.

gcloud firestore databases list
Firebase CLI

משתמשים בפקודה firebase firestore:databases:list כדי להציג את רשימת כל מסדי הנתונים בפרויקט.

firebase firestore:databases:list

הצגת פרטי מסד הנתונים

כדי לראות פרטים על מסד נתונים אחד, משתמשים באחת מהשיטות הבאות:

gcloud

משתמשים בפקודה gcloud firestore databases describe:

gcloud firestore databases describe --database=DATABASE_ID
Firebase CLI

משתמשים בפקודה firebase firestore:databases:get:

firebase firestore:databases:get DATABASE_ID

הפלט של מסד נתונים ב-Enterprise כולל את השדות הבאים:

  • Edition: ENTERPRISE
  • Firestore Data Access: ‏ DATA_ACCESS_MODE_ENABLED או DATA_ACCESS_MODE_DISABLED
  • MongoDB Compatible Data Access: ‏ DATA_ACCESS_MODE_ENABLED או DATA_ACCESS_MODE_DISABLED
  • Realtime Updates: ‏ REALTIME_UPDATES_ENABLED או REALTIME_UPDATES_DISABLED

מחליפים את DATABASE_ID במזהה מסד נתונים.

עדכון ההגדרות של מסד הנתונים

כדי לעדכן את הגדרות התצורה של מסד נתונים, משתמשים בפקודה gcloud firestore databases update. משתמשים בפקודה הזו כדי להפעיל או להשבית את ההגנה מפני מחיקה.

עדכון ההגדרה של ההגנה מפני מחיקה

כדי להפעיל הגנה מפני מחיקה במסד נתונים, משתמשים בפקודה gcloud firestore databases update עם הדגל --delete-protection. לדוגמה:

gcloud
gcloud firestore databases update --database=DATABASE_ID --delete-protection

מחליפים את DATABASE_ID במזהה מסד נתונים.

כדי להשבית את ההגנה מפני מחיקה במסד נתונים, משתמשים בפקודה gcloud firestore databases update עם הדגל --no-delete-protection. לדוגמה:

gcloud
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection

מחליפים את DATABASE_ID במזהה מסד נתונים.

מחיקה של מסד נתונים

כדי למחוק מסד נתונים, משתמשים במסוף או בכלי שורת הפקודה.

אם הגדרת ההגנה מפני מחיקה מופעלת במסד הנתונים, קודם צריך להשבית את ההגנה מפני מחיקה.

אם מסד הנתונים מכיל נתוני חיפוש של App Engine או ישויות blob, צריך למחוק קודם את הנתונים האלה.

מחיקת מסד נתונים לא מוחקת באופן אוטומטי את הטריגרים של Eventarc לאותו מסד נתונים. הטריגר מפסיק לשלוח אירועים, אבל ממשיך להתקיים עד שמוחקים אותו.

מחיקת מסד נתונים לא כרוכה בחיובים על פעולות מחיקה.

המסוף
  1. במסוף Firebase, עוברים אל Databases & Storage (מסדי נתונים ואחסון) > Firestore.

    כניסה ל-Firestore

  2. בכרטיסייה Data, מעל תצוגת טבלת הנתונים של מסד הנתונים, לוחצים על ובוחרים באפשרות Delete database.
  3. פועלים לפי ההוראות כדי למחוק את מסד הנתונים.
gcloud

משתמשים בפקודה `gcloud firestore databases delete`.

gcloud firestore databases delete --database=DATABASE_ID

מחליפים את DATABASE_ID במזהה של מסד הנתונים שרוצים למחוק. כדי למחוק את מסד הנתונים שמוגדר כברירת מחדל, צריך להשתמש במזהה '(default)'

שכפול מסד נתונים

אתם יכולים לשכפל מסד נתונים קיים עם חותמת זמן נבחרת למסד נתונים חדש:

  • מסד הנתונים המשוכפל הוא מסד נתונים חדש שייווצר באותו מיקום של מסד הנתונים המקורי.

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

  • כברירת מחדל, מסד הנתונים המשוכפל יוצפן באותו אופן כמו מסד הנתונים המקורי, באמצעות הצפנת ברירת המחדל של Google או הצפנת CMEK. אתם יכולים לציין סוג הצפנה אחר או להשתמש במפתח אחר להצפנת CMEK.

  • חותמת הזמן היא ברמת פירוט של דקה אחת, ומציינת נקודת זמן בעבר, בתקופה שמוגדרת על ידי חלון ה-PITR:

    • אם התכונה PITR מופעלת במסד הנתונים, אתם יכולים לבחור כל דקה ב-7 הימים האחרונים (או פחות, אם התכונה PITR הופעלה לפני פחות מ-7 ימים).
    • אם PITR לא מופעל, אתם יכולים לבחור כל דקה בשעה האחרונה.
    • בתיאור של מסד הנתונים אפשר לבדוק מה חותמת הזמן המוקדמת ביותר שאפשר לבחור.

המסוף

  1. פותחים את הדף Databases & Storage > Firestore במסוף Firebase.

  2. ליד שם מסד הנתונים, לוחצים על ואז על Clone database. החלונית Clone database מופיעה.

  3. בחלונית Clone database, מזינים את הפרמטרים לשכפול מסד הנתונים:

    1. בשדה Database ID, מזינים מזהה למסד הנתונים המשוכפל החדש. מזהה מסד הנתונים לא יכול להיות זהה למזהה של מסד נתונים קיים.

    2. בשדה Clone from, בוחרים נקודת זמן לשיבוט. השעה שנבחרה תואמת לחותמת זמן של PITR, ברמת פירוט של דקות.

  4. לוחצים על שכפול.

gcloud

משתמשים בפקודה gcloud firestore databases clone כדי לשכפל מסד נתונים:

gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

מחליפים את מה שכתוב בשדות הבאים:

  • ‫SOURCE_DATABASE: שם מסד הנתונים הקיים שרוצים לשכפל. השם הוא בפורמט projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • ‫PITR_TIMESTAMP: חותמת זמן של PITR בפורמט RFC 3339, ברמת פירוט של דקות. לדוגמה: 2025-06-01T10:20:00.00Z או 2025-06-01T10:30:00.00-07:00.

  • ‫DESTINATION_DATABASE_ID: מזהה מסד נתונים למסד נתונים משוכפל חדש. המזהה הזה לא יכול להיות משויך למסד נתונים קיים.

דוגמה:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

אם רוצים לקשר לתגים מסוימים בזמן שכפול מסד נתונים, משתמשים בפקודה הקודמת עם הדגל --tags, שהוא רשימה אופציונלית של צמדי KEY=VALUE של תגים לקישור.

דוגמה:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

כברירת מחדל, למסד הנתונים המשוכפל תהיה אותה הגדרת הצפנה כמו למסד הנתונים המקורי. כדי לשנות את הגדרות ההצפנה, משתמשים בארגומנט --encryption-type:

  • (ברירת מחדל) use-source-encryption: שימוש באותן הגדרות הצפנה כמו במסד הנתונים של המקור.
  • ‫google-default-encryption: שימוש בהצפנה שמוגדרת כברירת מחדל ב-Google.
  • ‫customer-managed-encryption: שימוש בהצפנת CMEK. מציינים מזהה מפתח בארגומנט --kms-key-name.

בדוגמה הבאה מוסבר איך להגדיר הצפנת CMEK למסד הנתונים המשוכפל:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

Firebase CLI

משתמשים בפקודה firebase firestore:databases:clone כדי לשכפל מסד נתונים:

firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'

מחליפים את מה שכתוב בשדות הבאים:

  • ‫SOURCE_DATABASE: שם מסד הנתונים הקיים שרוצים לשכפל. השם הוא בפורמט projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • ‫DESTINATION_DATABASE: שם מסד הנתונים החדש שנוצר משכפול. השם הוא בפורמט projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. השם של מסד הנתונים הזה לא יכול להיות משויך למסד נתונים קיים.

  • ‫PITR_TIMESTAMP: חותמת זמן של PITR בפורמט RFC 3339, ברמת פירוט של דקות. לדוגמה: 2025-06-01T10:20:00.00Z או 2025-06-01T10:30:00.00-07:00. אם לא מציינים ערך, תמונת המצב שנבחרת היא של השעה הנוכחית, מעוגלת כלפי מטה לדקה.

כברירת מחדל, למסד הנתונים המשוכפל תהיה אותה הגדרת הצפנה כמו למסד הנתונים המקורי. כדי לשנות את הגדרות ההצפנה, משתמשים בארגומנט --encryption-type:

  • ‫USE_SOURCE_ENCRYPTION (ברירת המחדל): שימוש באותן הגדרות הצפנה כמו במסד הנתונים של המקור.
  • ‫GOOGLE_DEFAULT_ENCRYPTION: שימוש בהצפנה שמוגדרת כברירת מחדל ב-Google.
  • ‫CUSTOMER_MANAGED_ENCRYPTION: שימוש בהצפנת CMEK. מציינים מזהה מפתח בארגומנט --kms-key-name.

הגדרת הרשאות גישה לכל מסד נתונים

אתם יכולים להשתמש בתנאים של ניהול הזהויות והרשאות הגישה (IAM) כדי להגדיר הרשאות גישה ברמת מסד הנתונים. בדוגמאות הבאות משתמשים ב-Google Cloud CLI כדי להקצות גישה מותנית למסד נתונים אחד או יותר. אפשר גם להגדיר תנאי IAM במסוף Google Cloud.

הצגת כללי מדיניות IAM קיימים

gcloud projects get-iam-policy PROJECT_ID

מגדירים את PROJECT_ID למזהה הפרויקט.

מתן גישה למסד נתונים

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name=="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

מגדירים את הפרטים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫EMAIL: כתובת אימייל שמייצגת חשבון Google ספציפי. לדוגמה, alice@example.com.
  • ‫DATABASE_ID: מזהה מסד נתונים.
  • ‫TITLE: כותרת אופציונלית לביטוי.
  • ‫DESCRIPTION: תיאור אופציונלי של הביטוי.

הענקת גישה לכל מסדי הנתונים חוץ מאחד

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name!="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

מגדירים את הפרטים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫EMAIL: כתובת אימייל שמייצגת חשבון Google ספציפי. לדוגמה, alice@example.com.
  • ‫DATABASE_ID: מזהה מסד נתונים.
  • ‫TITLE: כותרת אופציונלית לביטוי.
  • ‫DESCRIPTION: תיאור אופציונלי של הביטוי.

הסרת כללי מדיניות של חבר ותפקיד נתונים

gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' --all

מגדירים את הפרטים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫EMAIL: כתובת אימייל שמייצגת חשבון Google ספציפי. לדוגמה, alice@example.com.

Cloud Monitoring

המדדים של Cloud Firestore מדווחים בשני משאבים במעקב.

אפשר לבדוק מדדים נצברים ברמת מסד הנתונים באמצעות firestore.googleapis.com/Database. המדדים שמדווחים ב-firestore_instance נצברים ברמת הפרויקט.

מגבלות

  • אפשר להגדיר עד 100 מסדי נתונים בכל פרויקט. כדי להגדיל את המגבלה, אפשר לפנות לתמיכה.
  • אי אפשר למחוק את מסד הנתונים של (default) אם הוא מכיל נתוני חיפוש של GAE. כדי למחוק את נתוני החיפוש של GAE, משתמשים ב-index delete API. אם מחקתם לאחרונה נתוני GAE Search, יכול להיות שתצטרכו להמתין לפני שתוכלו למחוק את מסד הנתונים.
  • אי אפשר למחוק את מסד הנתונים של (default) אם הוא מכיל ישויות blob. כדי למחוק נתונים מ-Blobstore, משתמשים ב-API למחיקה מ-Blobstore. כדי לבדוק אם במסד הנתונים של (default) יש נתונים של Blobstore, אפשר להריץ את שאילתת ה-GQL הבאה במסוף Google Cloud: SELECT * FROM __BlobInfo__.
  • אפשר להשתמש שוב במזהה של מסד נתונים רק 5 דקות אחרי המחיקה.
  • ‫Cloud Function v1 לא תומכת במסדי נתונים בעלי שם ב-Firestore. משתמשים בטריגרים של Cloud Firestore (דור שני) כדי להגדיר אירועים למסדי נתונים בעלי שם.
  • יכול להיות שטריגרים של פונקציות ב-Firestore בגרסה 1 וטריגרים של אירועים ב-Firestore יפסיקו לפעול אחרי מחיקת מסד הנתונים, גם אם נוצר מסד נתונים חדש באותו שם.

המאמרים הבאים