หน้านี้อธิบายวิธีใช้การกู้คืน ณ จุดเวลาหนึ่ง (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 ขณะสร้างฐานข้อมูลโดยใช้คอนโซล Google Cloud - Cloud Firestore จะเริ่มเก็บรักษาเวอร์ชันนับจากจุดนั้นเป็นต้นไปหลังจากเปิดใช้ PITR
- คุณจะอ่านข้อมูล PITR ในกรอบเวลา PITR ไม่ได้หลังจากปิดใช้ PITR
- หากคุณเปิดใช้ PITR อีกครั้งทันทีหลังจากปิดใช้ ข้อมูล PITR ที่ผ่านมาจะใช้งานไม่ได้อีกต่อไป ระบบจะลบข้อมูล PITR ที่สร้างขึ้นก่อนปิดใช้ PITR หลังจากวันที่หมดอายุของ PITR
- หากคุณลบข้อมูลโดยไม่ตั้งใจในช่วง 1 ชั่วโมงที่ผ่านมาและปิดใช้ PITR ไว้ คุณจะกู้คืนข้อมูลได้โดยเปิดใช้ PITR ภายใน 1 ชั่วโมงหลังจากการลบ
- การอ่านข้อมูล PITR ที่หมดอายุจะดำเนินการไม่สำเร็จ
เปิดใช้ PITR
ก่อนใช้ PITR ให้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud เฉพาะโปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงินเท่านั้นที่จะใช้ฟังก์ชัน PITR ได้
วิธีเปิดใช้ PITR สําหรับฐานข้อมูล
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่จําเป็นจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกการกู้คืนภัยพิบัติ
คลิกแก้ไขเพื่อแก้ไขการตั้งค่า
เลือกช่องทำเครื่องหมายเปิดใช้การกู้คืนแบบจุดเวลา แล้วคลิกบันทึก
การเปิดใช้ PITR จะมีค่าใช้จ่ายสำหรับพื้นที่เก็บข้อมูล ดูข้อมูลเพิ่มเติมได้ที่การกำหนดราคา
หากต้องการปิดใช้ PITR ให้ยกเลิกการเลือกช่องทำเครื่องหมายเปิดใช้การกู้คืนช่วงเวลาจากหน้าการกู้คืนภัยพิบัติในคอนโซล Google Cloud
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-native
คุณปิดใช้ PITR ได้โดยใช้คำสั่ง gcloud firestore databases update
ดังนี้
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
แทนที่ค่าต่างๆ ดังนี้
DATABASE_ID
- ตั้งค่าเป็นรหัสฐานข้อมูลหรือ (ค่าเริ่มต้น)
ดูระยะเวลาเก็บรักษาและเวลาของเวอร์ชันแรกสุด
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลที่จําเป็นจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกการกู้คืนภัยพิบัติ
ในส่วนการตั้งค่า ให้จดบันทึกระยะเวลาการเก็บรักษาและเวลาที่เร็วที่สุดของเวอร์ชัน
- ระยะเวลาการเก็บรักษา: ระยะเวลาที่ Cloud Firestore เก็บรักษาข้อมูลทุกเวอร์ชันของฐานข้อมูล ค่าจะเป็น 1 ชั่วโมงเมื่อปิดใช้ PITR และ 7 วันเมื่อเปิดใช้ PITR
- เวลาของเวอร์ชันที่เก่าที่สุด: การประทับเวลาที่เก่าที่สุดที่อ่านข้อมูลเวอร์ชันเก่าได้ในกรอบเวลา PITR ค่านี้ได้รับการอัปเดตอย่างต่อเนื่องโดย Cloud Firestore และจะไม่ถูกต้องทันทีที่มีการค้นหา หากคุณใช้ค่านี้เพื่อกู้คืนข้อมูล โปรดคำนึงถึงเวลานับจากเวลาที่ระบบค้นหาค่าจนถึงเวลาที่คุณเริ่มการกู้คืน
- การกู้คืนช่วงเวลา: แสดง
Enabled
หากเปิดใช้ PITR หากปิดใช้ PITR คุณจะเห็นDisabled
gcloud
เรียกใช้คำสั่ง gcloud firestore databases describe ดังนี้
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/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
ที่ไหน
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 หรือตัวเชื่อมต่อ FirestoreIO Apache Beam
ไลบรารีของไคลเอ็นต์
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)}
)
REST API
ระบบรองรับการอ่าน PITR ในCloud Firestoreเมธอดการอ่านทั้งหมด ซึ่งได้แก่ get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery และ partitionQuery
หากต้องการอ่านโดยใช้เมธอด REST ให้ลองใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
ในคำขอวิธีการอ่าน ให้ส่งค่า
readTime
เป็นการประทับเวลา PITR ที่รองรับในเมธอดreadOptions
การประทับเวลา PITR อาจเป็นการประทับเวลาที่แม่นยําระดับไมโครวินาทีภายใน 1 ชั่วโมงที่ผ่านมา หรือการประทับเวลาที่แม่นยําระดับนาทีเต็มหลังจาก 1 ชั่วโมงที่ผ่านมา แต่ต้องไม่เร็วกว่าearliestVersionTime
ใช้พารามิเตอร์
readTime
ร่วมกับเมธอดBeginTransaction
เป็นส่วนหนึ่งของธุรกรรมReadOnly
สำหรับการอ่าน PITR หลายรายการ
Apache Beam
ใช้เครื่องมือเชื่อมต่อ Cloud FirestoreIO Apache Beam เพื่ออ่านหรือเขียนเอกสารในฐานข้อมูล Cloud Firestore ขนาดใหญ่ด้วย Dataflow
การอ่าน PITR ได้รับการสนับสนุนในวิธีการอ่านต่อไปนี้ของ Cloud FirestoreIO connector วิธีการอ่านเหล่านี้รองรับ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
หากไม่มีข้อมูลในการประทับเวลาที่ระบุ ระบบจะแสดงข้อผิดพลาด การประทับเวลาต้องเป็นนาทีเต็ม แม้ว่าเวลาดังกล่าวจะอยู่ใน 1 ชั่วโมงที่ผ่านมาก็ตาม - ระบบจะไม่เรียกเก็บเงินจากคุณสำหรับการส่งออก PITR ที่ไม่สําเร็จ
นําเข้าไปยังฐานข้อมูล
ทำตามขั้นตอนในหัวข้อนำเข้าเอกสารทั้งหมดเพื่อนำเข้าฐานข้อมูลที่ส่งออก หากมีเอกสารอยู่ในฐานข้อมูลอยู่แล้ว ระบบจะเขียนทับเอกสารนั้น