עבודה עם שחזור מערכת מנקודה מסוימת בזמן (PITR)
בדף הזה מוסבר איך להשתמש בשחזור לנקודת זמן (PITR) כדי לשמור ולשחזר נתונים ב-Firestore עם תאימות ל-MongoDB.
כדי להבין את המושגים שקשורים ל-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, חשוב לשים לב לנקודות הבאות:
- אי אפשר להתחיל לקרוא מנקודה בזמן שהייתה לפני שבעה ימים מיד אחרי שמפעילים את PITR.
- אם רוצים להפעיל PITR כשיוצרים מסד נתונים, צריך להשתמש בפקודה
gcloud firestore databases create. אי אפשר להפעיל PITR בזמן יצירת מסד נתונים באמצעות מסוף Google Cloud . - Firestore עם תאימות ל-MongoDB מתחיל לשמור גרסאות מהנקודה קדימה אחרי שמפעילים PITR.
- אחרי שמשביתים את PITR, אי אפשר לקרוא את הנתונים בחלון PITR.
- אם מפעילים מחדש את PITR מיד אחרי ההשבתה, הנתונים הקודמים של PITR כבר לא זמינים. נתונים שנוצרו לפני השבתת PITR יימחקו אחרי תאריך התפוגה של PITR.
- אם מחקתם בטעות נתונים בשעה האחרונה והתכונה PITR מושבתת, אתם יכולים לשחזר את הנתונים על ידי הפעלת התכונה PITR תוך שעה מהמחיקה.
- כל קריאה שמתבצעת בנתוני PITR שתוקף שלהם פג נכשלת.
הפעלת PITR
לפני שמשתמשים ב-PITR, מפעילים את החיוב בפרויקט ב-Google Cloud. אפשר להשתמש בפונקציונליות של PITR רק בפרויקטים ב-Google Cloud שבהם החיוב מופעל.
כדי להפעיל PITR במסד הנתונים:
המסוף
נכנסים לדף Databases במסוף Google Cloud .
בוחרים את מסד הנתונים הרצוי מתוך רשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Disaster Recovery (התאוששות מאסון).
לוחצים על עריכה כדי לערוך את ההגדרות.
מסמנים את התיבה הפעלת שחזור מערכת מנקודה מסוימת בזמן ולוחצים על שמירה.
הפעלת PITR כרוכה בעלויות אחסון. מידע נוסף מופיע במאמר בנושא תמחור.
כדי להשבית את PITR, מבטלים את הסימון בתיבת הסימון Enable point-in-time recovery בדף Disaster Recovery במסוף Google Cloud .
gcloud
כדי להפעיל PITR במהלך יצירת מסד הנתונים, משתמשים בפקודה --enable-ptir ובפקודה gcloud firestore databases create באופן הבא:
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 .
בוחרים את מסד הנתונים הרצוי מתוך רשימת מסדי הנתונים.
בתפריט הניווט, לוחצים על Disaster Recovery (התאוששות מאסון).
בקטע הגדרות, רושמים את תקופת השמירה ואת השעה של הגרסה הכי מוקדמת.
- תקופת השמירה: התקופה שבה Firestore עם תאימות ל-MongoDB שומר את כל הגרסאות של הנתונים במסד הנתונים. הערך הוא שעה אחת כשה-PITR מושבת, ושבעה ימים כשה-PITR מופעל.
- הזמן של הגרסה המוקדמת ביותר: חותמת הזמן המוקדמת ביותר שבה אפשר לקרוא גרסאות ישנות יותר של הנתונים בחלון PITR. הערך הזה מתעדכן באופן רציף על ידי Firestore עם תאימות ל-MongoDB, והוא הופך להיות לא עדכני ברגע שמבצעים עליו שאילתה. אם אתם משתמשים בערך הזה כדי לשחזר נתונים, חשוב לקחת בחשבון את הזמן שחלף מהרגע שבו הערך נשאל ועד לרגע שבו התחלתם את השחזור.
- שחזור מנקודה מסוימת בזמן: מוצג
Enabledאם האפשרות PITR מופעלת. אם 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
where,
-
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 הביטים הראשונים מייצגים את חותמת הזמן של התקופה (epoch) בשניות, ו-32 הביטים האחרונים מייצגים את מספר הפעולות הסידורי באשכול MongoDB.
ב-Firestore עם תאימות ל-MongoDB, חותמת הזמן של התמונה, שעדיין משתמשת בסוג ערך BsonTimestamp, מפרשת את 32 הביטים הראשונים כשניות של חותמת זמן של תקופת ה-Epoch, אבל את 32 הביטים האחרונים כננו-שניות בתוך השנייה. הערה
לא כל התמונות של PITR ברמת ננו-שנייה נתמכות. מותרות חותמות זמן במיקרו-שניות בשעה האחרונה, ומותרות חותמות זמן של דקות שלמות מ-7 הימים האחרונים. במאמר סקירה כללית על שחזור מערכת מנקודה מסוימת בזמן (PITR) מפורטות חותמות הזמן של הקריאה שנתמכות.
שכפול ממסד נתונים
אפשר לשכפל מסד נתונים קיים בנקודת זמן נבחרת למסד נתונים חדש:
מסד הנתונים המשוכפל הוא מסד נתונים חדש שייווצר באותו מיקום כמו מסד הנתונים המקורי.
כדי ליצור שיבוט, Firestore משתמש בנתוני שחזור לנקודת זמן (PITR) של מסד הנתונים המקורי. מסד הנתונים המשוכפל כולל את כל הנתונים והאינדקסים.
כברירת מחדל, מסד הנתונים המשוכפל יוצפן באותו אופן שבו מוצפן מסד הנתונים המקורי, באמצעות ההצפנה שמוגדרת כברירת מחדל ב-Google או באמצעות הצפנת CMEK. אפשר לציין סוג הצפנה אחר או להשתמש במפתח אחר להצפנת CMEK.
חותמת הזמן היא ברמת גרנולריות של דקה אחת ומציינת נקודת זמן בעבר, בתקופה שמוגדרת על ידי חלון ה-PITR:
- אם PITR מופעל במסד הנתונים, אפשר לבחור כל דקה ב-7 הימים האחרונים (או פחות, אם PITR הופעל לפני פחות מ-7 ימים).
- אם PITR לא מופעל, אפשר לבחור כל דקה בשעה האחרונה.
- אפשר לבדוק את חותמת הזמן המוקדמת ביותר שאפשר לבחור בתיאור של מסד הנתונים.
המסוף
נכנסים לדף Databases במסוף Google Cloud .
לוחצים על View more בשורה של מסד הנתונים שרוצים לשכפל. לוחצים על Clone (שיבוט). מופיעה תיבת הדו-שיח יצירת שיבוט.
בתיבת הדו-שיח יצירת שיבוט, מציינים פרמטרים לשיבוט של מסד הנתונים:
בשדה Give the clone an ID (הקצאת מזהה לשיבוט), מזינים מזהה מסד נתונים למסד נתונים משובט חדש. מזהה מסד הנתונים הזה לא יכול להיות משויך למסד נתונים קיים.
בשדה Clone from, בוחרים נקודת זמן לשיבוט. הזמן שנבחר תואם לחותמת זמן של PITR, ברמת גרנולריות של דקה.
לוחצים על יצירת שיבוט.
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 עם חותמת זמן של דקה שלמה ב-7 הימים האחרונים, אבל לא לפני 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, חשוב לשים לב לנקודות הבאות:
- מציינים את חותמת הזמן בפורמט RFC 3339.
לדוגמה,
2023-05-26T10:20:00.00Zאו2023-10-19T10:30:00.00-07:00. - חשוב לוודא שחותמת הזמן שציינתם היא חותמת זמן של דקה שלמה
במהלך שבעת הימים האחרונים, אבל לא לפני
earliestVersionTime. אם הנתונים כבר לא קיימים בחותמת הזמן שצוינה, נוצרת שגיאה. חותמת הזמן חייבת להיות דקה שלמה, גם אם השעה שצוינה היא בשעה האחרונה. - לא נחייב אתכם על ייצוא PITR שנכשל.
-
ייבוא למסד נתונים.
כדי לייבא את מסד הנתונים שייצאתם, פועלים לפי השלבים במאמר ייבוא כל המסמכים. אם מסמך כלשהו כבר קיים במסד הנתונים, הוא יוחלף.