หน้านี้จะอธิบายวิธีใช้การกู้คืนช่วงเวลา (PITR) เพื่อเก็บรักษาและกู้คืนข้อมูลใน Cloud Firestore
หากต้องการทำความเข้าใจแนวคิดของ PITR โปรดดูการกู้คืนช่วงเวลา
สิทธิ์
หากต้องการรับสิทธิ์ที่จำเป็นต่อการจัดการการตั้งค่า PITR โปรดขอให้ผู้ดูแลระบบมอบบทบาท IAM ต่อไปนี้ในโปรเจ็กต์ที่คุณต้องการเปิดใช้ PITR
- เจ้าของ Cloud Datastore (
roles/datastore.owner
)
สำหรับบทบาทที่กำหนดเอง โปรดตรวจสอบว่าได้ให้สิทธิ์ต่อไปนี้แล้ว
- วิธีเปิดใช้ PITR เมื่อสร้างฐานข้อมูล
datastore.databases.create
- วิธีอัปเดตการตั้งค่า PITR ในฐานข้อมูลเดิม:
datastore.databases.update
,datastore.databases.list
- หากต้องการอ่านจากข้อมูล PITR:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- วิธีส่งออกข้อมูล PITR:
datastore.databases.export
- วิธีนำเข้าข้อมูล PITR:
datastore.databases.import
ก่อนเริ่มต้น
โปรดทราบประเด็นต่อไปนี้ก่อนที่จะเริ่มใช้ PITR
- คุณไม่สามารถเริ่มอ่านจาก 7 วันที่ผ่านมาได้ทันทีหลังจากเปิดใช้ PITR
- หากต้องการเปิดใช้ PITR เมื่อสร้างฐานข้อมูล คุณต้องใช้คำสั่ง
gcloud firestore databases create
ระบบไม่รองรับการเปิดใช้ PITR ขณะสร้างฐานข้อมูลโดยใช้คอนโซล GCP - Cloud Firestore เริ่มเก็บเวอร์ชันนับจากจุดนั้นเป็นต้นไปหลังจากเปิดใช้ PITR
- คุณไม่สามารถอ่านข้อมูล PITR ในหน้าต่าง PITR ได้หลังจากที่ปิดใช้งาน PITR
- ถ้าคุณเปิดใช้งาน PITR อีกครั้งทันที หลังจากปิดใช้งาน ข้อมูล PITR ที่ผ่านมา จะใช้งานไม่ได้อีกต่อไป ข้อมูล PITR ใดๆ ที่สร้างขึ้นก่อนปิดใช้งาน PITR จะถูกลบหลังจากวันที่หมดอายุ PITR
- หากคุณลบข้อมูลไปโดยบังเอิญในชั่วโมงที่ผ่านมาและปิดใช้งาน PITR ไว้ คุณสามารถกู้คืนข้อมูลได้โดยเปิดใช้ PITR ภายใน 1 ชั่วโมงหลังจากลบ
- การอ่านข้อมูล PITR ที่หมดอายุแล้วล้มเหลว
เปิดใช้งาน PITR
ก่อนใช้ PITR ให้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud มีเพียงโปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่จะใช้ฟังก์ชัน PITR ได้
หากต้องการเปิดใช้งาน PITR สำหรับฐานข้อมูลของคุณ ให้ทำดังนี้
คอนโซล
ในคอนโซล Google Cloud Platform ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิก การกู้ข้อมูลคืนหลังจากภัยพิบัติ
คลิกแก้ไขเพื่อแก้ไขการตั้งค่า
เลือกช่องทำเครื่องหมายเปิดใช้การกู้คืนช่วงเวลา แล้วคลิกบันทึก
การเปิดใช้ PITR จะมีค่าใช้จ่ายในการจัดเก็บ ดูข้อมูลเพิ่มเติมได้ที่ราคา
หากต้องการปิดใช้ PITR ให้ยกเลิกการเลือกช่องทำเครื่องหมายเปิดใช้การกู้คืนช่วงเวลาจากหน้าการกู้ข้อมูลคืนหลังจากภัยพิบัติในคอนโซล GCP
gcloud
เปิดใช้ PITR ระหว่างการสร้างฐานข้อมูลด้วยคำสั่ง gcloud firestore databases create
ดังนี้
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
แทนที่ค่าต่อไปนี้
Location
- ตำแหน่งที่คุณต้องการสร้างฐานข้อมูลDATABASE_ID
- ตั้งค่าเป็นรหัสฐานข้อมูลหรือ (ค่าเริ่มต้น)TYPE
- ตั้งค่าเป็นต้นทางของ Firestore
คุณปิดใช้ PITR ได้โดยใช้คำสั่ง gcloud firestore databases update
ดังนี้
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
แทนที่ค่าต่อไปนี้
DATABASE_ID
- ตั้งค่าเป็นรหัสฐานข้อมูลหรือ (ค่าเริ่มต้น)
ดูระยะเวลาเก็บรักษาและเวลาของเวอร์ชันแรกสุด
คอนโซล
ในคอนโซล Google Cloud Platform ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่ต้องการจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิก การกู้ข้อมูลคืนหลังจากภัยพิบัติ
ในส่วนการตั้งค่า ให้จดบันทึกระยะเวลาเก็บรักษาและเวลาของเวอร์ชันแรกสุด
- ระยะเวลาเก็บรักษา: ระยะเวลาที่ Cloud Firestore เก็บรักษาข้อมูลทุกเวอร์ชันสำหรับฐานข้อมูล ค่าคือ 1 ชั่วโมงเมื่อปิดใช้ PITR และเมื่อเปิดใช้ PITR เป็นเวลา 7 วัน
- เวลาของเวอร์ชันที่เร็วที่สุด: การประทับเวลาแรกสุดที่อ่านข้อมูลเวอร์ชันเก่าๆ ได้ในหน้าต่าง PITR Cloud Firestore จะอัปเดตค่านี้อย่างต่อเนื่องและจะไม่มีการอัปเดตอีกต่อไปเมื่อมีการค้นหา หากคุณใช้ค่านี้เพื่อกู้คืนข้อมูล อย่าลืมพิจารณาระยะเวลานับตั้งแต่เวลาที่ค้นหาค่านี้จนถึงตอนที่เริ่มกู้คืนข้อมูล
- การกู้คืนช่วงเวลา: แสดง
Enabled
หากเปิดใช้ PITR หาก PITR ปิดอยู่ คุณจะเห็นDisabled
gcloud
เรียกใช้คำสั่ง gcloudfirestoreฐานข้อมูลs description ดังนี้
gcloud firestore databases describe --database=DATABASE_ID
แทนที่ DATABASE_ID
ด้วยรหัสฐานข้อมูลหรือ default
เอาต์พุตมีดังนี้
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
ที่ไหน
earliestVersionTime
- การประทับเวลาของข้อมูล PITR ที่จัดเก็บแรกสุดpointInTimeRecoveryEnablement
: แสดงPOINT_IN_TIME_RECOVERY_ENABLED
หากเปิดใช้ PITR หาก PITR ปิดอยู่ คุณอาจเห็นPOINT_IN_TIME_RECOVERY_DISABLED
หรือช่องpointInTimeRecoveryEnablement
อาจไม่แสดงversionRetentionPeriod
- ระยะเวลาที่เก็บรักษาข้อมูล PITR ในหน่วยมิลลิวินาที ค่าเป็น 1 ชั่วโมงเมื่อปิดใช้ PITR หรืออาจเป็นเวลา 7 วันหากเปิดใช้ PITR
อ่านข้อมูล PITR
คุณอ่านข้อมูล PITR ได้โดยใช้ไลบรารีของไคลเอ็นต์, เมธอด REST API หรือเครื่องมือเชื่อมต่อ Apacheบีมของ FirestoreIO
ไลบรารีของไคลเอ็นต์
Java
คุณต้องใช้ธุรกรรม ReadOnly
เพื่ออ่านข้อมูล PITR คุณไม่สามารถระบุ readTime
โดยตรงในการอ่าน
โปรดดูข้อมูลเพิ่มเติมที่ธุรกรรมและการเขียนแบบกลุ่ม
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();
โหนด
คุณต้องใช้ธุรกรรม ReadOnly
เพื่ออ่านข้อมูล PITR คุณไม่สามารถระบุ readTime
โดยตรงในการอ่าน
โปรดดูข้อมูลเพิ่มเติมที่ธุรกรรมและการเขียนแบบกลุ่ม
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)}
)
API ของ REST
การอ่าน PITR ใช้ได้ในวิธีการอ่านของ Cloud Firestore ทั้งหมด ได้แก่ get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery และ partitionQuery
หากต้องการอ่านโดยใช้เมธอด REST ให้ลองใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
ในคำขอวิธีการอ่านของคุณ ให้ส่งค่า
readTime
เป็นการประทับเวลา PITR ที่รองรับในเมธอดreadOptions
การประทับเวลา PITR อาจเป็นการประทับเวลาที่มีความแม่นยำระดับไมโครวินาทีภายในชั่วโมงที่ผ่านมาหรือการประทับเวลาแบบเต็มนาทีหลังจากชั่วโมงที่ผ่านมา แต่ต้องไม่มาก่อนearliestVersionTime
ใช้พารามิเตอร์
readTime
ร่วมกับเมธอดBeginTransaction
เป็นส่วนหนึ่งของธุรกรรมReadOnly
สำหรับการอ่าน PITR หลายรายการ
Apache Beam
ใช้เครื่องมือเชื่อมต่อ Apache Beam ใน Cloud FirestoreIO เพื่ออ่านหรือเขียนเอกสารในฐานข้อมูล Cloud Firestore จำนวนมากด้วย Dataflow
การอ่าน PITR ได้รับการสนับสนุนในวิธีการอ่านต่อไปนี้ของเครื่องมือเชื่อมต่อ Cloud FirestoreIO วิธีการอ่านเหล่านี้รองรับเมธอด withReadTime(@Nullable Instant readTime)
ที่คุณใช้สำหรับอ่าน PITR ได้
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
โค้ดต่อไปนี้ใช้ได้กับโค้ดไปป์ไลน์ Dataflow สำหรับการดำเนินการอ่านหรือเขียนแบบกลุ่ม ตัวอย่างนี้ใช้เมธอด withReadTime(@Nullable Instant readTime)
สำหรับการอ่าน PITR
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())
...
ดูรายการตัวอย่าง readTime
ทั้งหมดในไปป์ไลน์ Dataflow ได้ที่ที่เก็บของ GitHub
ส่งออกและนำเข้าจากข้อมูล PITR
คุณส่งออกฐานข้อมูลไปยัง Cloud Storage จากข้อมูล PITR ได้โดยใช้คำสั่ง gcloud firestore export
คุณส่งออกข้อมูล PITR ได้โดยการประทับเวลาจะเป็นเวลาเต็มนาทีภายใน 7 วันที่ผ่านมา แต่ต้องไม่เร็วกว่า earliestVersionTime
หากไม่มีข้อมูลอยู่ในการประทับเวลาที่ระบุแล้ว
การส่งออกจะล้มเหลว
การดำเนินการส่งออก PITR สนับสนุนตัวกรองทั้งหมด รวมถึงการส่งออกเอกสารทั้งหมด และการส่งออกคอลเล็กชันที่ระบุ
ส่งออกฐานข้อมูล โดยระบุพารามิเตอร์
snapshot-time
ไปยังการประทับเวลาการกู้คืนที่ต้องการgcloud
เรียกใช้คำสั่งต่อไปนี้เพื่อส่งออกฐานข้อมูลไปยังที่เก็บข้อมูล
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]
ที่ไหน
BUCKET_NAME_PATH
- ที่เก็บข้อมูล Cloud Storage ที่ถูกต้องซึ่งมีคำนำหน้าเส้นทางที่ไม่บังคับซึ่งเก็บไฟล์ส่งออกPITR_TIMESTAMP
- การประทับเวลา PITR ที่ระดับรายละเอียดนาที เช่น2023-05-26T10:20:00.00Z
หรือ2023-10-19T10:30:00.00-07:00
COLLECTION_IDS
- รายการรหัสคอลเล็กชันหรือรหัสกลุ่มคอลเล็กชัน เช่น'specific collection group1'
,'specific collection group2'
NAMESPACE_IDS
- รายการรหัสเนมสเปซ เช่น'customer'
,'orders'
โปรดทราบจุดต่อไปนี้ก่อนส่งออกข้อมูล PITR
- ระบุการประทับเวลาในรูปแบบ RFC 3339
เช่น
2023-05-26T10:20:00.00Z
หรือ2023-10-19T10:30:00.00-07:00
- ตรวจสอบว่าการประทับเวลาที่ระบุเป็นการประทับเวลาแบบเต็มนาทีภายในช่วง 7 วันที่ผ่านมา แต่ต้องไม่เร็วกว่า
earliestVersionTime
หากไม่มีข้อมูลในการประทับเวลาที่ระบุแล้ว จะเกิดข้อผิดพลาดขึ้น การประทับเวลาต้องเป็นแบบเต็มนาที แม้ว่าเวลาที่ระบุจะอยู่ในช่วงชั่วโมงที่ผ่านมาก็ตาม - ระบบจะไม่เรียกเก็บเงินสำหรับการส่งออก PITR ที่ล้มเหลว
นำเข้าไปยังฐานข้อมูล
ทำตามขั้นตอนในนำเข้าเอกสารทั้งหมดเพื่อนำเข้าฐานข้อมูลที่ส่งออก ถ้ามีเอกสารในฐานข้อมูลอยู่แล้ว เอกสารนั้นจะถูกเขียนทับ