עבודה עם שחזור מערכת מנקודה מסוימת בזמן (PITR)
בדף הזה מוסבר איך להשתמש בשחזור מערכת מנקודה מסוימת בזמן (PITR) כדי לשמור ולשחזר נתונים ב-Firestore עם תאימות ל-MongoDB.
כדי להבין את המושגים של PITR, קראו את המאמר שחזור מערכת מנקודה מסוימת בזמן (PITR).
הרשאות
כדי לקבל את ההרשאות שנדרשות לניהול הגדרות ה-PITR, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד בעלים של Cloud Datastore (roles/datastore.owner) בפרויקט שבו אתם רוצים להפעיל את הגדרות ה-PITR.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות לניהול הגדרות ה-PITR. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לנהל את הגדרות ה-PITR, נדרשות ההרשאות הבאות:
-
כדי להפעיל את PITR כשיוצרים מסד נתונים:
datastore.databases.create -
כדי לעדכן את הגדרות ה-PITR במסד נתונים קיים:
datastore.databases.update,datastore.databases.list -
כדי לבצע קריאות מנתוני PITR:
datastore.databases.get,datastore.entities.get,datastore.entities.list -
כדי לייצא נתוני PITR:
datastore.databases.export -
כדי לייבא נתוני PITR:
datastore.databases.import -
כדי לשכפל מסד נתונים:
datastore.databases.clone
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
לפני שמתחילים
לפני שמתחילים להשתמש ב-PITR, חשוב לשים לב לנקודות הבאות:
- אי אפשר להתחיל לקרוא מ-7 ימים בעבר מיד אחרי שמפעילים את PITR.
- כדי להפעיל את PITR כשיוצרים מסד נתונים, צריך להשתמש בפקודה
gcloud firestore databases create. אי אפשר להפעיל את PITR כשיוצרים מסד נתונים באמצעות מסוף Google Cloud . - אחרי שמפעילים את PITR, Firestore עם תאימות ל-MongoDB מתחיל לשמור גרסאות.
- אחרי שמשביתים את PITR, אי אפשר לקרוא נתוני PITR בחלון PITR.
- אם תפעילו מחדש את PITR מיד אחרי שהשבתתם אותו, נתוני ה-PITR הקודמים לא יהיו זמינים יותר. כל נתוני ה-PITR שנוצרו לפני השבתת ה-PITR יימחקו אחרי תאריך התפוגה של ה-PITR.
- אם מחקתם בטעות נתונים בשעה האחרונה והתכונה PITR מושבתת, אתם יכולים לשחזר את הנתונים על ידי הפעלת PITR תוך שעה מהמחיקה.
- כל פעולת קריאה שמתבצעת על נתוני PITR שפג תוקפם נכשלת.
הפעלת PITR
לפני שמשתמשים ב-PITR, צריך להפעיל את החיוב בפרויקט ב-Google Cloud. רק פרויקטים בענן של Google שהחיוב מופעל בהם יכולים להשתמש בפונקציונליות של PITR.
כדי להפעיל את PITR במסד הנתונים:
המסוף
נכנסים לדף Databases במסוף Google Cloud .
בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על תוכנית התאוששות מאסון (DR).
כדי לערוך את ההגדרות, לוחצים על עריכה.
מסמנים את התיבה Enable point-in-time recovery ולוחצים על Save.
הפעלת PITR כרוכה בעלויות אחסון. למידע נוסף, ראו תמחור.
כדי להשבית את ה-PITR, מבטלים את הסימון בתיבה Enable point-in-time recovery בדף תוכנית התאוששות מאסון (DR) במסוף Google Cloud .
gcloud
כדי להפעיל את PITR במהלך יצירת מסד הנתונים, משתמשים בפקודה gcloud firestore databases create ובפקודה --enable-ptir באופן הבא:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--edition=enterprise\
--enable-pitr
מחליפים את הערכים באופן הבא:
-
LOCATION– המיקום שבו רוצים ליצור את מסד הנתונים. -
DATABASE_ID– מוגדר למזהה מסד נתונים.
כדי להשבית את ה-PITR, משתמשים בפקודה gcloud firestore databases update באופן הבא:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
מחליפים את הערכים באופן הבא:
-
DATABASE_ID– מזהה מסד הנתונים או (default).
קבלת תקופת השמירה וזמן הגרסה המוקדמת ביותר
המסוף
נכנסים לדף Databases במסוף Google Cloud .
בוחרים את מסד הנתונים הרצוי מרשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על תוכנית התאוששות מאסון (DR).
בקטע Settings, שימו לב לערכים של Retention period ו-Earliest version time.
- תקופת שמירה: התקופה שבה Firestore עם תאימות ל-MongoDB שומר את כל גרסאות הנתונים של מסד הנתונים. הערך הוא שעה אחת כש-PITR מושבת, ושבעה ימים כש-PITR מופעל.
- זמן הגרסה המוקדמת ביותר: חותמת הזמן המוקדמת ביותר שבה אפשר לקרוא גרסאות ישנות יותר של הנתונים בחלון ה-PITR. הערך הזה מתעדכן כל הזמן על ידי Firestore עם תאימות ל-MongoDB, והוא מתיישן ברגע ששולחים שאילתה לגביו. אם אתם משתמשים בערך הזה כדי לשחזר נתונים, חשוב להביא בחשבון את הזמן שעובר מהרגע שבו נשלחת השאילתה על הערך ועד לרגע שבו אתם מתחילים את השחזור.
- שחזור מערכת מנקודה מסוימת בזמן (PITR): אם PITR מופעל, מוצג הערך
Enabled. אם PITR מושבת, יופיע הערךDisabled.
gcloud
מריצים את הפקודה gcloud firestore databases describe באופן הבא:
gcloud firestore databases describe --database=DATABASE_ID
מחליפים את DATABASE_ID במזהה מסד הנתונים או ב-'(default)'.
הנה הפלט:
appEngineIntegrationMode: ENABLED
concurrencyMode: PESSIMISTIC
createTime: '2021-03-24T17:02:35.234Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-06-12T16:17:25.222474Z'
etag: IIDayqOevv8CMNTvyNK4uv8C
keyPrefix: s
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
כאשר:
-
earliestVersionTime: חותמת הזמן של נתוני ה-PITR המוקדמים ביותר שנשמרו. -
pointInTimeRecoveryEnablement: מוצג הערךPOINT_IN_TIME_RECOVERY_ENABLEDאם PITR מופעל. אם האפשרות PITR מושבתת, יוצג הערךPOINT_IN_TIME_RECOVERY_DISABLEDאו שהשדהpointInTimeRecoveryEnablementלא יוצג. -
versionRetentionPeriod: משך הזמן שבו נתוני ה-PITR נשמרים, באלפיות השנייה. הערך יכול להיות שעה אחת כש-PITR מושבת, או שבעה ימים כש-PITR מופעל.
קריאת נתוני PITR
אפשר לקרוא נתוני PITR באמצעות סשן של תמונת מצב במנהלי התקנים שונים של לקוחות MongoDB. מגדירים snapshotTimestamp בסשן. בדוגמה הבאה נעשה שימוש במנהל ההתקן של MongoDB Java, ותכונה דומה זמינה במנהלי התקנים אחרים:
Java
var session =
mongoClient.startSession(ClientSessionOptions.builder().snapshot(true).build());
session.setSnapshotTimestamp(new BsonTimestamp(seconds, nanos));
// run a find query with PITR timestamp
collection.find(session, <filter>).toList();
// run an aggregation query pipeline with PITR timestamp
collection.aggregate(session, <aggregation pipeline stages>).toList();
// run distinct command with PITR timestamp
collection.distinct(session, <field>, <return value type class>).toList();
ב-MongoDB, הערך BsonTimestamp הוא סוג BSON פנימי בלבד של MongoDB בגודל 64 ביט. 32 הביטים הראשונים מייצגים את השניות של חותמת הזמן של התקופה, ו-32 הביטים האחרונים מייצגים ספירת פעולות סדורות בתוך אשכול MongoDB.
ב-Firestore עם תאימות ל-MongoDB, חותמת הזמן של קובץ snapshot עדיין משתמשת בסוג הערך BsonTimestamp, אבל מפרשת את 32 הביטים הראשונים כשניות של חותמת זמן של תקופה, ואת 32 הביטים האחרונים כננו-שניות בתוך השנייה. שימו לב שלא כל תמונות המצב של PITR בננו-שניות נתמכות. אפשר להשתמש בחותמות זמן של מיקרו-שניות בשעה האחרונה, ובחותמות זמן של דקות שלמות ב-7 הימים האחרונים. בסקירה הכללית של שחזור מערכת מנקודה מסוימת בזמן (PITR) מפורט אילו חותמות זמן של קריאה נתמכות.
שכפול ממסד נתונים
אתם יכולים לשכפל מסד נתונים קיים עם חותמת זמן נבחרת למסד נתונים חדש:
מסד הנתונים המשוכפל הוא מסד נתונים חדש שייווצר באותו מיקום של מסד הנתונים המקורי.
כדי ליצור שכפול, Firestore משתמש בנתוני שחזור מערכת מנקודה מסוימת בזמן (PITR) של מסד הנתונים המקורי. מסד הנתונים המשוכפל כולל את כל הנתונים והאינדקסים.
כברירת מחדל, מסד הנתונים המשוכפל יוצפן באותו אופן כמו מסד הנתונים המקורי, באמצעות הצפנת ברירת המחדל של Google או הצפנת CMEK. אתם יכולים לציין סוג הצפנה אחר או להשתמש במפתח אחר להצפנת CMEK.
חותמת הזמן היא ברמת פירוט של דקה אחת, ומציינת נקודת זמן בעבר, בתקופה שמוגדרת על ידי חלון ה-PITR:
- אם התכונה PITR מופעלת במסד הנתונים, אתם יכולים לבחור כל דקה ב-7 הימים האחרונים (או פחות, אם התכונה PITR הופעלה לפני פחות מ-7 ימים).
- אם PITR לא מופעל, אתם יכולים לבחור כל דקה בשעה האחרונה.
- בתיאור של מסד הנתונים אפשר לבדוק מהי חותמת הזמן המוקדמת ביותר שאפשר לבחור.
המסוף
נכנסים לדף Databases במסוף Google Cloud .
לוחצים על View more בשורה של מסד הנתונים שרוצים לשכפל. לוחצים על שכפול. מופיעה תיבת הדו-שיח Create a clone.
בתיבת הדו-שיח Create a clone, מזינים את הפרמטרים לשיבוט מסד הנתונים:
בשדה Give the clone an ID, מזינים מזהה מסד נתונים למסד הנתונים המשוכפל החדש. מזהה מסד הנתונים הזה לא יכול להיות משויך למסד נתונים קיים.
בשדה Clone from, בוחרים נקודת זמן שרוצים להשתמש בה לשכפול. הזמן שנבחר תואם לחותמת זמן של PITR, ברמת פירוט של דקות.
לוחצים על Create clone.
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' \
--tags=key1=value1,key2=value2
כברירת מחדל, למסד הנתונים המשוכפל תהיה אותה הגדרת הצפנה כמו למסד הנתונים המקורי. כדי לשנות את הגדרות ההצפנה, משתמשים בארגומנט --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.
בדוגמה הבאה מוסבר איך להגדיר הצפנת CMEK למסד הנתונים המשוכפל:
firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION
ייצוא וייבוא מנתוני PITR
אפשר לייצא את מסד הנתונים ל-Cloud Storage מנתוני PITR באמצעות הפקודה gcloud firestore export. אפשר לייצא נתוני PITR שבהם חותמת הזמן היא חותמת זמן של דקה שלמה בשבעת הימים האחרונים, אבל לא לפני earliestVersionTime. אם הנתונים כבר לא קיימים בחותמת הזמן שצוינה, פעולת הייצוא תיכשל.
פעולת הייצוא של PITR תומכת בכל המסננים, כולל ייצוא של כל המסמכים וייצוא של אוספים ספציפיים.
מייצאים את מסד הנתונים ומציינים את הפרמטר
snapshot-timeלחותמת הזמן שנבחרה לשחזור.gcloud
מריצים את הפקודה הבאה כדי לייצא את מסד הנתונים לקטגוריה.
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDSמחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME_PATH– קטגוריה תקינה של Cloud Storage עם קידומת נתיב אופציונלית שבה מאוחסנים קובצי הייצוא. -
PITR_TIMESTAMP– חותמת זמן של PITR ברמת פירוט של דקות, לדוגמה2023-05-26T10:20:00.00Zאו2023-10-19T10:30:00.00-07:00. -
COLLECTION_IDS– רשימה של מזהי אוספים או מזהי קבוצות של אוספים, לדוגמה:'specific-collection-group1','specific-collection-group2'.
לפני שמייצאים נתוני PITR, חשוב לשים לב לנקודות הבאות:
- מפעילים את PITR במסד הנתונים. אם התכונה PITR מושבתת, הייצוא של חותמת זמן של תמונת מצב נכשל, גם אם חותמות הזמן הן מהשעה האחרונה אחרי
earliestVersionTime. פעולת הייצוא מחזירה את השגיאהPoint-in-Time Recovery must be enabled in order to execute exports at a snapshot timestamp. - צריך לציין את חותמת הזמן בפורמט RFC 3339.
לדוגמה,
2023-05-26T10:20:00.00Zאו2023-10-19T10:30:00.00-07:00. - חשוב לוודא שחותמת הזמן שציינתם היא חותמת זמן של דקה שלמה בשבעת הימים האחרונים, אבל לא לפני
earliestVersionTime. אם הנתונים כבר לא קיימים בחותמת הזמן שצוינה, נוצרת שגיאה. חותמת הזמן חייבת להיות דקה שלמה, גם אם השעה שצוינה היא בשעה האחרונה. - לא תחויבו על ייצוא PITR שנכשל.
-
לייבא למסד נתונים.
מייבאים את מסד הנתונים שייצאתם לפי השלבים שמפורטים בקטע ייבוא כל המסמכים. אם מסמך כלשהו כבר קיים במסד הנתונים, הוא יוחלף.