পয়েন্ট-ইন-টাইম রিকভারি (PITR) নিয়ে কাজ করুন

এই পৃষ্ঠাটি বর্ণনা করে কিভাবে Cloud Firestore ডেটা ধরে রাখতে এবং পুনরুদ্ধার করতে পয়েন্ট-ইন-টাইম রিকভারি (PITR) ব্যবহার করতে হয়।

PITR ধারণাগুলি বুঝতে, পয়েন্ট-ইন-টাইম পুনরুদ্ধার দেখুন।

অনুমতি

পিআইটিআর সেটিংস পরিচালনা করার জন্য আপনার প্রয়োজনীয় অনুমতিগুলি পেতে, আপনার প্রশাসককে আপনি যে প্রকল্পে পিআইটিআর সক্ষম করতে চান সেখানে আপনাকে নিম্নলিখিত IAM ভূমিকাগুলি প্রদান করতে বলুন:

  • ক্লাউড ডেটাস্টোরের মালিক ( 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

আপনি শুরু করার আগে

আপনি PITR ব্যবহার শুরু করার আগে নিম্নলিখিত পয়েন্টগুলি নোট করুন:

  • আপনি PITR সক্ষম করার পরপরই আপনি অতীতের সাত দিন থেকে পড়া শুরু করতে পারবেন না।
  • আপনি একটি ডাটাবেস তৈরি করার সময় PITR সক্ষম করতে চাইলে, আপনাকে অবশ্যই gcloud firestore databases create কমান্ড ব্যবহার করতে হবে। Google ক্লাউড কনসোল ব্যবহার করে একটি ডাটাবেস তৈরি করার সময় PITR সক্ষম করা সমর্থিত নয়৷
  • Cloud Firestore পিআইটিআর সক্ষম করার পর বিন্দু থেকে সংস্করণগুলি ধরে রাখা শুরু করে৷
  • আপনি PITR নিষ্ক্রিয় করার পরে আপনি PITR উইন্ডোতে PITR ডেটা পড়তে পারবেন না৷
  • আপনি যদি এটি নিষ্ক্রিয় করার সাথে সাথে PITR পুনরায় সক্ষম করেন, তাহলে অতীতের PITR ডেটা আর উপলব্ধ থাকবে না৷ PITR নিষ্ক্রিয় করার আগে তৈরি করা যেকোনো PITR ডেটা PITR মেয়াদ শেষ হওয়ার তারিখের পরে মুছে ফেলা হবে।
  • যদি আপনি ঘটনাক্রমে শেষ ঘন্টায় ডেটা মুছে ফেলেন এবং PITR অক্ষম করা হয়, আপনি মুছে ফেলার এক ঘন্টার মধ্যে PITR সক্ষম করে আপনার ডেটা পুনরুদ্ধার করতে পারেন।
  • মেয়াদোত্তীর্ণ পিআইটিআর ডেটাতে সঞ্চালিত যেকোনো পঠন ব্যর্থ হয়।

PITR সক্ষম করুন৷

PITR ব্যবহার করার আগে, আপনার Google ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করুন । শুধুমাত্র Google ক্লাউড প্রজেক্টে বিলিং চালু আছে তারাই PITR কার্যকারিতা ব্যবহার করতে পারে।

আপনার ডাটাবেসের জন্য PITR সক্ষম করতে:

কনসোল

  1. Google ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।

    ডাটাবেসে যান

  2. ডাটাবেসের তালিকা থেকে প্রয়োজনীয় ডাটাবেস নির্বাচন করুন।

  3. নেভিগেশন মেনুতে, ডিজাস্টার রিকভারি ক্লিক করুন।

  4. সেটিংস সম্পাদনা করতে সম্পাদনা ক্লিক করুন.

  5. পয়েন্ট-ইন-টাইম পুনরুদ্ধার সক্ষম করুন চেক বক্সটি নির্বাচন করুন এবং তারপর সংরক্ষণ করুন ক্লিক করুন।

PITR সক্ষম করার জন্য স্টোরেজ খরচ বহন করতে হবে। আরও তথ্যের জন্য মূল্য দেখুন।

PITR অক্ষম করতে, Google ক্লাউড কনসোলে দুর্যোগ পুনরুদ্ধার পৃষ্ঠা থেকে পয়েন্ট-ইন-টাইম পুনরুদ্ধার সক্ষম করুন চেক বক্সটি সাফ করুন৷

জিক্লাউড

ডাটাবেস তৈরির সময় পিআইটিআর সক্ষম করুন 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-নেটিভ সেট করা হয়েছে।

আপনি নিম্নরূপ gcloud firestore databases update কমান্ড ব্যবহার করে PITR অক্ষম করতে পারেন:

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

নিম্নরূপ মান প্রতিস্থাপন করুন:

  • DATABASE_ID - ডাটাবেস আইডি বা (ডিফল্ট) সেট করা হয়েছে।

ধরে রাখার সময়কাল এবং প্রথম সংস্করণের সময় পান

কনসোল

  1. Google ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।

    ডাটাবেসে যান

  2. ডাটাবেসের তালিকা থেকে প্রয়োজনীয় ডাটাবেস নির্বাচন করুন।

  3. নেভিগেশন মেনুতে, ডিজাস্টার রিকভারি ক্লিক করুন।

  4. সেটিংস বিভাগে, ধরে রাখার সময়কাল এবং প্রথম সংস্করণের সময় নোট করুন।

    • ধরে রাখার সময়কাল : যে সময়কালে Cloud Firestore ডাটাবেসের জন্য ডেটার সমস্ত সংস্করণ ধরে রাখে। যখন PITR অক্ষম থাকে তখন মান হল এক ঘন্টা এবং PITR সক্ষম হলে সাত দিন৷
    • প্রথমতম সংস্করণের সময় : প্রথমতম টাইমস্ট্যাম্প যেখানে ডেটার পুরানো সংস্করণগুলি পিআইটিআর উইন্ডোতে পড়া যায়৷ এই মানটি Cloud Firestore দ্বারা ক্রমাগত আপডেট করা হয় এবং এটিকে জিজ্ঞাসা করার সাথে সাথে এটি বাসি হয়ে যায়। আপনি যদি ডেটা পুনরুদ্ধার করার জন্য এই মানটি ব্যবহার করেন, তাহলে আপনি পুনরুদ্ধার শুরু করার মুহূর্ত থেকে যখন মানটি জিজ্ঞাসা করা হয় সেই মুহূর্ত থেকে সময়ের জন্য অ্যাকাউন্ট নিশ্চিত করুন৷
    • পয়েন্ট-ইন-টাইম পুনরুদ্ধার : PITR সক্ষম হলে Enabled দেখায়। PITR নিষ্ক্রিয় হলে, আপনি Disabled দেখতে পাবেন।

জিক্লাউড

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/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 : POINT_IN_TIME_RECOVERY_ENABLED দেখায়, যদি PITR সক্রিয় থাকে। যদি PITR অক্ষম করা থাকে, আপনি হয় POINT_IN_TIME_RECOVERY_DISABLED দেখতে পাবেন অথবা pointInTimeRecoveryEnablement ক্ষেত্রটি প্রদর্শিত নাও হতে পারে৷
  • versionRetentionPeriod : সময়কাল যার জন্য পিআইটিআর ডেটা মিলিসেকেন্ডে রাখা হয়। PITR নিষ্ক্রিয় থাকলে মানটি এক ঘন্টা বা PITR সক্ষম থাকলে সাত দিন হতে পারে৷

পিআইটিআর ডেটা পড়ুন

আপনি ক্লায়েন্ট লাইব্রেরি, REST API পদ্ধতি বা FirestoreIO Apache Beam সংযোগকারী ব্যবহার করে PITR ডেটা পড়তে পারেন।

ক্লায়েন্ট লাইব্রেরি

জাভা

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

PITR রিডগুলি সমস্ত Cloud Firestore রিড পদ্ধতিতে সমর্থিত, যেগুলি হল get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery , এবং partitionQuery

REST পদ্ধতিগুলি ব্যবহার করে একটি পঠন সম্পাদন করতে, নিম্নলিখিত বিকল্পগুলির মধ্যে একটি চেষ্টা করুন:

  1. আপনার পঠন পদ্ধতির অনুরোধে, readOptions পদ্ধতিতে একটি সমর্থিত PITR টাইমস্ট্যাম্প হিসাবে readTime মানটি পাস করুন৷ একটি PITR টাইমস্ট্যাম্প হয় গত ঘন্টার মধ্যে মাইক্রোসেকেন্ডের নির্ভুল টাইমস্ট্যাম্প হতে পারে বা গত ঘন্টার পরে পুরো মিনিটের টাইমস্ট্যাম্প হতে পারে, তবে earliestVersionTime চেয়ে আগে নয়৷

  2. একাধিক PITR রিডের জন্য শুধুমাত্র ReadOnly লেনদেনের অংশ হিসাবে BeginTransaction পদ্ধতির সাথে readTime প্যারামিটার ব্যবহার করুন।

অ্যাপাচি বিম

Cloud Firestore IO Apache Beam সংযোগকারী ব্যবহার করুন ডেটাফ্লো সহ একটি Cloud Firestore ডাটাবেসে ডকুমেন্ট পড়তে বা লিখতে।

PITR রিডগুলি Cloud Firestore IO সংযোগকারীর নিম্নলিখিত পঠন পদ্ধতিতে সমর্থিত। এই পঠন পদ্ধতিগুলি withReadTime(@Nullable Instant readTime) পদ্ধতি সমর্থন করে যা আপনি PITR পড়ার জন্য ব্যবহার করতে পারেন:

জাভা

বাল্ক রিড বা রাইট অপারেশনের জন্য নিম্নলিখিত কোডটি ডেটাফ্লো পাইপলাইন কোডের উদাহরণ সহ ব্যবহার করা যেতে পারে। উদাহরণটি 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())
  ...

ডেটাফ্লো পাইপলাইনে readTime উদাহরণগুলির একটি সম্পূর্ণ তালিকার জন্য, Github সংগ্রহস্থল দেখুন।

PITR ডেটা থেকে রপ্তানি এবং আমদানি

আপনি gcloud firestore export কমান্ড ব্যবহার করে PITR ডেটা থেকে Cloud Storage আপনার ডাটাবেস রপ্তানি করতে পারেন। আপনি পিআইটিআর ডেটা রপ্তানি করতে পারেন যেখানে টাইমস্ট্যাম্পটি বিগত সাত দিনের মধ্যে পুরো মিনিটের টাইমস্ট্যাম্প, তবে earliestVersionTime চেয়ে আগে নয়। যদি নির্দিষ্ট টাইমস্ট্যাম্পে ডেটা আর বিদ্যমান না থাকে, তাহলে এক্সপোর্ট অপারেশন ব্যর্থ হয়।

পিআইটিআর এক্সপোর্ট অপারেশন সমস্ত ফিল্টারকে সমর্থন করে, যার মধ্যে সমস্ত নথির রপ্তানি এবং নির্দিষ্ট সংগ্রহের রপ্তানিও রয়েছে।

  1. পছন্দসই পুনরুদ্ধার টাইমস্ট্যাম্পে snapshot-time প্যারামিটার নির্দিষ্ট করে ডাটাবেস রপ্তানি করুন।

    জিক্লাউড

    আপনার বালতিতে ডাটাবেস রপ্তানি করতে নিম্নলিখিত কমান্ডটি চালান।

    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 এর আগে নয়। যদি নির্দিষ্ট টাইমস্ট্যাম্পে ডেটা আর বিদ্যমান না থাকে, একটি ত্রুটি তৈরি হয়। টাইমস্ট্যাম্প অবশ্যই একটি সম্পূর্ণ মিনিট হতে হবে, এমনকি যদি নির্দিষ্ট সময়টি গত ঘন্টার মধ্যে হয়।
    • আপনি একটি ব্যর্থ PITR রপ্তানির জন্য চার্জ করা হয় না.
  2. একটি ডাটাবেসে আমদানি করুন।

    আপনার রপ্তানিকৃত ডাটাবেস আমদানি করতে সমস্ত নথি আমদানির ধাপগুলি ব্যবহার করুন৷ আপনার ডাটাবেসে যদি কোনো ডকুমেন্ট আগে থেকেই থাকে, তাহলে তা ওভাররাইট করা হবে।