Bu sayfada, Cloud Firestore'da verileri saklamak ve kurtarmak için belirli bir noktadan önceyi kurtarma (PITR) işlevinin 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 üzere yöneticinizden PITR'yi etkinleştirmek istediğiniz projede 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ında PITR ayarlarını güncellemek için:
datastore.databases.update
,datastore.databases.list
- PITR verilerinden okuma işlemi 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 noktalara dikkat edin:
- PITR'yi etkinleştirdikten hemen sonra yedi gün öncesinden okumaya başlayamazsınız.
- Veritabanı oluştururken PITR'yi etkinleştirmek istiyorsanız
gcloud firestore databases create
komutunu kullanmanız gerekir. Google Cloud Console'u kullanarak veritabanı oluştururken PITR'yi etkinleştirme desteklenmez. - Cloud Firestore, PITR etkinleştirildikten sonraki sürümleri saklamaya 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 devre dışı bırakılmadan önce oluşturulan tüm PITR verileri, PITR geçerlilik bitiş tarihinden sonra silinir.
- Son bir saat içinde yanlışlıkla veri 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 tüm okuma işlemleri başarısız olur.
PITR'yi etkinleştirme
PITR'yi kullanmadan önce Google Cloud projeniz için faturalandırmayı etkinleştirin. PITR işlevini yalnızca faturalandırma özelliği etkinleştirilmiş Google Cloud projeleri kullanabilir.
Veritabanınız için PITR'yi etkinleştirmek üzere:
Konsol
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları 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 noktaya geri yüklemeyi etkinleştir onay kutusunu işaretleyin ve Kaydet'i tıklayın.
PITR'nin etkinleştirilmesi depolama maliyetlerine neden olur. Daha fazla bilgi için Fiyatlandırma bölümüne bakın.
PITR'yi devre dışı bırakmak için Google Cloud Console'daki Afet Kurtarma sayfasında Belirli bir noktadan önceyi kurtarmayı etkinleştir onay kutusunun işaretini kaldırın.
gcloud
Veritabanı oluşturma sırasında gcloud firestore databases create
ve --enable-ptir
komutlarıyla PITR'yi aşağıdaki şekilde etkinleştirin:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=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 ayarlanır.
PITR'yi aşağıdaki gibi gcloud firestore databases update
komutunu kullanarak devre dışı bırakabilirsiniz:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
Değerleri aşağıdaki gibi değiştirin:
DATABASE_ID
: Veritabanı kimliği veya (varsayılan) olarak ayarlanır.
Saklama süresini ve en eski sürümün zamanını alma
Konsol
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanları 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 eski sürüm zamanı'nı not edin.
- Saklama süresi: Cloud Firestore'ın veritabanı için verilerin tüm sürümlerini sakladığı süre. PITR devre dışıyken değer bir saat, PITR etkinleştirildiğinde ise yedi gündür.
- En erken sürüm zamanı: Verilerin 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 hale gelir. Bu değeri verileri kurtarmak için 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
simgesini görürsünüz.
gcloud
gcloud firestore databases describe komutunu aşağıdaki gibi çalıştırın:
gcloud firestore databases describe --database=DATABASE_ID
DATABASE_ID
yerine veritabanı kimliğini veya '(default)'
değerini girin.
Çıkış:
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
Burada:
earliestVersionTime
: Depolanan en eski PITR verilerinin zaman damgası.pointInTimeRecoveryEnablement
: PITR etkinsePOINT_IN_TIME_RECOVERY_ENABLED
gösterilir. PITR devre dışı bırakılırsaPOINT_IN_TIME_RECOVERY_DISABLED
veyapointInTimeRecoveryEnablement
alanı gösterilmeyebilir.versionRetentionPeriod
: PITR verilerinin saklandığı süre (milisaniye cinsinden). PITR devre dışıysa değer 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
değerini doğrudan belirtemezsiniz.
Daha fazla bilgi için İşlemler ve toplu yazmalar başlıklı makaleyi inceleyin.
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
değerini doğrudan belirtemezsiniz.
Daha fazla bilgi için İşlemler ve toplu yazmalar başlıklı makaleyi inceleyin.
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ı, get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery ve partitionQuery olmak üzere tüm Cloud Firestore okuma yöntemlerinde desteklenir.
REST yöntemlerini kullanarak 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 hassasiyetinde bir zaman damgası veya son bir saatin ötesinde tam dakika zaman damgası olabilir ancakearliestVersionTime
tarihinden önce olamaz.Birden fazla PITR okuma işlemi için
ReadOnly
işlemi kapsamındareadTime
parametresiniBeginTransaction
yöntemiyle birlikte kullanın.
Apache Beam
Dataflow ile büyük ölçekte Cloud Firestore veritabanındaki belgeleri 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 kodu ile 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 işlem hattındaki readTime
örneklerinin tam listesi için GitHub deposuna bakın.
PITR verilerinden dışa ve içe aktarma
gcloud firestore export
komutunu kullanarak veritabanınızı PITR verilerinden Cloud Storage biçiminde dışa aktarabilirsiniz. Zaman damgasının son yedi gün içinde tam dakika zaman damgası olduğu PITR verilerini dışa aktarabilirsiniz ancak earliestVersionTime
tarihinden önceki verileri dışa aktaramazsınız. Veriler belirtilen zaman damgasında artık mevcut değilse dışa aktarma işlemi başarısız olur.
PITR dışa aktarma işlemi, tüm belgelerin dışa aktarılması ve belirli koleksiyonların dışa aktarılması da dahil olmak üzere tüm filtreleri destekler.
Veritabanını dışa aktarırken
snapshot-time
parametresini seçilen kurtarma zaman damgasına göre belirtin.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 aktarılan dosyaların depolandığı, isteğe bağlı yol ön eki içeren 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
veya2023-10-19T10:30:00.00-07:00
).COLLECTION_IDS
- koleksiyon kimliklerinin veya koleksiyon grubu kimliklerinin listesi gibi-'specific-collection-group1','specific-collection-group2'
.NAMESPACE_IDS
- ad alanı kimliklerinin 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
veya2023-10-19T10:30:00.00-07:00
. - Belirttiğiniz zaman damgasının, son yedi gün içinde ancak
earliestVersionTime
tarihinden önce olmayan tam dakikalık bir zaman damgası olduğundan emin olun. Belirtilen zaman damgasında artık veri yoksa hata oluşturulur. Belirtilen süre son bir saat içinde olsa bile zaman damgası tam dakika olmalıdır. - Başarısız bir PITR dışa aktarma işlemi için sizden ödeme alınmaz.
Verileri bir veritabanına aktarma.
Dışa aktarılan veritabanınızı içe aktarmak için Tüm dokümanları içe aktarma başlıklı makaledeki adımları uygulayın. Veritabanınızda zaten bulunan dokümanların üzerine yazılır.