สร้างและจัดการฐานข้อมูล

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

การใช้งานระดับฟรี

Cloud Firestore มีระดับฟรี ที่ช่วยให้คุณเริ่มต้นใช้งานได้โดยไม่มีค่าใช้จ่าย

ระดับฟรีจะมีผลกับฐานข้อมูล Cloud Firestore เพียง 1 ฐานข้อมูลต่อโปรเจ็กต์เท่านั้น ฐานข้อมูลแรกที่สร้างในโปรเจ็กต์ที่ไม่มีฐานข้อมูลระดับฟรีจะ ได้รับระดับฟรี หากลบฐานข้อมูลที่มีการใช้ระดับฟรี ฐานข้อมูลถัดไปที่สร้างจะได้รับระดับฟรี

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

คุณต้องดำเนินการต่อไปนี้ให้เสร็จสมบูรณ์ก่อนจึงจะสร้างฐานข้อมูลได้

  1. หากยังไม่ได้สร้างโปรเจ็กต์ Firebase ให้สร้างในคอนโซล Firebase โดยคลิกเพิ่มโปรเจ็กต์ แล้วทำตาม วิธีการบนหน้าจอเพื่อสร้างโปรเจ็กต์ Firebase หรือเพิ่ม บริการ Firebase ลงในโปรเจ็กต์ Google Cloud ที่มีอยู่

  2. กำหนดบทบาท Identity and Access Management ที่เหมาะสมตามที่อธิบายไว้ในส่วนถัดไป

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

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

สิทธิ์ที่จำเป็น

หากต้องการจัดการฐานข้อมูล คุณต้องมีสิทธิ์ต่อไปนี้

  • สร้างฐานข้อมูล: datastore.databases.create
  • อ่านการกำหนดค่าฐานข้อมูล: datastore.databases.getMetadata
  • กำหนดค่าฐานข้อมูล datastore.databases.update
  • ลบฐานข้อมูล: datastore.databases.delete
  • โคลนฐานข้อมูล: datastore.databases.clone

สร้างฐานข้อมูล

หากต้องการสร้างฐานข้อมูล Cloud Firestore ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

คอนโซล Firebase
  1. ไปที่หน้าฐานข้อมูล Firestore ในคอนโซล Firebase

    ไปที่ฐานข้อมูล Firestore

  2. คลิกเพิ่มฐานข้อมูล
  3. เลือก Enterprise Edition คลิกถัดไป
  4. เลือก Firestore ในโหมดดั้งเดิม
  5. ป้อนรหัสฐานข้อมูล
  6. เลือกตำแหน่งสำหรับฐานข้อมูล คลิกถัดไป
  7. เลือกว่าจะเปิดหรือปิดใช้การอัปเดตแบบเรียลไทม์

    การอัปเดตแบบเรียลไทม์ช่วยให้ฐานข้อมูลรองรับonSnapshotผู้ฟังได้ ระบบจะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้นสำหรับฐานข้อมูล Enterprise ในโหมดเนทีฟ

  8. เลือกโหมดเริ่มต้นสำหรับ Cloud Firestore Security Rules

    โหมดทดสอบ
    เหมาะสําหรับการเริ่มต้นใช้งานไลบรารีของไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ แต่ อนุญาตให้ทุกคนอ่านและเขียนทับข้อมูลของคุณได้ หลังจากทดสอบแล้ว อย่าลืมตรวจสอบส่วนรักษาความปลอดภัยให้ข้อมูล
    โหมดโปรดักชัน
    ปฏิเสธการอ่านและการเขียนทั้งหมดจากไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ เซิร์ฟเวอร์แอปพลิเคชันที่ผ่านการตรวจสอบสิทธิ์ (Node.js, Python, Java) จะยัง เข้าถึงฐานข้อมูลได้
  9. คลิกสร้าง
gcloud CLI

ใช้คำสั่ง gcloud firestore databases create

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--edition=enterprise \
--enable-firestore-data-access \
--enable-realtime-updates

แทนที่ค่าต่อไปนี้

รหัสฐานข้อมูล

รหัสฐานข้อมูลที่ถูกต้องประกอบด้วยรหัสที่เป็นไปตาม ข้อกำหนดต่อไปนี้

  • ประกอบด้วยตัวอักษร ตัวเลข และขีดกลาง (-) เท่านั้น
  • ตัวอักษรต้องเป็นตัวพิมพ์เล็ก
  • อักขระแรกต้องเป็นตัวอักษร
  • อักขระสุดท้ายต้องเป็นตัวอักษรหรือตัวเลข
  • มีอักขระอย่างน้อย 4 ตัว
  • มีอักขระได้สูงสุด 63 ตัว
  • ต้องไม่ใช่ UUID หรือคล้ายกับ UUID เช่น อย่าใช้รหัสอย่าง f47ac10b-58cc-0372-8567-0e02b2c3d479

หากลบฐานข้อมูล คุณจะใช้รหัสฐานข้อมูลซ้ำทันทีไม่ได้จนกว่าจะผ่านไป 5 นาที

ลบการป้องกัน

ใช้การป้องกันการลบเพื่อป้องกันการลบฐานข้อมูลโดยไม่ตั้งใจ การลบการป้องกันจะทำงานดังนี้

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

แสดงรายการฐานข้อมูล

ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อแสดงฐานข้อมูล

gcloud CLI

ใช้คำสั่ง gcloud firestore databases list เพื่อแสดงฐานข้อมูลทั้งหมดในโปรเจ็กต์

gcloud firestore databases list

ดูรายละเอียดฐานข้อมูล

หากต้องการดูรายละเอียดเกี่ยวกับฐานข้อมูลเดียว ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

gcloud CLI

ใช้คำสั่ง gcloud firestore databases describe

gcloud firestore databases describe --database=DATABASE_ID

แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล

อัปเดตการกำหนดค่าฐานข้อมูล

หากต้องการอัปเดตการตั้งค่าการกำหนดค่าของฐานข้อมูล ให้ใช้คำสั่ง gcloud firestore databases update

ใช้คำสั่งนี้เพื่อเปลี่ยน เปิดใช้ หรือปิดใช้การป้องกันการลบ

อัปเดตการตั้งค่าการป้องกันการลบ

หากต้องการเปิดใช้การป้องกันการลบในฐานข้อมูล ให้ใช้คำสั่ง gcloud firestore databases update กับแฟล็ก --delete-protection เช่น

gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --delete-protection

แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล

หากต้องการปิดใช้การป้องกันการลบในฐานข้อมูล ให้ใช้คำสั่ง gcloud firestore databases update ที่มีแฟล็ก --no-delete-protection เช่น

gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection

แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล

ลบฐานข้อมูล

หากต้องการลบฐานข้อมูล ให้ใช้คอนโซลหรือเครื่องมือบรรทัดคำสั่ง การลบฐานข้อมูลจะไม่ทำให้เกิดค่าใช้จ่ายสำหรับการดำเนินการลบ

หากเปิดใช้การตั้งค่าการป้องกันการลบในฐานข้อมูล คุณต้องปิดใช้การป้องกันการลบก่อน

gcloud CLI

ใช้คำสั่ง `gcloud firestore databases delete`

gcloud firestore databases delete --database=DATABASE_ID

แทนที่ DATABASE_ID ด้วยรหัสของฐานข้อมูลที่จะลบ

โคลนฐานข้อมูล

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

  • ฐานข้อมูลที่โคลนคือฐานข้อมูลใหม่ที่จะสร้างขึ้นในตำแหน่งเดียวกับฐานข้อมูลต้นทาง

    หากต้องการโคลน Cloud Firestore จะใช้ ข้อมูลการกู้คืนช่วงเวลา (PITR) ของฐานข้อมูลต้นทาง ฐานข้อมูลที่โคลนจะมีข้อมูลและดัชนีทั้งหมด

  • โดยค่าเริ่มต้น ฐานข้อมูลที่โคลนจะได้รับการเข้ารหัสในลักษณะเดียวกับ ฐานข้อมูลต้นทาง โดยใช้การเข้ารหัสเริ่มต้นของ Google หรือการเข้ารหัส CMEK คุณระบุประเภทการเข้ารหัสอื่นหรือใช้คีย์อื่นสำหรับการเข้ารหัส CMEK ได้

  • การประทับเวลามีความละเอียด 1 นาทีและระบุจุดเวลา ในอดีตในช่วงเวลาที่กำหนดโดยกรอบเวลา PITR ดังนี้

    • หากเปิดใช้ PITR สำหรับฐานข้อมูล คุณจะเลือกนาทีใดก็ได้ในช่วง 7 วันที่ผ่านมา (หรือน้อยกว่านั้นหากเปิดใช้ PITR เมื่อไม่ถึง 7 วันที่ผ่านมา)
    • หากไม่ได้เปิดใช้ PITR คุณจะเลือกนาทีใดก็ได้ในชั่วโมงที่ผ่านมา
    • คุณสามารถตรวจสอบการประทับเวลาที่เร็วที่สุดที่เลือกได้ในคำอธิบายของฐานข้อมูล

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. คลิก ดูเพิ่มเติมในแถวตารางของฐานข้อมูลที่ต้องการโคลน คลิกโคลน กล่องโต้ตอบสร้างโคลนจะปรากฏขึ้น

  3. ในกล่องโต้ตอบสร้างโคลน ให้ระบุพารามิเตอร์สำหรับการโคลน ฐานข้อมูล

    1. ในช่องตั้งรหัสสำหรับโคลน ให้ป้อน รหัสฐานข้อมูล สำหรับฐานข้อมูลที่โคลนใหม่ รหัสฐานข้อมูลนี้ต้องไม่เชื่อมโยงกับฐานข้อมูลที่มีอยู่

    2. ในช่องโคลนจาก ให้เลือกจุดในเวลาที่จะใช้สำหรับการโคลน เวลาที่เลือกจะสอดคล้องกับการประทับเวลา PITR ที่มีความละเอียดระดับนาที

  4. คลิกสร้างโคลน

gcloud

ใช้คำสั่ง gcloud firestore databases clone เพื่อโคลนฐานข้อมูล

gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

แทนที่ค่าต่อไปนี้

  • SOURCE_DATABASE: ชื่อฐานข้อมูลของฐานข้อมูลที่มีอยู่ซึ่งคุณต้องการโคลน ชื่อใช้รูปแบบ projects/PROJECT_ID/databases/SOURCE_DATABASE_ID

  • PITR_TIMESTAMP: a การประทับเวลา PITR ใน รูปแบบ RFC 3339 ที่มีความละเอียดระดับนาที เช่น 2025-06-01T10:20:00.00Z หรือ 2025-06-01T10:30:00.00-07:00

  • DESTINATION_DATABASE_ID: รหัสฐานข้อมูล สำหรับฐานข้อมูลที่โคลนใหม่ รหัสฐานข้อมูลนี้ต้องไม่เชื่อมโยงกับ ฐานข้อมูลที่มีอยู่

ตัวอย่าง

gcloud firestore databases clone \
--source-database='projects/example-project/databases/example-source-db' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

หากต้องการเชื่อมโยงกับแท็กบางรายการขณะโคลนฐานข้อมูล ให้ใช้คำสั่งก่อนหน้าพร้อมกับแฟล็ก --tags ซึ่งเป็นรายการคู่ KEY=VALUE ของแท็กที่ไม่บังคับที่จะเชื่อมโยง

ตัวอย่าง

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2

โดยค่าเริ่มต้น ฐานข้อมูลที่โคลนจะมีค่ากำหนดการเข้ารหัสเหมือนกับฐานข้อมูลต้นทาง หากต้องการเปลี่ยนการกำหนดค่าการเข้ารหัส ให้ใช้อาร์กิวเมนต์ --encryption-type

  • (ค่าเริ่มต้น) use-source-encryption: ใช้การกำหนดค่าการเข้ารหัสเดียวกัน กับฐานข้อมูลต้นทาง
  • google-default-encryption: ใช้การเข้ารหัสเริ่มต้นของ Google
  • customer-managed-encryption: ใช้การเข้ารหัส CMEK ระบุรหัสคีย์ ในอาร์กิวเมนต์ --kms-key-name

ตัวอย่างต่อไปนี้แสดงวิธีกําหนดค่าการเข้ารหัส CMEK สําหรับฐานข้อมูลที่โคลน

gcloud firestore databases clone \
--source-database='projects/example-project/databases/example-source-db' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

Firebase CLI

ใช้คำสั่ง firebase firestore:databases:clone เพื่อโคลนฐานข้อมูล

firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP' \

แทนที่ค่าต่อไปนี้

  • SOURCE_DATABASE: ชื่อฐานข้อมูลของฐานข้อมูลที่มีอยู่ซึ่งคุณต้องการโคลน ชื่อใช้รูปแบบ projects/PROJECT_ID/databases/SOURCE_DATABASE_ID

  • DESTINATION_DATABASE: ชื่อฐานข้อมูล สำหรับฐานข้อมูลที่โคลนใหม่ ชื่อใช้รูปแบบ projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID ชื่อฐานข้อมูลนี้ต้องไม่เชื่อมโยงกับฐานข้อมูลที่มีอยู่

  • PITR_TIMESTAMP: a การประทับเวลา PITR ใน รูปแบบ RFC 3339 ที่มีความละเอียดระดับนาที เช่น 2025-06-01T10:20:00.00Z หรือ 2025-06-01T10:30:00.00-07:00 หากไม่ได้ระบุ สแนปชอตที่เลือกจะเป็นเวลาปัจจุบัน โดยปัดเศษลงเป็นนาที

โดยค่าเริ่มต้น ฐานข้อมูลที่โคลนจะมีค่ากำหนดการเข้ารหัสเหมือนกับฐานข้อมูลต้นทาง หากต้องการเปลี่ยนการกำหนดค่าการเข้ารหัส ให้ใช้อาร์กิวเมนต์ --encryption-type

  • (ค่าเริ่มต้น) USE_SOURCE_ENCRYPTION: ใช้การกำหนดค่าการเข้ารหัสเดียวกัน กับฐานข้อมูลต้นทาง
  • GOOGLE_DEFAULT_ENCRYPTION: ใช้การเข้ารหัสเริ่มต้นของ Google
  • CUSTOMER_MANAGED_ENCRYPTION: ใช้การเข้ารหัส CMEK ระบุรหัสคีย์ ในอาร์กิวเมนต์ --kms-key-name

กำหนดค่าสิทธิ์การเข้าถึงต่อฐานข้อมูล

คุณสามารถใช้ เงื่อนไขของ Identity and Access Management เพื่อกำหนดค่าสิทธิ์เข้าถึงในระดับฐานข้อมูล ตัวอย่างต่อไปนี้ใช้ Google Cloud CLI เพื่อกำหนดการเข้าถึงแบบมีเงื่อนไขสำหรับฐานข้อมูลอย่างน้อย 1 รายการ นอกจากนี้ คุณยังกำหนดเงื่อนไข IAM ในคอนโซล Google Cloud ได้ด้วย

ดูนโยบาย IAM ที่มีอยู่

gcloud projects get-iam-policy PROJECT_ID

ตั้งค่า PROJECT_ID เป็นรหัสโปรเจ็กต์

ให้สิทธิ์เข้าถึงฐานข้อมูล

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name=="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

ตั้งค่าดังนี้

  • PROJECT_ID: รหัสโปรเจ็กต์
  • EMAIL: อีเมลที่แสดงถึงบัญชีที่เฉพาะเจาะจง เช่น alice@example.com
  • DATABASE_ID: รหัสฐานข้อมูล
  • TITLE: ชื่อที่ไม่บังคับสำหรับนิพจน์
  • DESCRIPTION: คำอธิบายเพิ่มเติมของนิพจน์

ให้สิทธิ์เข้าถึงฐานข้อมูลทั้งหมด ยกเว้น 1 ฐานข้อมูล

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name!="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

ตั้งค่าดังนี้

  • PROJECT_ID: รหัสโปรเจ็กต์
  • EMAIL: อีเมลที่แสดงถึงบัญชีที่เฉพาะเจาะจง เช่น alice@example.com
  • DATABASE_ID: รหัสฐานข้อมูล
  • TITLE: ชื่อที่ไม่บังคับสำหรับนิพจน์
  • DESCRIPTION: คำอธิบายเพิ่มเติมของนิพจน์

นำนโยบายสำหรับสมาชิกและบทบาทที่ระบุออก

gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' --all

ตั้งค่าดังนี้

  • PROJECT_ID: รหัสโปรเจ็กต์
  • EMAIL: อีเมลที่แสดงถึงบัญชีที่เฉพาะเจาะจง เช่น alice@example.com

ข้อจำกัด

คุณมีฐานข้อมูลได้สูงสุด 100 ฐานต่อโปรเจ็กต์ คุณสามารถติดต่อทีมสนับสนุนเพื่อขอเพิ่ม ขีดจำกัดนี้

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