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
Google Cloud Platform 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 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
Google Cloud Platform 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 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ışıysaDisabled
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 etkinsePOINT_IN_TIME_RECOVERY_ENABLED
gösterir. PITR devre dışı bırakılırsaPOINT_IN_TIME_RECOVERY_DISABLED
ifadesini görürsünüz veyapointInTimeRecoveryEnablement
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:
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, ancakearliestVersionTime
değerinden daha erken olamaz.Birden fazla PITR okuması için
readTime
parametresiniBeginTransaction
yöntemiyle birlikteReadOnly
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:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListBelgeler
- FirestoreV1.PartitionQuery
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.
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
veya2023-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
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
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.
-
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.