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:
- PITR'yi etkinleştirdikten hemen sonra geçmiş yedi günden itibaren okumaya başlayamazsınız.
- Veritabanı oluştururken PITR'yi etkinleştirmek isterseniz
gcloud firestore databases create
komutunu kullanmanız gerekir. GCP Console kullanarak veritabanı oluştururken PITR'nin etkinleştirilmesi desteklenmez. - Cloud Firestore, PITR'yi etkinleştirdikten sonra sürümleri noktadan itibaren korumaya başlar.
- 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ılamaz. PITR'yi devre dışı bırakmadan önce oluşturulan tüm PITR verileri PITR'nin geçerlilik bitiş tarihinden sonra silinir.
- 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ükleyebilirsiniz.
- 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 projeniz için faturalandırmayı etkinleştirin. 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
Google Cloud Platform Console'da Veritabanları sayfasına gidin.
Veritabanı listesinden gerekli veritabanını seçin.
Gezinme menüsünde Olağanüstü Durum Kurtarma'yı tıklayın.
Ayarları düzenlemek için Düzenle'yi tıklayın.
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
Google Cloud Platform Console'da Veritabanları sayfasına gidin.
Veritabanı listesinden gerekli veritabanını seçin.
Gezinme menüsünde Olağanüstü Durum Kurtarma'yı tıklayın.
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, veritabanı için verilerin tüm sürümlerini sakladığı dönem. Değer, PITR devre dışı bırakıldığında bir saat, PITR etkinleştirildiğinde ise yedi gündür.
- En erken sürüm zamanı: Verilerin PITR penceresinde okunabildiği en erken zaman damgası. Bu değer, Cloud Firestore tarafından sürekli olarak güncellenir ve sorgulandığı anda eskir. Verileri kurtarmak için bu değeri kullanıyorsanız değerin sorgulandığı andan kurtarma işlemini başlattığınız ana kadar geçen süreyi hesaba kattığınızdan emin olun.
- Belirli bir noktadan önceyi kurtarma: PITR etkinse
Enabled
gösterilir. PITR devre dışıysaDisabled
görürsünüz.
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 etkinsePOINT_IN_TIME_RECOVERY_ENABLED
gösterilir. PITR devre dışıysaPOINT_IN_TIME_RECOVERY_DISABLED
gösterilir veyapointInTimeRecoveryEnablement
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. Bu yöntemler: get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery ve partitionQuery.
REST yöntemlerini kullanarak bir okuma işlemi gerçekleştirmek için aşağıdaki seçeneklerden birini deneyin:
Okuma yöntemi isteğinizde,
readTime
değerinireadOptions
yönteminde desteklenen bir PITR zaman damgası olarak iletin. PITR zaman damgası, son bir saat içindeki mikro saniyelik hassasiyet zaman damgası veya son bir saatten sonraki bir tam dakika zaman damgası olabilir ancakearliestVersionTime
değerinden önce olamaz.Birden çok PITR okuması için
ReadOnly
işleminin parçası olarakreadTime
parametresiniBeginTransaction
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ı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:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
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
gcloud firestore export
komutunu kullanarak veritabanınızı PITR verilerinden Cloud Storage'a aktarabilirsiniz. Zaman damgasının son yedi gün içinde tam dakikalık bir zaman damgası olduğu ancak earliestVersionTime
değerinden önce olmadığı durumlarda PITR verilerini dışa aktarabilirsiniz. Belirtilen zaman damgasında veriler artık mevcut değilse 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.
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
veya2023-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:
- Zaman damgasını RFC 3339 biçiminde belirtin.
Örneğin,
2023-05-26T10:20:00.00Z
veya2023-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
tarihinden önce olmadığından emin olun. Veriler belirtilen zaman damgasında artık mevcut değilse 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.
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ı uygulayın. Veritabanınızda mevcut bir belge varsa bu belgenin üzerine yazılır.