Belirli bir noktadan önceyi kurtarma (PITR) ile çalışma

Bu sayfada, Cloud Firestore'da verileri saklamak ve kurtarmak için belirli bir noktadan önceyi kurtarma (PITR) özelliğinin nasıl kullanılacağı açıklanmaktadır.

PITR kavramlarını anlamak için Belirli bir noktadan önceyi kurtarma başlıklı makaleyi inceleyin.

İzinler

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

  • Cloud Datastore 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 yapmak 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

Başlamadan önce

PITR'yi kullanmaya başlamadan önce aşağıdaki noktaları göz önünde bulundurun:

  • Geçmişteki yedi günden hemen sonra okumaya başlayamazsınız PITR'yi etkinleştir.
  • Bir veritabanı oluştururken PITR'yi etkinleştirmek isterseniz, gcloud firestore databases create komutudur. PITR'yi etkinleştirme: GCP Console'u kullanarak veritabanı oluşturma işlevi desteklenmiyor.
  • Cloud Firestore, önceki andan itibaren sürümleri korumaya başlar etkinleştirmeye yardımcı olur.
  • PITR'yi devre dışı bıraktıktan sonra PITR penceresinde PITR verilerini okuyamazsınız.
  • PITR'yi devre dışı bıraktıktan hemen sonra yeniden etkinleştirirseniz geçmiş PITR verileri artık kullanılamıyor. PITR'yi devre dışı bırakmadan önce oluşturulan PITR verileri PITR'nin son kullanma tarihinden sonra silinmelidir.
  • Son bir saat içinde verileri yanlışlıkla sildiyseniz ve PITR devre dışı bırakıldıysa silme işleminden sonraki bir saat içinde PITR'yi etkinleştirerek verilerinizi geri yükleyebilir.
  • Süresi dolan PITR verilerinde yapılan okuma işlemleri başarısız olur.

PITR'yi etkinleştir

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

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

Konsol

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

    Veritabanlarına git

  2. Veritabanı 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 noktadan önceyi kurtarmayı etkinleştir onay kutusunu işaretleyip Kaydet'i tıklayın.

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

PITR'yi devre dışı bırakmak için GCP Console'daki Olağanüstü Durum Kurtarma sayfasında Belirli bir noktadan önceyi kurtarmayı etkinleştir onay kutusunun işaretini kaldırın.

gcloud

Aşağıdaki şekilde gcloud firestore databases create komutuyla veritabanı oluşturma işlemi sırasında PITR'yi 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) değerine ayarlanır.
  • TYPE - firestore'da yerel olarak ayarlandı.

PITR'yi gcloud firestore databases update komutunu kullanarak aşağıdaki gibi 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) değerine ayarlanır.

Saklama süresini ve en erken sürüm zamanını öğrenme

Konsol

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

    Veritabanlarına git

  2. Veritabanı 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 erken sürüm süresi'ne dikkat edin.

    • Saklama süresi: Cloud Firestore'un sakladığı dönem tüm versiyonlarını sunar. PITR ise bir saattir. devre dışı bırakılması ve PITR'nin etkinleştirildiği yedi gün olması gerekir.
    • En erken sürüm zamanı: Eski sürümlerin ait olduğu en erken zaman damgası veriler PITR penceresinde okunabilir. Bu değer sürekli olarak güncellenir ve sorgulandığı anda eskir. Şu durumda: verileri kurtarmak için bu değeri kullanıyorlarsa, bu işlem için Değerin sorgulandığı ana kadar, o ana kadar ele alacağız.
    • Belirli bir noktadan önceyi kurtarma: PITR ise Enabled gösterilir etkin olduğundan emin olun. PITR devre dışıysa Disabled

gcloud

gcloud firestore veritabanlarını açıklama komutunu aşağıdaki gibi çalıştırın:

gcloud firestore databases describe --database=DATABASE_ID

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

Çıkış şu şekildedir:

    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

Burada:

  • earliestVersionTime - depolanan en eski PITR verilerinin zaman damgası.
  • pointInTimeRecoveryEnablement: PITR ise POINT_IN_TIME_RECOVERY_ENABLED gösterilir etkin olduğundan emin olun. PITR devre dışıysa POINT_IN_TIME_RECOVERY_DISABLED veya pointInTimeRecoveryEnablement alanı görüntülenmeyebilir.
  • versionRetentionPeriod - PITR verilerinin milisaniye cinsinden saklandığı dönem. Değer, PITR devre dışı bırakıldığında bir saat, PITR etkinse yedi gün olabilir.

PITR verilerini okuma

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 öğesini doğrudan belirtemezsiniz. Daha fazla bilgi için İşlemler ve toplu yazma işlemleri bölümüne bakın.

  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şlemi kullanmanız gerekir. Okumalarda readTime öğesini doğrudan belirtemezsiniz. Daha fazla bilgi için İşlemler ve toplu yazma işlemleri bölümüne bakın.

  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 okumaları tüm Cloud Firestore okuma yöntemlerinde desteklenir. get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery ve partitionQuery'dir.

REST yöntemlerini kullanarak bir okuma işlemi 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. PITR zaman damgası, son bir saat içindeki mikrosaniye hassasiyeti zaman damgası veya son bir saatten sonraki bir tam dakika zaman damgası olabilir ancak earliestVersionTime değerinden önce olamaz.

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

Apache Beam

Dataflow ile Cloud Firestore veritabanındaki dokümanları 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 bağlayıcısı. Bu okuma yöntemleri PITR için kullanabileceğiniz withReadTime(@Nullable Instant readTime) yöntemi şunu okuyor:

Java

Aşağıdaki kod, toplu okuma veya yazma işlemleri için örnek Dataflow ardışık düzen koduyla kullanılabilir. Örnekte, PITR okumalar için withReadTime(@Nullable Instant readTime) yöntemi kullanılmaktadı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 ardışık düzenindeki readTime örneklerinin tam listesi için GitHub deposuna göz atın.

PITR verilerini dışa ve içe aktarma

Veritabanınızı PITR verilerinden Cloud Storage'a aktarabilirsiniz. gcloud firestore export komutunu kullanabilirsiniz. Zaman damgasının bir tam dakika zaman damgası olduğu durumlarda, PITR verilerini dışa aktarabilirsiniz. yalnızca son yedi gün içindeki earliestVersionTime aralığından önce değil. Veriler artık güncel değilse belirtilen zaman damgasında görünüyorsa dışa aktarma işlemi başarısız olur.

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

  1. snapshot-time parametresini istenen kurtarma zaman damgasına göre 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 ön ekine sahip geçerli bir Cloud Storage paketi.
    • PITR_TIMESTAMP - 2023-05-26T10:20:00.00Z veya 2023-10-19T10:30:00.00-07:00 gibi dakika ayrıntı düzeyinde bir PITR zaman damgası.
    • COLLECTION_IDS: koleksiyon kimliklerinin veya koleksiyon grubu kimliklerinin listesi (ör. 'specific collection group1','specific collection group2').
    • NAMESPACE_IDS - 'customer','orders' gibi ad alanı kimliklerinin listesi.

    PITR verilerini dışa aktarmadan önce aşağıdaki noktaları göz önünde bulundurun:

    • RFC 3339'da zaman damgasını belirtin biçimindedir. Örneğin, 2023-05-26T10:20:00.00Z veya 2023-10-19T10:30:00.00-07:00.
    • Belirttiğiniz zaman damgasının tam dakika zaman damgası olduğundan emin olun. son yedi gün içinde, yalnızca earliestVersionTime Veriler belirtilen konumda artık yoksa zaman damgası kullanılırsa bir hata oluşur. Belirtilen zaman son bir saat içinde olsa bile zaman damgası tam bir dakika olmalıdır.
    • Başarısız PITR dışa aktarma işlemi için sizden ücret alınmaz.
  2. Veritabanına aktarın.

    dışa aktarılmıştır. Veritabanınızda mevcut olan bir doküman varsa farklı olabilir.