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

ক্লাউড ফায়ারস্টোর স্ট্যান্ডার্ড সংস্করণ এবং ক্লাউড ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণের সাথে প্রাসঙ্গিক।

এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে পয়েন্ট-ইন-টাইম রিকভারি (PITR) ব্যবহার করে MongoDB সামঞ্জস্যের সাথে ক্লাউড ফায়ারস্টোরে ডেটা ধরে রাখা এবং পুনরুদ্ধার করা যায়।

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

অনুমতিসমূহ

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

  • ক্লাউড ডেটাস্টোরের মালিক ( 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
  • একটি ডাটাবেস ক্লোন করতে: datastore.databases.clone

শুরু করার আগে

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

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

PITR সক্ষম করুন

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

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

কনসোল

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

    ডাটাবেসে যান

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

  3. নেভিগেশন মেনুতে, দুর্যোগ পুনরুদ্ধার ক্লিক করুন।

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

  5. Enable point-in-time recovery চেকবক্সটি নির্বাচন করুন, এবং তারপর Save এ ক্লিক করুন।

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

PITR নিষ্ক্রিয় করতে, Google Cloud কনসোলের Disaster Recovery পৃষ্ঠা থেকে Enable point-in-time recovery চেকবক্সটি সাফ করুন।

জিক্লাউড

ডাটাবেস তৈরির সময় 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. গুগল ক্লাউড কনসোলে, ডাটাবেস পৃষ্ঠায় যান।

    ডাটাবেসে যান

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

  3. নেভিগেশন মেনুতে, দুর্যোগ পুনরুদ্ধার ক্লিক করুন।

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

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

জিক্লাউড

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 ডেটা মিলিসেকেন্ডে ধরে রাখা হয়। PITR অক্ষম থাকলে মান এক ঘন্টা অথবা 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 রিডগুলি MongoDB সামঞ্জস্যপূর্ণ রিড পদ্ধতি সহ সমস্ত ক্লাউড ফায়ারস্টোরে সমর্থিত, যা হল get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery , এবং partitionQuery

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

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

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

অ্যাপাচি বিম

ডেটাফ্লো ব্যবহার করে বৃহৎ পরিসরে MongoDB সামঞ্জস্যপূর্ণ ডাটাবেস সহ ক্লাউড ফায়ারস্টোরে ডকুমেন্ট পড়তে বা লিখতে MongoDB সামঞ্জস্যপূর্ণ IO অ্যাপাচি বিম সংযোগকারী ব্যবহার করুন।

PITR রিডগুলি MongoDB compatibilityIO সংযোগকারী সহ ক্লাউড ফায়ারস্টোরের নিম্নলিখিত রিড পদ্ধতিতে সমর্থিত। এই রিড পদ্ধতিগুলি 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 সংগ্রহস্থল দেখুন।

একটি ডাটাবেস থেকে ক্লোন করুন

আপনি একটি নির্বাচিত টাইমস্ট্যাম্পে বিদ্যমান ডাটাবেস ক্লোন করে একটি নতুন ডাটাবেসে রূপান্তর করতে পারেন:

  • ক্লোন করা ডাটাবেস হল একটি নতুন ডাটাবেস যা সোর্স ডাটাবেসের মতো একই স্থানে তৈরি করা হবে।

    ক্লোন তৈরি করতে, Cloud Firestore সোর্স ডাটাবেসের পয়েন্ট-ইন-টাইম রিকভারি (PITR) ডেটা ব্যবহার করে। ক্লোন করা ডাটাবেসে সমস্ত ডেটা এবং সূচক অন্তর্ভুক্ত থাকে।

  • ডিফল্টরূপে, ক্লোন করা ডাটাবেসটি সোর্স ডাটাবেসের মতোই এনক্রিপ্ট করা হবে, হয় গুগলের ডিফল্ট এনক্রিপশন অথবা CMEK এনক্রিপশন ব্যবহার করে। আপনি একটি ভিন্ন এনক্রিপশন প্রকার নির্দিষ্ট করতে পারেন অথবা CMEK এনক্রিপশনের জন্য একটি ভিন্ন কী ব্যবহার করতে পারেন।

  • টাইমস্ট্যাম্পটির গ্র্যানুলারিটি এক মিনিট এবং এটি PITR উইন্ডো দ্বারা সংজ্ঞায়িত সময়ের মধ্যে অতীতের একটি সময়ের বিন্দু নির্দিষ্ট করে:

    • যদি আপনার ডাটাবেসের জন্য PITR সক্রিয় থাকে, তাহলে আপনি গত 7 দিনের মধ্যে যেকোনো মিনিট নির্বাচন করতে পারবেন (অথবা যদি PITR 7 দিনের কম সময় আগে সক্রিয় থাকে তবে তার কম)।
    • যদি PITR সক্রিয় না থাকে, তাহলে আপনি গত এক ঘন্টার যেকোনো মিনিট নির্বাচন করতে পারেন।
    • আপনার ডাটাবেসের বিবরণে আপনি যে প্রথম টাইমস্ট্যাম্পটি বেছে নিতে পারেন তা পরীক্ষা করে দেখতে পারেন।

কনসোল

Firebase কনসোল ডাটাবেস ক্লোনিং সমর্থন করে না। ডাটাবেস ক্লোন করার জন্য আপনি Google Cloud CLI এর নির্দেশাবলী ব্যবহার করতে পারেন।

জিক্লাউড

একটি ডাটাবেস ক্লোন করতে gcloud alpha firestore databases clone কমান্ডটি ব্যবহার করুন:

gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • SOURCE_DATABASE : একটি বিদ্যমান ডাটাবেসের ডাটাবেস নাম যা আপনি ক্লোন করতে চান। নামটি projects/ PROJECT_ID /databases/ SOURCE_DATABASE_ID ফর্ম্যাট ব্যবহার করে।

  • PITR_TIMESTAMP : RFC 3339 ফর্ম্যাটে একটি PITR টাইমস্ট্যাম্প , মিনিট গ্র্যানুলারিটিতে। উদাহরণস্বরূপ: 2025-06-01T10:20:00.00Z অথবা 2025-06-01T10:30:00.00-07:00

  • DESTINATION_DATABASE_ID : একটি নতুন ক্লোন করা ডাটাবেসের জন্য একটি ডাটাবেস আইডি । এই ডাটাবেস আইডিটি কোনও বিদ্যমান ডাটাবেসের সাথে যুক্ত করা উচিত নয়।

উদাহরণ:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'

ক্লোন করা ডাটাবেসের এনক্রিপশন কনফিগারেশন পরিবর্তন করুন

ডিফল্টরূপে, ক্লোন করা ডাটাবেসের এনক্রিপশন কনফিগারেশন সোর্স ডাটাবেসের মতোই থাকবে। এনক্রিপশন কনফিগারেশন পরিবর্তন করতে, --encryption-type আর্গুমেন্ট ব্যবহার করুন:

  • (ডিফল্ট) use-source-encryption : সোর্স ডাটাবেসের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করুন।
  • google-default-encryption : গুগলের ডিফল্ট এনক্রিপশন ব্যবহার করুন।
  • customer-managed-encryption : CMEK এনক্রিপশন ব্যবহার করুন। --kms-key-name আর্গুমেন্টে একটি কী আইডি উল্লেখ করুন।

ক্লোন করা ডাটাবেসের জন্য CMEK এনক্রিপশন কীভাবে কনফিগার করতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

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

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

PITR এক্সপোর্ট অপারেশন সমস্ত ফিল্টার সমর্থন করে, যার মধ্যে সমস্ত নথি রপ্তানি এবং নির্দিষ্ট সংগ্রহের রপ্তানি অন্তর্ভুক্ত।

  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'

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

    • RFC 3339 ফর্ম্যাটে টাইমস্ট্যাম্প নির্দিষ্ট করুন। উদাহরণস্বরূপ, 2023-05-26T10:20:00.00Z অথবা 2023-10-19T10:30:00.00-07:00
    • নিশ্চিত করুন যে আপনার নির্দিষ্ট করা টাইমস্ট্যাম্পটি গত সাত দিনের মধ্যে একটি সম্পূর্ণ মিনিটের টাইমস্ট্যাম্প, তবে earliestVersionTime এর আগের নয়। যদি নির্দিষ্ট টাইমস্ট্যাম্পে ডেটা আর বিদ্যমান না থাকে, তাহলে একটি ত্রুটি তৈরি হয়। নির্দিষ্ট সময়টি গত এক ঘন্টার মধ্যে হলেও, টাইমস্ট্যাম্পটি অবশ্যই পুরো মিনিটের হতে হবে।
    • ব্যর্থ PITR রপ্তানির জন্য আপনাকে কোনও চার্জ করা হবে না।
  2. একটি ডাটাবেসে আমদানি করুন।

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