עבודה עם התאוששות בנקודת זמן (PITR)

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

להבנת מושגי PITR, ראה התאוששות נקודתית בזמן .

הרשאות

כדי לקבל את ההרשאות הדרושות לך לניהול הגדרות PITR, בקש ממנהל המערכת להעניק לך את תפקידי IAM הבאים בפרויקט שבו ברצונך להפעיל את PITR:

  • בעלים של מאגר נתונים בענן ( roles/datastore.owner )

עבור תפקידים מותאמים אישית, ודא שההרשאות הבאות ניתנות:

  • כדי להפעיל 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

לפני שאתה מתחיל

שים לב לנקודות הבאות לפני שתתחיל להשתמש ב-PITR:

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

אפשר PITR

לפני השימוש ב-PITR, הפעל חיוב עבור פרויקט Google Cloud שלך . רק פרויקטים של Google Cloud עם חיוב מופעל יכולים להשתמש בפונקציונליות PITR.

כדי להפעיל PITR עבור מסד הנתונים שלך:

לְנַחֵם

  1. ב-Google Cloud Platform Console, עבור לדף מסדי נתונים .

    עבור אל מסדי נתונים

  2. בחר את מסד הנתונים הנדרש מרשימת מסדי הנתונים.

  3. בתפריט הניווט, לחץ על התאוששות מאסון .

  4. לחץ על ערוך כדי לערוך את ההגדרות.

  5. בחר בתיבת הסימון אפשר שחזור נקודת זמן ולאחר מכן לחץ על שמור .

הפעלת PITR תגרור עלויות אחסון. ראה תמחור למידע נוסף.

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

gcloud

הפעל את PITR במהלך יצירת מסד הנתונים עם הפקודה gcloud firestore databases create באופן הבא:

gcloud firestore databases create\
  --location=LOCATION\
  [--database=DATABASE_ID; default="(default)"]\
  [--type=TYPE; default="firestore-native"]\
  --enable-pitr

החלף את הערכים באופן הבא:

  • Location - מיקום שבו אתה רוצה ליצור את מסד הנתונים שלך.
  • DATABASE_ID - מוגדר למזהה מסד הנתונים או (ברירת מחדל).
  • TYPE - מוגדר ל-firestore-native.

אתה יכול להשבית את PITR באמצעות פקודת gcloud firestore databases update באופן הבא:

gcloud firestore databases update\
  [--database=DATABASE_ID; default="(default)"]\
  --no-enable-pitr

החלף את הערכים באופן הבא:

  • DATABASE_ID - מוגדר למזהה מסד הנתונים או (ברירת מחדל).

קבל את תקופת השמירה וזמן הגרסה המוקדם ביותר

לְנַחֵם

  1. ב-Google Cloud Platform Console, עבור לדף מסדי נתונים .

    עבור אל מסדי נתונים

  2. בחר את מסד הנתונים הנדרש מרשימת מסדי הנתונים.

  3. בתפריט הניווט, לחץ על התאוששות מאסון .

  4. בקטע הגדרות , שים לב לתקופת השמירה ולזמן הגרסה המוקדם ביותר .

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

gcloud

הפעל את הפקודה של gcloud firestore 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/(default)
    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 באמצעות ספריות הלקוח, שיטות REST API או מחבר FirestoreIO Apache Beam.

ספריות לקוחות

Java

עליך להשתמש בטרנזקציית ReadOnly כדי לקרוא נתוני PITR. אינך יכול לציין ישירות readTime בקריאה. ראה עסקאות וכתיבת אצווה למידע נוסף.

  Firestore firestore = …

  TransactionOptions options =
          TransactionOptions.createReadOnlyOptionsBuilder()
              .setReadTime(
                  com.google.protobuf.Timestamp.newBuilder()
                      .setSeconds(1684098540L)
                      .setNanos(0))
              .build();

  ApiFuture<Void> futureTransaction = firestore.runTransaction(
              transaction -> {
                // Does a snapshot read document lookup
                final DocumentSnapshot documentResult =
                    transaction.get(documentReference).get();

                // Executes a snapshot read query
                final QuerySnapshot queryResult =
                  transaction.get(query).get();
              },
              options);

  // Blocks on transaction to complete
  futureTransaction.get();

צוֹמֶת

עליך להשתמש בטרנזקציה ReadOnly כדי לקרוא נתוני PITR. אינך יכול לציין ישירות readTime בקריאה. ראה עסקאות וכתיבת אצווה למידע נוסף.

  const documentSnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(documentRef),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);

  const querySnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(query),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
  )

REST API

קריאות PITR נתמכות בכל שיטות הקריאה של Cloud Firestore, שהן get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery ו- partitionQuery .

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

  1. בבקשת שיטת הקריאה שלך, העבר את ערך readTime כחותמת זמן PITR נתמכת בשיטת readOptions . חותמת זמן של PITR יכולה להיות חותמת זמן דיוק של מיקרו-שנייה במהלך השעה האחרונה או חותמת זמן של דקה שלמה מעבר לשעה האחרונה, אך לא מוקדם יותר מה- earliestVersionTime .

  2. השתמש בפרמטר readTime יחד עם שיטת BeginTransaction כחלק מעסקת קריאה ReadOnly עבור קריאות PITR מרובות.

אפאצ'י בים

השתמש במחבר Cloud FirestoreIO Apache Beam כדי לקרוא או לכתוב מסמכים במסד נתונים של Cloud Firestore בקנה מידה גדול עם Dataflow.

קריאות PITR נתמכות בשיטת הקריאה הבאה של מחבר Cloud FirestoreIO. שיטות קריאה אלה תומכות בשיטת withReadTime(@Nullable Instant readTime) שבה אתה יכול להשתמש עבור קריאות PITR:

Java

ניתן להשתמש בקוד הבא עם קוד הצינור של Dataflow לדוגמה עבור פעולות קריאה או כתיבה בכמות גדולה. הדוגמה משתמשת בשיטת withReadTime(@Nullable Instant readTime) עבור קריאות PITR.

  Instant readTime = Instant.ofEpochSecond(1684098540L);

  PCollection<Document> documents =
      pipeline
          .apply(Create.of(collectionId))
          .apply(
              new FilterDocumentsQuery(
                  firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
          .apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
  ...

לרשימה מלאה של דוגמאות readTime בצנרת של Dataflow, עיין במאגר Github .

ייצוא ויבוא מנתוני PITR

אתה יכול לייצא את מסד הנתונים שלך ל-Cloud Storage מנתוני PITR באמצעות פקודת gcloud firestore export . אתה יכול לייצא נתוני PITR שבהם חותמת הזמן היא חותמת זמן של דקה שלמה במהלך שבעת הימים האחרונים, אך לא מוקדם יותר מ- earliestVersionTime . אם הנתונים אינם קיימים עוד בחותמת הזמן שצוינה, פעולת הייצוא נכשלת.

פעולת הייצוא PITR תומכת בכל המסננים, כולל ייצוא של כל המסמכים ויצוא של אוספים ספציפיים.

  1. ייצא את מסד הנתונים תוך ציון פרמטר snapshot-time לחותמת הזמן הרצויה לשחזור.

    gcloud

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

    gcloud firestore export gs://[BUCKET_NAME_PATH] \
        --snapshot-time=[PITR_TIMESTAMP] \
        --collection-ids=[COLLECTION_IDS] \
        --namespace-ids=[NAMESPACE_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' .
    • NAMESPACE_IDS - רשימה של מזהי מרחב שמות, לדוגמה- 'customer' , 'orders' .

    שימו לב לנקודות הבאות לפני ייצוא נתוני PITR:

    • ציין את חותמת הזמן בפורמט RFC 3339 . לדוגמה, 2023-05-26T10:20:00.00Z או 2023-10-19T10:30:00.00-07:00 .
    • ודא שחותמת הזמן שאתה מציין היא חותמת זמן של דקה שלמה במהלך שבעת הימים האחרונים, אך לא מוקדם יותר מה- earliestVersionTime . אם הנתונים אינם קיימים עוד בחותמת הזמן שצוינה, נוצרת שגיאה. חותמת הזמן חייבת להיות דקה שלמה, גם אם השעה שצוינה היא בשעה האחרונה.
    • אינך מחויב עבור ייצוא PITR כושל.
  2. ייבוא ​​למסד נתונים.

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