पॉइंट-इन-टाइम रिकवरी (पीआईटीआर) की मदद से काम करना

इस पेज पर, Cloud Firestore में डेटा को सेव रखने और उसे वापस पाने के लिए, किसी खास समय का डेटा वापस लाने की सुविधा (पीआईटीआर) का इस्तेमाल करने का तरीका बताया गया है.

पीआईटीआर के कॉन्सेप्ट को समझने के लिए, पिछले समय की रिकवरी देखें.

अनुमतियां

पीआईटीआर की सेटिंग मैनेज करने के लिए ज़रूरी अनुमतियां पाने के लिए, अपने एडमिन से उस प्रोजेक्ट पर ये आईएएम भूमिकाएं देने के लिए कहें जहां आपको पीआईटीआर चालू करना है:

  • Cloud Datastore का मालिक (roles/datastore.owner)

पसंद के मुताबिक बनाई गई भूमिकाओं के लिए, पक्का करें कि ये अनुमतियां दी गई हों:

  • डेटाबेस बनाते समय, पीआईटीआर चालू करने के लिए: datastore.databases.create
  • मौजूदा डेटाबेस पर पीआईटीआर सेटिंग अपडेट करने के लिए: datastore.databases.update,datastore.databases.list
  • पीआईटीआर डेटा से डेटा पढ़ने के लिए: datastore.databases.get,datastore.entities.get,datastore.entities.list
  • पीआईटीआर डेटा एक्सपोर्ट करने के लिए: datastore.databases.export
  • पीआईटीआर डेटा इंपोर्ट करने के लिए: datastore.databases.import

शुरू करने से पहले

पीआईटीआर का इस्तेमाल शुरू करने से पहले, इन बातों का ध्यान रखें:

  • पीआईटीआर चालू करने के तुरंत बाद, पिछले सात दिनों का डेटा नहीं पढ़ा जा सकता.
  • डेटाबेस बनाते समय पीआईटीआर चालू करने के लिए, आपको gcloud firestore databases create कमांड का इस्तेमाल करना होगा. Google Cloud कंसोल का इस्तेमाल करके डेटाबेस बनाते समय, पीआईटीआर की सुविधा चालू नहीं की जा सकती.
  • PITR चालू करने के बाद, Cloud Firestore उस समय से वर्शन सेव करना शुरू कर देता है.
  • पीआईटीआर की सुविधा बंद करने के बाद, पीआईटीआर विंडो में पीआईटीआर डेटा नहीं पढ़ा जा सकता.
  • पीआईटीआर की सुविधा बंद करने के तुरंत बाद उसे फिर से चालू करने पर, पीआईटीआर का पुराना डेटा उपलब्ध नहीं रहेगा. पीआईटीआर बंद करने से पहले बनाया गया कोई भी पीआईटीआर डेटा, पीआईटीआर की समयसीमा खत्म होने के बाद मिटा दिया जाएगा.
  • अगर आपने पिछले एक घंटे में गलती से डेटा मिटाया है और पीआईटीआर की सुविधा बंद है, तो डेटा को वापस पाया जा सकता है. इसके लिए, डेटा मिटाने के एक घंटे के अंदर पीआईटीआर की सुविधा चालू करें.
  • एक्सपायर हो चुके पीआईटीआर डेटा को पढ़ने की कोशिश करने पर, कोई भी डेटा नहीं मिलता.

पीआईटीआर चालू करना

पीआईटीआर का इस्तेमाल करने से पहले, अपने Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें. पीआईटीआर की सुविधा का इस्तेमाल सिर्फ़ उन Google Cloud प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.

अपने डेटाबेस के लिए पीआईटीआर चालू करने के लिए:

कंसोल

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत है.

  3. नेविगेशन मेन्यू में, आपदा से जुड़ी रिकवरी पर क्लिक करें.

  4. सेटिंग में बदलाव करने के लिए, बदलाव करें पर क्लिक करें.

  5. किसी खास समय की बैकअप कॉपी को वापस लाने की सुविधा चालू करें चेक बॉक्स को चुनें. इसके बाद, सेव करें पर क्लिक करें.

पीआईटीआर की सुविधा चालू करने पर, स्टोरेज के लिए शुल्क देना होगा. ज़्यादा जानकारी के लिए, कीमत देखें.

पीआईटीआर को बंद करने के लिए, Google Cloud कंसोल में आपदा से जुड़ी रिकवरी के पेज से, किसी खास समय की डेटा रिकवरी की सुविधा चालू करें चेक बॉक्स से सही का निशान हटाएं.

gcloud

डेटाबेस बनाते समय, 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 पर सेट करें.

gcloud firestore databases update कमांड का इस्तेमाल करके, पीआईटीआर को इस तरह बंद किया जा सकता है:

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

वैल्यू को इस तरह बदलें:

  • DATABASE_ID - डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.

डेटा के रखरखाव की अवधि और सबसे पुराने वर्शन का समय पाना

कंसोल

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत है.

  3. नेविगेशन मेन्यू में, आपदा से जुड़ी रिकवरी पर क्लिक करें.

  4. सेटिंग सेक्शन में, डेटा सेव रखने की अवधि और सबसे पुराने वर्शन का समय देखें.

    • डेटा के रखरखाव की अवधि: वह अवधि जिसमें Cloud Firestore, डेटाबेस के लिए डेटा के सभी वर्शन को सेव रखता है. पीआईटीआर बंद होने पर, इसकी वैल्यू एक घंटा होती है. वहीं, पीआईटीआर चालू होने पर, इसकी वैल्यू सात दिन होती है.
    • सबसे पुराने वर्शन का समय: वह सबसे पुराना टाइमस्टैंप जब पीआईटीआर विंडो में डेटा के पुराने वर्शन पढ़े जा सकते हैं. Cloud Firestore इस वैल्यू को लगातार अपडेट करता रहता है. जब भी इसकी क्वेरी की जाती है, तब यह पुरानी हो जाती है. अगर डेटा को वापस पाने के लिए इस वैल्यू का इस्तेमाल किया जा रहा है, तो वैल्यू के लिए क्वेरी करने के बाद से, डेटा वापस पाने की प्रोसेस शुरू करने तक के समय का ध्यान रखें.
    • पिछले समय की रिकवरी: अगर पीआईटीआर चालू है, तो Enabled दिखता है. अगर पीआईटीआर बंद है, तो आपको 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: सेव किए गए सबसे पुराने पीआईटीआर डेटा का टाइमस्टैंप.
  • pointInTimeRecoveryEnablement: अगर पीआईटीआर चालू है, तो POINT_IN_TIME_RECOVERY_ENABLED दिखाता है. अगर पीआईटीआर बंद है, तो आपको POINT_IN_TIME_RECOVERY_DISABLED दिखेगा या हो सकता है कि pointInTimeRecoveryEnablement फ़ील्ड न दिखे.
  • versionRetentionPeriod: वह समयावधि जिसके लिए पीआईटीआर डेटा को सेव करके रखा जाता है. इसे मिलीसेकंड में दिखाया जाता है. पीआईटीआर की सुविधा बंद होने पर, इसकी वैल्यू एक घंटा हो सकती है. वहीं, पीआईटीआर की सुविधा चालू होने पर, इसकी वैल्यू सात दिन हो सकती है.

पीआईटीआर डेटा पढ़ना

क्लाइंट लाइब्रेरी, REST API के तरीकों या FirestoreIO Apache Beam कनेक्टर का इस्तेमाल करके, पीआईटीआर डेटा पढ़ा जा सकता है.

क्लाइंट लाइब्रेरी

Java

पीआईटीआर डेटा पढ़ने के लिए, आपको ReadOnly लेन-देन का इस्तेमाल करना होगा. रीड में सीधे तौर पर 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 लेन-देन का इस्तेमाल करना होगा. रीड में सीधे तौर पर 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

पीआईटीआर रीड, Cloud Firestore के सभी रीड मैथड में काम करती हैं. ये मैथड ये हैं: get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery, और partitionQuery.

REST तरीकों का इस्तेमाल करके डेटा पढ़ने के लिए, इनमें से कोई एक विकल्प आज़माएं:

  1. डेटा पढ़ने के तरीके के अनुरोध में, readOptions तरीके में readTime वैल्यू को इस्तेमाल किए जा सकने वाले पीआईटीआर टाइमस्टैंप के तौर पर पास करें. पीआईटीआर टाइमस्टैंप, पिछले एक घंटे के अंदर का माइक्रोसेकंड सटीक टाइमस्टैंप या पिछले एक घंटे के बाद का पूरा मिनट टाइमस्टैंप हो सकता है. हालांकि, यह earliestVersionTime से पहले का नहीं होना चाहिए.

  2. एक से ज़्यादा पीआईटीआर रीड के लिए, ReadOnly ट्रांज़ैक्शन के हिस्से के तौर पर, BeginTransaction तरीके के साथ readTime पैरामीटर का इस्तेमाल करें.

Apache Beam

Dataflow की मदद से, बड़े पैमाने पर Cloud Firestore डेटाबेस में दस्तावेज़ों को पढ़ने या लिखने के लिए, Cloud FirestoreIO Apache Beam कनेक्टर का इस्तेमाल करें.

Cloud FirestoreIO कनेक्टर के इन तरीकों से, पीआईटीआर रीड की सुविधा का इस्तेमाल किया जा सकता है. डेटा पढ़ने के ये तरीके, withReadTime(@Nullable Instant readTime) तरीके के साथ काम करते हैं. इस तरीके का इस्तेमाल, पीआईटीआर के ज़रिए डेटा पढ़ने के लिए किया जा सकता है:

Java

एक साथ कई फ़ाइलें पढ़ने या लिखने के लिए, नीचे दिए गए कोड का इस्तेमाल उदाहरण के तौर पर दिए गए Dataflow पाइपलाइन कोड के साथ किया जा सकता है. इस उदाहरण में, पीआईटीआर रीड के लिए withReadTime(@Nullable Instant readTime) तरीके का इस्तेमाल किया गया है.

  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())
  ...

Dataflow पाइपलाइन में readTime के उदाहरणों की पूरी सूची के लिए, GitHub का डेटा स्टोर करने की जगह देखें.

पीआईटीआर डेटा से एक्सपोर्ट और इंपोर्ट करना

gcloud firestore export कमांड का इस्तेमाल करके, अपने डेटाबेस को पीआईटीआर डेटा से Cloud Storage में एक्सपोर्ट किया जा सकता है. पीआईटीआर का वह डेटा एक्सपोर्ट किया जा सकता है जिसका टाइमस्टैंप, पिछले सात दिनों में पूरे मिनट का हो. हालांकि, यह earliestVersionTime से पहले का नहीं होना चाहिए. अगर तय किए गए टाइमस्टैंप पर डेटा मौजूद नहीं है, तो एक्सपोर्ट की प्रोसेस पूरी नहीं हो पाती.

पीआईटीआर एक्सपोर्ट ऑपरेशन में सभी फ़िल्टर काम करते हैं. इनमें सभी दस्तावेज़ों और खास कलेक्शन को एक्सपोर्ट करना शामिल है.

  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'.

    पीआईटीआर डेटा एक्सपोर्ट करने से पहले, इन बातों का ध्यान रखें:

    • टाइमस्टैंप को आरएफ़सी 3339 फ़ॉर्मैट में डालें. उदाहरण के लिए, 2023-05-26T10:20:00.00Z या 2023-10-19T10:30:00.00-07:00.
    • पक्का करें कि आपने जो टाइमस्टैंप दिया है वह पिछले सात दिनों के अंदर का हो और earliestVersionTime से पहले का न हो. अगर तय किए गए टाइमस्टैंप पर डेटा मौजूद नहीं है, तो गड़बड़ी का मैसेज जनरेट होता है. टाइमस्टैंप एक पूरा मिनट का होना चाहिए. भले ही, तय किया गया समय पिछले एक घंटे के अंदर का हो.
    • PITR एक्सपोर्ट पूरा न होने पर, आपसे कोई शुल्क नहीं लिया जाता.
  2. डेटाबेस में इंपोर्ट करें.

    एक्सपोर्ट किया गया डेटाबेस इंपोर्ट करने के लिए, सभी दस्तावेज़ इंपोर्ट करें में दिया गया तरीका अपनाएं. अगर आपके डेटाबेस में कोई दस्तावेज़ पहले से मौजूद है, तो उसे बदल दिया जाएगा.