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

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

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

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

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

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

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

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

gcloud

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

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

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

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
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 דקות.

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

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

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

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

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

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

המסוף

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

לדף Databases

gcloud

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

gcloud firestore databases list

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

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

gcloud

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

gcloud firestore databases describe --database=DATABASE_ID

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

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

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

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

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

gcloud
gcloud firestore databases update --database=DATABASE_ID \
--type=DATABASE_TYPE

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

  • ‫DATABASE_ID: מזהה מסד נתונים.
  • ‫DATABASE_TYPE: ‏firestore-native למצב Native או datastore-mode למצב Datastore.

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

כדי להפעיל הגנה מפני מחיקה במסד נתונים, משתמשים בפקודה 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. נכנסים לדף Databases במסוף Google Cloud .

    לדף Databases

  2. לוחצים על הצגת פרטים נוספים בשורה בטבלה של מסד הנתונים שרוצים למחוק. לוחצים על מחיקה. מופיעה תיבת דו-שיח.
  3. בתיבת הדו-שיח למחוק את מסד הנתונים?, מאשרים את המחיקה על ידי הקלדת מזהה מסד הנתונים בשדה הטקסט. לוחצים על מחיקה. המסוף מודיע לכם אם הפעולה הצליחה או נכשלה.

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

gcloud

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

gcloud firestore databases delete --database=DATABASE_ID

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

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

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

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

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

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

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

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

המסוף

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

לדף Databases

  1. לוחצים על View more בשורה של מסד הנתונים שרוצים לשכפל. לוחצים על Clone (שיבוט). מופיעה תיבת הדו-שיח יצירת שיבוט.

  2. בתיבת הדו-שיח יצירת שיבוט, מציינים פרמטרים לשיבוט של מסד הנתונים:

    1. בשדה Give the clone an ID (הקצאת מזהה לשיבוט), מזינים מזהה מסד נתונים למסד נתונים משובט חדש. מזהה מסד הנתונים הזה לא יכול להיות משויך למסד נתונים קיים.

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

  3. לוחצים על יצירת שיבוט.

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'

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

אתם יכולים להשתמש בתנאים של ניהול הזהויות והרשאות הגישה (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

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

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

מגבלות

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

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