Belirli bir noktadan kurtarma (PITR) ile çalışın

Bu sayfada, Cloud Firestore'daki verileri korumak ve kurtarmak için belirli bir noktaya kurtarmanın (PITR) nasıl kullanılacağı açıklanmaktadır.

PITR kavramlarını anlamak için bkz . Zaman içinde kurtarma .

İzinler

PITR ayarlarını yönetmek için ihtiyaç duyduğunuz izinleri almak üzere yöneticinizden, PITR'yi etkinleştirmek istediğiniz projede size aşağıdaki IAM rollerini vermesini isteyin:

  • Bulut Veri Deposu Sahibi ( roles/datastore.owner )

Özel roller için aşağıdaki izinlerin verildiğinden emin olun:

  • Veritabanı oluştururken PITR'yi etkinleştirmek için: datastore.databases.create
  • Mevcut veritabanındaki PITR ayarlarını güncellemek için: datastore.databases.update , datastore.databases.list
  • PITR verilerinden okuma gerçekleştirmek için: datastore.databases.get , datastore.entities.get , datastore.entities.list
  • PITR verilerini dışa aktarmak için: datastore.databases.export
  • PITR verilerini içe aktarmak için: datastore.databases.import

Sen başlamadan önce

PITR'yi kullanmaya başlamadan önce aşağıdaki noktalara dikkat edin:

  • PITR'yi etkinleştirdikten hemen sonra yedi gün öncesinden okumaya başlayamazsınız.
  • Veritabanı oluşturduğunuzda PITR'yi etkinleştirmek istiyorsanız gcloud firestore databases create komutunu kullanmanız gerekir. GCP Konsolunu kullanarak veritabanı oluştururken PITR'nin etkinleştirilmesi desteklenmez.
  • Cloud Firestore, PITR'yi etkinleştirdikten sonraki andan itibaren sürümleri korumaya başlar.
  • PITR'yi devre dışı bıraktıktan sonra PITR penceresindeki PITR verilerini okuyamazsınız.
  • PITR'yi devre dışı bıraktıktan hemen sonra yeniden etkinleştirirseniz geçmiş PITR verileri artık kullanılamaz. PITR'yi devre dışı bırakmadan önce oluşturulan tüm PITR verileri, PITR'nin son kullanma tarihinden sonra silinecektir.
  • Verilerinizi son bir saat içinde yanlışlıkla sildiyseniz ve PITR devre dışıysa, silme işleminden sonraki bir saat içinde PITR'yi etkinleştirerek verilerinizi geri yükleyebilirsiniz.
  • Süresi dolmuş PITR verileri üzerinde gerçekleştirilen herhangi bir okuma başarısız olur.

PITR'yi etkinleştir

PITR'yi kullanmadan önce Google Cloud projeniz için faturalandırmayı etkinleştirin . PITR işlevini yalnızca faturalandırmanın etkin olduğu Google Cloud projeleri kullanabilir.

Veritabanınız için PITR'yi etkinleştirmek için:

Konsol

  1. Google Cloud Platform Console'da Veritabanları sayfasına gidin.

    Veritabanlarına Git

  2. Veritabanları listesinden gerekli veritabanını seçin.

  3. Gezinme menüsünde Olağanüstü Durum Kurtarma'yı tıklayın.

  4. Ayarları düzenlemek için Düzenle'yi tıklayın.

  5. Belirli bir noktaya kurtarmayı etkinleştir onay kutusunu seçin ve ardından Kaydet'e tıklayın.

PITR'nin etkinleştirilmesi depolama maliyetlerine neden olur. Daha fazla bilgi için Fiyatlandırma'ya bakın.

PITR'yi devre dışı bırakmak için GCP Konsolu'ndaki Olağanüstü Durum Kurtarma sayfasındaki Belirli bir noktaya kurtarmayı etkinleştir onay kutusunun işaretini kaldırın.

gcloud

gcloud firestore databases create komutuyla veritabanı oluşturma sırasında PITR'yi aşağıdaki gibi etkinleştirin:

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

Değerleri aşağıdaki gibi değiştirin:

  • Location - veritabanınızı oluşturmak istediğiniz konum.
  • DATABASE_ID - veritabanı kimliğine veya (varsayılan) olarak ayarlanır.
  • TYPE - firestore-native olarak ayarlandı.

gcloud firestore databases update komutunu kullanarak PITR'yi aşağıdaki şekilde devre dışı bırakabilirsiniz:

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

Değerleri aşağıdaki gibi değiştirin:

  • DATABASE_ID - veritabanı kimliğine veya (varsayılan) olarak ayarlanır.

Saklama süresini ve en eski sürüm süresini öğrenin

Konsol

  1. Google Cloud Platform Console'da Veritabanları sayfasına gidin.

    Veritabanlarına Git

  2. Veritabanları listesinden gerekli veritabanını seçin.

  3. Gezinme menüsünde Olağanüstü Durum Kurtarma'yı tıklayın.

  4. Ayarlar bölümünde Saklama süresi ve En eski sürüm süresini not edin.

    • Saklama süresi : Cloud Firestore'un veritabanına ilişkin tüm veri sürümlerini sakladığı süre. Değer, PITR devre dışı bırakıldığında bir saat ve PITR etkinleştirildiğinde yedi gündür.
    • En erken sürüm zamanı : Verinin eski sürümlerinin PITR penceresinde okunabileceği en erken zaman damgası. Bu değer Cloud Firestore tarafından sürekli olarak güncellenir ve sorgulandığı anda eski haline gelir. Verileri kurtarmak için bu değeri kullanıyorsanız değerin sorgulandığı andan kurtarmayı başlattığınız ana kadar geçen süreyi hesaba kattığınızdan emin olun.
    • Belirli bir noktaya kurtarma : PITR etkinse Enabled gösterir. PITR devre dışıysa Disabled göreceksiniz.

gcloud

gcloud firestore veritabanları açıklama komutunu şu şekilde çalıştırın:

gcloud firestore databases describe --database=DATABASE_ID

DATABASE_ID veritabanı kimliğiyle veya default değiştirin.

İşte çıktı:

    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

Neresi,

  • earliestVersionTime - depolanan en erken PITR verilerinin zaman damgası.
  • pointInTimeRecoveryEnablement : PITR etkinse POINT_IN_TIME_RECOVERY_ENABLED gösterir. PITR devre dışı bırakılırsa POINT_IN_TIME_RECOVERY_DISABLED ifadesini görürsünüz veya pointInTimeRecoveryEnablement alanı görüntülenmeyebilir.
  • versionRetentionPeriod - PITR verilerinin milisaniye cinsinden tutulduğu süre. Değer, PITR devre dışı bırakıldığında bir saat veya PITR etkinleştirildiğinde yedi gün olabilir.

PITR verilerini oku

PITR verilerini istemci kitaplıklarını, REST API yöntemlerini veya FirestoreIO Apache Beam bağlayıcısını kullanarak okuyabilirsiniz.

İstemci kitaplıkları

Java

PITR verilerini okumak için ReadOnly işlemini kullanmanız gerekir. Okumalarda readTime doğrudan belirtemezsiniz. Daha fazla bilgi için bkz . İşlemler ve toplu yazmalar .

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

Düğüm

PITR verilerini okumak için ReadOnly işlemini kullanmanız gerekir. Okumalarda readTime doğrudan belirtemezsiniz. Daha fazla bilgi için bkz . İşlemler ve toplu yazmalar .

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

PITR okumaları, get , list , BatchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery ve partitionQuery olan tüm Cloud Firestore okuma yöntemlerinde desteklenir.

REST yöntemlerini kullanarak okuma gerçekleştirmek için aşağıdaki seçeneklerden birini deneyin:

  1. Okuma yöntemi isteğinizde, readTime değerini, readOptions yönteminde desteklenen bir PITR zaman damgası olarak iletin. Bir PITR zaman damgası, son bir saat içindeki mikrosaniye hassas zaman damgası veya son saatin ötesinde bir tam dakikalık zaman damgası olabilir, ancak earliestVersionTime değerinden daha erken olamaz.

  2. Birden fazla PITR okuması için readTime parametresini BeginTransaction yöntemiyle birlikte ReadOnly işleminin bir parçası olarak kullanın.

Apaçi Işını

Dataflow ile Cloud Firestore veritabanındaki belgeleri büyük ölçekte okumak veya yazmak için Cloud FirestoreIO Apache Beam bağlayıcısını kullanın.

PITR okumaları, Cloud FirestoreIO konektörünün aşağıdaki okuma yönteminde desteklenir. Bu okuma yöntemleri, PITR okumaları için kullanabileceğiniz withReadTime(@Nullable Instant readTime) yöntemini destekler:

Java

Aşağıdaki kod, toplu okuma veya yazma işlemleri için örnek Dataflow işlem hattı koduyla birlikte kullanılabilir. Örnek, PITR okumaları için withReadTime(@Nullable Instant readTime) yöntemini kullanır.

  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 kanalındaki readTime örneklerinin tam listesi için Github deposuna bakın.

PITR verilerini dışa ve içe aktarma

gcloud firestore export komutunu kullanarak veritabanınızı PITR verilerinden Cloud Storage'a aktarabilirsiniz. Zaman damgasının son yedi gün içindeki tam dakikalık bir zaman damgası olduğu ancak earliestVersionTime değerinden daha erken olmadığı PITR verilerini dışa aktarabilirsiniz. Veriler belirtilen zaman damgasında artık mevcut değilse dışarı aktarma işlemi başarısız olur.

PITR dışa aktarma işlemi, tüm belgelerin dışa aktarımı ve belirli koleksiyonların dışa aktarımı da dahil olmak üzere tüm filtreleri destekler.

  1. Anlık snapshot-time parametresini istenen kurtarma zaman damgasına belirterek veritabanını dışa aktarın.

    gcloud

    Veritabanını paketinize aktarmak için aşağıdaki komutu çalıştırın.

    gcloud firestore export gs://[BUCKET_NAME_PATH] \
        --snapshot-time=[PITR_TIMESTAMP] \
        --collection-ids=[COLLECTION_IDS] \
        --namespace-ids=[NAMESPACE_IDS]
    

    Nerede,

    • BUCKET_NAME_PATH - dışa aktarma dosyalarının depolandığı isteğe bağlı yol önekine sahip geçerli bir Cloud Storage paketi.
    • PITR_TIMESTAMP - dakika ayrıntı düzeyinde bir PITR zaman damgası; örneğin, 2023-05-26T10:20:00.00Z veya 2023-10-19T10:30:00.00-07:00 .
    • COLLECTION_IDS - koleksiyon kimliklerinin veya koleksiyon grubu kimliklerinin bir listesi; örneğin 'specific collection group1' , 'specific collection group2' .
    • NAMESPACE_IDS - ad alanı kimliklerinin bir listesi, örneğin 'customer' , 'orders' .

    PITR verilerini dışa aktarmadan önce aşağıdaki noktalara dikkat edin:

    • Zaman damgasını RFC 3339 biçiminde belirtin. Örneğin, 2023-05-26T10:20:00.00Z veya 2023-10-19T10:30:00.00-07:00 .
    • Belirttiğiniz zaman damgasının son yedi gün içindeki tam dakikalık bir zaman damgası olduğundan, ancak earliestVersionTime değerinden daha erken olmadığından emin olun. Veriler belirtilen zaman damgasında artık mevcut değilse bir hata oluşturulur. Belirtilen saat son bir saat içinde olsa bile zaman damgası tam bir dakika olmalıdır.
    • Başarısız bir PITR dışa aktarımı için sizden ücret alınmaz.
  2. Bir veritabanına aktarın.

    Dışa aktarılan veritabanınızı içe aktarmak için Tüm belgeleri içe aktarma bölümündeki adımları kullanın. Veritabanınızda zaten herhangi bir belge varsa, üzerine yazılacaktır.