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

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

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

अनुमतियां

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

  • 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
  • PITR डेटा एक्सपोर्ट करने के लिए: datastore.databases.export
  • PITR डेटा इंपोर्ट करने के लिए: datastore.databases.import

वेब कंटेनर इंस्टॉल करने से पहले

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

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

PITR चालू करें

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

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

कंसोल

  1. Google Cloud Platform कंसोल में, डेटाबेस पेज पर जाएं.

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

  2. डेटाबेस की सूची से ज़रूरी डेटाबेस चुनें.

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

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

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

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

पीआईटीआर को बंद करने के लिए, GCP कंसोल के डिज़ास्टर रिकवरी पेज पर जाकर, पॉइंट-इन-टाइम रिकवरी चालू करें चेक बॉक्स से सही का निशान हटाएं.

Gcloud

डेटाबेस बनाने के दौरान, gcloud firestore databases create कमांड का इस्तेमाल करके PITR चालू करें:

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

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

  • Location - वह जगह जहां आप अपना डेटाबेस बनाना चाहते हैं.
  • DATABASE_ID - को डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.
  • TYPE - फ़ायरस्टोर-नेटिव पर सेट करें.

gcloud firestore databases update निर्देश का इस्तेमाल करके, पीआईपी (पिक्चर में पिक्चर) को बंद किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

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

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

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

डेटा के रखरखाव की अवधि और सबसे पहले के वर्शन के बारे में जानकारी पाना

कंसोल

  1. Google Cloud Platform कंसोल में, डेटाबेस पेज पर जाएं.

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

  2. डेटाबेस की सूची से ज़रूरी डेटाबेस चुनें.

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

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

    • निजी डेटा के रखरखाव की अवधि: वह अवधि जिसमें Cloud Firestore, डेटाबेस के लिए डेटा के सभी वर्शन बनाए रखता है. यह वैल्यू, पीआईटीआर बंद होने पर एक घंटे की और पीआईटीआर चालू होने पर सात दिन की होती है.
    • सबसे पुराना वर्शन समय: वह सबसे पुराना टाइमस्टैंप जिस पर पीआईटीआर विंडो में डेटा के पुराने वर्शन को पढ़ा जा सकता है. यह वैल्यू Cloud Firestore से लगातार अपडेट होती रहती है. साथ ही, इस पर क्वेरी करते ही यह वैल्यू पुरानी हो जाती है. अगर डेटा वापस पाने के लिए इस वैल्यू का इस्तेमाल किया जा रहा है, तो पक्का करें कि वैल्यू के लिए क्वेरी किए जाने के समय से लेकर, वापस लाने की प्रोसेस शुरू किए जाने के समय को ध्यान में रखा गया है.
    • पॉइंट-इन-टाइम रिकवरी: अगर PITR चालू है, तो Enabled दिखता है. अगर पीआईटीआर बंद है, तो आपको Disabled दिखेगा.

Gcloud

gcloud Firestore डेटाबेस का ब्यौरा देने वाले कमांड को इस तरह चलाएं:

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

PITR डेटा पढ़ें

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

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

Java

PITR डेटा देखने के लिए, आपको 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();

नोड

PITR डेटा देखने के लिए, आपको 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, runएग्रीगेशनQuery, और PartitionQuery का ऐक्सेस मिलेगा.

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

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

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

अपाची बीम

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

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

Java

एक साथ पढ़ने या लिखने से जुड़ी कार्रवाइयों के लिए, डेटाफ़्लो पाइपलाइन कोड के उदाहरण के साथ नीचे दिए गए कोड का इस्तेमाल किया जा सकता है. इस उदाहरण में, पीआईटीआर रीड के लिए 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 में एक्सपोर्ट किया जा सकता है. पीआईटीआर डेटा को एक्सपोर्ट किया जा सकता है, जहां टाइमस्टैंप, पिछले सात दिनों में पूरे मिनट का टाइमस्टैंप है, लेकिन 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 - मिनट के स्तर पर पीआईपी (पिक्चर में पिक्चर) टाइमस्टैंप. उदाहरण के लिए, 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. किसी डेटाबेस में इंपोर्ट करें.

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