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
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 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ışıysaDisabled
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 isePOINT_IN_TIME_RECOVERY_ENABLED
gösterilir etkin olduğundan emin olun. PITR devre dışıysaPOINT_IN_TIME_RECOVERY_DISABLED
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. 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:
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 mikrosaniye hassasiyeti 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ı. Bu okuma yöntemleri
PITR için kullanabileceğiniz withReadTime(@Nullable Instant readTime)
yöntemi
şunu okuyor:
- 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
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.
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:
- RFC 3339'da zaman damgasını belirtin
biçimindedir.
Örneğin,
2023-05-26T10:20:00.00Z
veya2023-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.
Veritabanına aktarın.
dışa aktarılmıştır. Veritabanınızda mevcut olan bir doküman varsa farklı olabilir.