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