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

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

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

अनुमतियां

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

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

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

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

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

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

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

पीआईटीआर की सुविधा चालू करना

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

अपने डेटाबेस के लिए PITR की सुविधा चालू करने के लिए:

कंसोल

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

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

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

  3. नेविगेशन मेन्यू में, Disaster Recovery पर क्लिक करें.

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

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

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

पीआईटीआर की सुविधा बंद करने के लिए, Google Cloud Console में मौजूद Disaster Recovery पेज पर जाकर, Enable point-in-time recovery चेकबॉक्स से सही का निशान हटाएं.

gcloud

डेटाबेस बनाते समय, gcloud firestore databases create और --enable-ptir कमांड का इस्तेमाल करके, PITR की सुविधा चालू करें. इसके लिए, यह तरीका अपनाएं:

gcloud firestore databases create\
  --location=LOCATION\
  --database=DATABASE_ID\
  --type=firestore-native\
  --enable-pitr

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

  • LOCATION - वह जगह जहां आपको डेटाबेस बनाना है.
  • DATABASE_ID - इसे डेटाबेस आईडी पर सेट किया जाता है.

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

gcloud firestore databases update\
  --database=DATABASE_ID\
  --no-enable-pitr

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

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

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

कंसोल

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

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

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

  3. नेविगेशन मेन्यू में, Disaster Recovery पर क्लिक करें.

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

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

पीआईटीआर डेटा को पढ़ने की अनुमति

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

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

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

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

Apache Beam

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

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

Java

एक साथ कई फ़ाइलों को पढ़ने या लिखने के लिए, Dataflow पाइपलाइन के उदाहरण कोड के साथ इस कोड का इस्तेमाल किया जा सकता है. इस उदाहरण में, PITR रीड के लिए 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 कमांड का इस्तेमाल करके, PITR डेटा से अपने डेटाबेस को Cloud Storage में एक्सपोर्ट किया जा सकता है. ऐसे PITR डेटा को एक्सपोर्ट किया जा सकता है जिसका टाइमस्टैंप, पिछले सात दिनों में एक मिनट का पूरा टाइमस्टैंप हो. हालांकि, यह 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'.

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

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

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