ย้ายข้อมูลจากรุ่น Standard ไปยังรุ่น Enterprise

หากต้องการย้ายข้อมูลจากฐานข้อมูล Firestore Standard Edition ไปยังฐานข้อมูล Firestore Enterprise Edition เราขอแนะนำให้ใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

  • ฟีเจอร์นำเข้าและส่งออก ไฟล์ข้อมูลจากการดำเนินการนำเข้าใช้ได้กับทั้งรุ่น Enterprise และรุ่น Standard

  • เทมเพลต firestore-to-firestore Dataflow บริการ Dataflow ช่วยให้คุณสร้างไปป์ไลน์ข้อมูลได้ และเทมเพลต firestore-to-firestore จะสร้างไปป์ไลน์การประมวลผลแบบเป็นกลุ่มระหว่างฐานข้อมูล Cloud Firestore

การนำเข้าและส่งออกเป็นตัวเลือกที่ง่ายกว่าในการเรียกใช้โดยมีตัวเลือกการกำหนดค่าน้อยกว่า

Dataflow เทมเพลตปรับแต่งได้มากกว่า คุณสามารถขยายโค้ดเทมเพลตเพื่อทำการย้ายข้อมูลบางส่วน หรือแปลงข้อมูลได้ นอกจากนี้ คุณยังควบคุมจำนวนและขนาดของ Worker ได้ด้วย

ทั้ง 2 ตัวเลือกนี้รองรับการย้ายข้อมูลในโปรเจ็กต์และภูมิภาคต่างๆ

ย้ายข้อมูลด้วยการส่งออกและนำเข้า

หากต้องการย้ายข้อมูลด้วยการดำเนินการส่งออกและนำเข้า โปรดดูส่งออกและนำเข้าข้อมูล หากต้องการย้ายข้อมูลไปยังฐานข้อมูลในโปรเจ็กต์อื่น โปรดดูย้ายข้อมูลระหว่างโปรเจ็กต์

ย้ายข้อมูลด้วยเทมเพลต Dataflow

ทำตามวิธีการต่อไปนี้เพื่อย้ายข้อมูลด้วยเทมเพลต firestore-to-firestore Dataflow

ก่อนเริ่มต้น

  1. ก่อนเริ่มย้ายข้อมูล โปรดตรวจสอบว่าได้เปิดใช้การกู้คืน ณ จุดเวลา (PITR) ใน ฐานข้อมูลต้นทางแล้ว Dataflow งานใช้ PITR เพื่ออ่านข้อมูลที่การประทับเวลา PITR หากปิดใช้ PITR งานจะล้มเหลวหากทำงานนานกว่า 1 ชั่วโมง

  2. กำหนดบทบาทที่จำเป็นตามที่อธิบายไว้ในส่วนถัดไป

บทบาทที่จำเป็น

หากต้องการย้ายข้อมูลจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่ง ให้กำหนดบทบาทต่อไปนี้ นอกจากนี้ คุณยังอาจได้รับสิทธิ์ที่จำเป็นผ่านบทบาทที่กำหนดเองหรือบทบาทอื่นๆ ที่กำหนดไว้ล่วงหน้าได้ด้วย

  1. หากต้องการรับสิทธิ์ที่จำเป็นในการสร้างฐานข้อมูลใหม่และเข้าถึงCloud Firestoreข้อมูล ให้ขอให้ผู้ดูแลระบบมอบบทบาท Identity and Access Management (IAM) เจ้าของ Cloud Datastore (roles/datastore.owner) ในโปรเจ็กต์ให้แก่คุณ
  2. หากต้องการให้สิทธิ์การอ่านและการเขียนแก่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 Cloud
  • REGION_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 Edition

  • SOURCE_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 Cloud
  • REGION_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 Edition

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

หลังจากกำหนดค่าฐานข้อมูลแล้ว คุณจะทดสอบแอปต่อด้วยฐานข้อมูลใหม่ได้ หากต้องการย้ายข้อมูลให้เสร็จสมบูรณ์ ให้อัปเดตแอปพลิเคชันเพื่อใช้ฐานข้อมูลใหม่

การแก้ปัญหา

สำหรับฐานข้อมูลขนาดใหญ่ งานอาจล้มเหลวหากอ่านข้อมูลมากเกินไปในครั้งเดียว วิธีแก้ไขปัญหานี้

ขั้นตอนถัดไป