หากต้องการย้ายข้อมูลจากฐานข้อมูล Firestore Standard Edition ไปยังฐานข้อมูล Firestore Enterprise Edition เราขอแนะนำให้ใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
ฟีเจอร์นำเข้าและส่งออก ไฟล์ข้อมูลจากการดำเนินการนำเข้าใช้ได้กับทั้งรุ่น Enterprise และรุ่น Standard
เทมเพลต
firestore-to-firestoreDataflow บริการ Dataflow ช่วยให้คุณสร้างไปป์ไลน์ข้อมูลได้ และเทมเพลตfirestore-to-firestoreจะสร้างไปป์ไลน์การประมวลผลแบบเป็นกลุ่มระหว่างฐานข้อมูล Cloud Firestore
การนำเข้าและส่งออกเป็นตัวเลือกที่ง่ายกว่าในการเรียกใช้โดยมีตัวเลือกการกำหนดค่าน้อยกว่า
Dataflow เทมเพลตปรับแต่งได้มากกว่า คุณสามารถขยายโค้ดเทมเพลตเพื่อทำการย้ายข้อมูลบางส่วน หรือแปลงข้อมูลได้ นอกจากนี้ คุณยังควบคุมจำนวนและขนาดของ Worker ได้ด้วย
ทั้ง 2 ตัวเลือกนี้รองรับการย้ายข้อมูลในโปรเจ็กต์และภูมิภาคต่างๆ
ย้ายข้อมูลด้วยการส่งออกและนำเข้า
หากต้องการย้ายข้อมูลด้วยการดำเนินการส่งออกและนำเข้า โปรดดูส่งออกและนำเข้าข้อมูล หากต้องการย้ายข้อมูลไปยังฐานข้อมูลในโปรเจ็กต์อื่น โปรดดูย้ายข้อมูลระหว่างโปรเจ็กต์
ย้ายข้อมูลด้วยเทมเพลต Dataflow
ทำตามวิธีการต่อไปนี้เพื่อย้ายข้อมูลด้วยเทมเพลต
firestore-to-firestore Dataflow
ก่อนเริ่มต้น
ก่อนเริ่มย้ายข้อมูล โปรดตรวจสอบว่าได้เปิดใช้การกู้คืน ณ จุดเวลา (PITR) ใน ฐานข้อมูลต้นทางแล้ว Dataflow งานใช้ PITR เพื่ออ่านข้อมูลที่การประทับเวลา PITR หากปิดใช้ PITR งานจะล้มเหลวหากทำงานนานกว่า 1 ชั่วโมง
กำหนดบทบาทที่จำเป็นตามที่อธิบายไว้ในส่วนถัดไป
บทบาทที่จำเป็น
หากต้องการย้ายข้อมูลจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่ง ให้กำหนดบทบาทต่อไปนี้ นอกจากนี้ คุณยังอาจได้รับสิทธิ์ที่จำเป็นผ่านบทบาทที่กำหนดเองหรือบทบาทอื่นๆ ที่กำหนดไว้ล่วงหน้าได้ด้วย
- หากต้องการรับสิทธิ์ที่จำเป็นในการสร้างฐานข้อมูลใหม่และเข้าถึงCloud Firestoreข้อมูล ให้ขอให้ผู้ดูแลระบบมอบบทบาท Identity and Access Management (IAM) เจ้าของ Cloud Datastore (
roles/datastore.owner) ในโปรเจ็กต์ให้แก่คุณ -
หากต้องการให้สิทธิ์การอ่านและการเขียนแก่Dataflow งานในฐานข้อมูล Cloud Firestore ให้กำหนดบทบาท IAM ผู้ใช้ Cloud Datastore (
roles/datastore.user) ให้กับDataflow บัญชีบริการ ของ Worker (เช่นPROJECT_NUMBER-compute@) ในโปรเจ็กต์ดูข้อมูลเพิ่มเติมเกี่ยวกับDataflowความปลอดภัยได้ที่Dataflowความปลอดภัยและสิทธิ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการให้บทบาท IAM ได้ที่จัดการการเข้าถึงโปรเจ็กต์ โฟลเดอร์ และองค์กร
1. สร้างฐานข้อมูล Firestore Enterprise Edition ใหม่
หากต้องการย้ายข้อมูลจากฐานข้อมูลรุ่น Standard ไปยังฐานข้อมูลรุ่น Enterprise คุณต้องสร้างฐานข้อมูลปลายทางรุ่น Enterprise ก่อน ดูหัวข้อสร้างฐานข้อมูล
2. เรียกใช้เทมเพลต Dataflow firestore-to-firestore
กำหนดค่าและเรียกใช้Dataflow งานด้วยเทมเพลต firestore-to-firestore
เทมเพลตรองรับการย้ายข้อมูลทั้งฐานข้อมูลหรือเฉพาะกลุ่มคอลเล็กชันที่ระบุ
ข้อจำกัด
โปรดพิจารณาข้อจำกัดต่อไปนี้สำหรับเทมเพลต firestore-to-firestore
Dataflow
- ฐานข้อมูลต้นทางต้องเป็นฐานข้อมูลรุ่น Standard
- การย้ายข้อมูลจะอ่านข้อมูล ณ เวลาอ่านที่เฉพาะเจาะจง เราขอแนะนำให้เปิดใช้การกู้คืนช่วงเวลา (PITR) ในฐานข้อมูลต้นทาง หากไม่ได้เปิดใช้ PITR ข้อมูลจะหมดอายุหลังจาก 1 ชั่วโมง และ อาจมีเวลาไม่เพียงพอสำหรับการย้ายข้อมูลให้เสร็จสมบูรณ์ PITR จะขยายการเก็บรักษาข้อมูลเป็น 7 วัน
- ระบบจะไม่ย้ายข้อมูลดัชนี
Dataflow ไม่ได้ย้ายข้อมูลการกำหนดค่าฐานข้อมูล เช่น นโยบายเวลาในการใช้งาน (TTL), การสำรองข้อมูล, PITR และคีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK)
คุณต้องกำหนดค่าการตั้งค่าเหล่านี้ในฐานข้อมูลใหม่ รอจนกว่าการย้ายข้อมูลจะเสร็จสิ้นเพื่อกำหนดค่า TTL, ข้อมูลสำรอง และ PITR ในฐานข้อมูลปลายทางเพื่อปรับปรุงความเร็ว ของการย้ายข้อมูล
ตัวอย่างต่อไปนี้แสดงวิธีเรียกใช้เทมเพลตโดยใช้ Google Cloud CLI
ย้ายข้อมูลทั้งหมด
หากต้องการย้ายข้อมูลทั้งหมด ให้ใช้คำสั่งต่อไปนี้
gcloud dataflow flex-template run "JOB_NAME" \ --project "PROJECT" \ --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
แทนที่ค่าต่อไปนี้
JOB_NAME: ชื่อของงานPROJECT: รหัสของโปรเจ็กต์ Google CloudREGION_NAME: Google Cloud ตำแหน่ง ที่คุณต้องการเรียกใช้Dataflow งาน ใช้ตำแหน่งที่อยู่ใกล้กับฐานข้อมูลVERSION: เวอร์ชันของเทมเพลตที่คุณต้องการใช้ คุณใช้ค่าต่อไปนี้ได้latestเพื่อใช้เทมเพลตเวอร์ชันล่าสุด ซึ่งมีอยู่ในโฟลเดอร์หลักแบบไม่ระบุวันที่ในที่เก็บข้อมูล - gs://dataflow-templates-REGION_NAME/latest/- ชื่อเวอร์ชัน เช่น
2023-09-12-00_RC00เพื่อใช้เทมเพลตเวอร์ชันที่เฉพาะเจาะจง ซึ่งจะซ้อนอยู่ในโฟลเดอร์หลักที่มีวันที่ที่เกี่ยวข้องในที่เก็บข้อมูล - gs://dataflow-templates-REGION_NAME/
SOURCE_PROJECT_ID: รหัสของGoogle Cloud โปรเจ็กต์แหล่งที่มาซึ่งมีฐานข้อมูล Firestore Standard EditionSOURCE_DATABASE_ID: รหัสของฐานข้อมูลCloud Firestoreต้นทางDESTINATION_PROJECT_ID: รหัสของโปรเจ็กต์ปลายทาง Google Cloud สำหรับฐานข้อมูล Cloud Firestore ใหม่DESTINATION_DATABASE_ID: รหัสของฐานข้อมูลCloud FirestoreปลายทางREAD_TIME: การประทับเวลาเพื่ออ่านข้อมูลจาก ฐานข้อมูลแหล่งที่มา ตั้งค่าเป็นการประทับเวลาใน รูปแบบ RFC 3339 ที่มีความละเอียดระดับนาที เช่น2026-05-15T16:31:00.00Zการประทับเวลาที่ถูกต้องเร็วที่สุดจะขึ้นอยู่กับการตั้งค่าการกู้คืนช่วงเวลา (PITR) ดูรับเวลาเวอร์ชันแรกสุด
ย้ายข้อมูลกลุ่มคอลเล็กชันที่ระบุ
หากต้องการย้ายข้อมูลเฉพาะกลุ่มคอลเล็กชันบางกลุ่ม ให้ใช้คำสั่งต่อไปนี้
gcloud dataflow jobs run "JOB_NAME" \ --project "PROJECT" \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
แทนที่ค่าต่อไปนี้
JOB_NAME: ชื่อของงานPROJECT: รหัสของโปรเจ็กต์ Google CloudREGION_NAME: Google Cloud ตำแหน่ง ที่คุณต้องการเรียกใช้Dataflow งาน ใช้ตำแหน่งที่อยู่ใกล้กับฐานข้อมูลVERSION: เวอร์ชันของเทมเพลตที่คุณต้องการใช้ คุณใช้ค่าต่อไปนี้ได้latestเพื่อใช้เทมเพลตเวอร์ชันล่าสุด ซึ่งอยู่ในโฟลเดอร์หลักแบบไม่ระบุวันที่ในที่เก็บข้อมูล gs://dataflow-templates-REGION_NAME/latest/- ชื่อเวอร์ชัน เช่น
2023-09-12-00_RC00เพื่อใช้เทมเพลตเวอร์ชันที่เฉพาะเจาะจง ซึ่งจะอยู่ในโฟลเดอร์หลักที่มีการระบุวันที่ที่เกี่ยวข้องในที่เก็บข้อมูล - gs://dataflow-templates-REGION_NAME/
SOURCE_PROJECT_ID: รหัสของโปรเจ็กต์แหล่งที่มา Google Cloud ที่มี ฐานข้อมูล Firestore Standard EditionSOURCE_DATABASE_ID: รหัสของฐานข้อมูลCloud Firestoreต้นทางCOLLECTION_GROUP_IDS: รายการรหัสกลุ่มคอลเล็กชันที่คั่นด้วยคอมมาเพื่อย้ายข้อมูลระบบจะไม่รวมคอลเล็กชันย่อยแบบเรียกซ้ำ ตัวอย่างเช่น หากคุณระบุ
usersกลุ่มคอลเล็กชัน การย้ายข้อมูลจะไม่รวมmessagesคอลเล็กชันย่อยที่/users/userid/messagesเว้นแต่คุณจะระบุmessagesกลุ่มคอลเล็กชันด้วยDESTINATION_PROJECT_ID: รหัสของโปรเจ็กต์ปลายทาง Google Cloud สำหรับฐานข้อมูล Cloud Firestore ใหม่DESTINATION_DATABASE_ID: รหัสของฐานข้อมูลCloud FirestoreปลายทางREAD_TIME: การประทับเวลาเพื่ออ่านข้อมูลจากฐานข้อมูลแหล่งที่มา ตั้งค่าเป็นการประทับเวลาในรูปแบบ RFC 3339 ที่มีความละเอียดระดับนาที เช่น2026-05-15T16:31:00.00Zการประทับเวลาที่ถูกต้องเร็วที่สุดจะขึ้นอยู่กับการตั้งค่าการกู้คืนช่วงเวลา (PITR) ดูรับเวลาเวอร์ชันแรกสุด
3. กำหนดค่าฐานข้อมูล
firestore-to-firestore งานจะย้ายเฉพาะข้อมูล
ระบบจะไม่ย้ายข้อมูลดัชนีและการตั้งค่าฐานข้อมูลอื่นๆ นอกจากการย้ายข้อมูลแล้ว คุณควรพิจารณากำหนดค่าต่อไปนี้ในฐานข้อมูลใหม่ด้วย
ดัชนี: ฐานข้อมูล Firestore Enterprise Edition ไม่จำเป็นต้องมีดัชนีอย่างเคร่งครัดเพื่อเรียกใช้คำค้นหา และไม่ได้สร้างดัชนีอัตโนมัติโดยค่าเริ่มต้น ดูวิธีสร้างดัชนีสำหรับการค้นหาได้ที่ส่วนต่อไปนี้
- ภาพรวมดัชนีของรุ่น Firestore Enterprise
- เพิ่มประสิทธิภาพการค้นหาด้วยดัชนี
- คุณสามารถใช้ Firebase CLI เพื่อส่งออกดัชนีและนําไปใช้กับฐานข้อมูลใหม่ได้
- ใช้ข้อมูลเชิงลึกเกี่ยวกับคำค้นหา เพื่อระบุคำค้นหาที่คุณเพิ่มประสิทธิภาพได้ด้วยดัชนี
TTL: สร้างนโยบาย TTL
ข้อมูลสำรอง: ตั้งค่าข้อมูลสำรอง
PITR: เปิดใช้ PITR
หลังจากกำหนดค่าฐานข้อมูลแล้ว คุณจะทดสอบแอปต่อด้วยฐานข้อมูลใหม่ได้ หากต้องการย้ายข้อมูลให้เสร็จสมบูรณ์ ให้อัปเดตแอปพลิเคชันเพื่อใช้ฐานข้อมูลใหม่
การแก้ปัญหา
สำหรับฐานข้อมูลขนาดใหญ่ งานอาจล้มเหลวหากอ่านข้อมูลมากเกินไปในครั้งเดียว วิธีแก้ไขปัญหานี้
เพิ่มค่า
maxNumWorkers
ขั้นตอนถัดไป
- ดูข้อมูลเกี่ยวกับการค้นหาข้อมูลด้วย การดำเนินการไปป์ไลน์
- ดูวิธี เพิ่มประสิทธิภาพการค้นหาใน Firestore Enterprise Edition
- ทำความเข้าใจวิธีปรับขนาดฐานข้อมูลรุ่น Enterprise