หน้านี้อธิบายวิธีใช้การกู้คืน ณ จุดเวลาหนึ่ง (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 ที่ไม่สําเร็จ
นําเข้าไปยังฐานข้อมูล
ทำตามขั้นตอนในหัวข้อนำเข้าเอกสารทั้งหมดเพื่อนำเข้าฐานข้อมูลที่ส่งออก หากมีเอกสารอยู่ในฐานข้อมูลอยู่แล้ว ระบบจะเขียนทับเอกสารนั้น