หน้านี้จะอธิบายวิธีใช้การกู้คืนช่วงเวลา (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
- เวลาของเวอร์ชันที่เร็วที่สุด: การประทับเวลาแรกสุดที่เวอร์ชันเก่าของ อ่านข้อมูลได้ในหน้าต่าง 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)}
)
REST API
การอ่าน 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
format [รูปแบบ]
เช่น
2023-05-26T10:20:00.00Z
หรือ2023-10-19T10:30:00.00-07:00
- ตรวจสอบว่าการประทับเวลาที่ระบุเป็นการประทับเวลาแบบเต็มนาที
ในช่วง 7 วันที่ผ่านมา แต่ไม่เร็วกว่า
earliestVersionTime
หากข้อมูลไม่อยู่ในตำแหน่งที่ระบุแล้ว การประทับเวลา ข้อผิดพลาดจะสร้างขึ้น การประทับเวลาต้องเป็นแบบเต็มนาที แม้ว่าเวลาที่ระบุจะอยู่ในช่วงชั่วโมงที่ผ่านมาก็ตาม - ระบบจะไม่เรียกเก็บเงินสำหรับการส่งออก PITR ที่ล้มเหลว
นำเข้าไปยังฐานข้อมูล
ทำตามขั้นตอนในนำเข้าเอกสารทั้งหมดเพื่อนำเข้าเอกสาร ฐานข้อมูลที่ส่งออก ถ้ามีเอกสารในฐานข้อมูลอยู่แล้ว ถูกเขียนทับ