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

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

การใช้งานรุ่นฟรี

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

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

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

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

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

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

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

หากต้องการสร้างและจัดการฐานข้อมูล คุณต้องมีบทบาท 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. ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore

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

  2. คลิกเพิ่มฐานข้อมูล
  3. เลือกรุ่น Enterprise คลิกถัดไป
  4. เลือก Firestore ที่มีความเข้ากันได้กับ MongoDB
  5. ป้อนรหัสฐานข้อมูล
  6. เลือกตำแหน่งสำหรับฐานข้อมูล
  7. คลิกสร้าง
Firebase CLI
firebase firestore:databases:create --edition enterprise DATABASE_ID \n--location=LOCATION \n[--firestore-data-access FIRESTORE_ACCESS] \n[--mongodb-compatible-data-access MONGODB_ACCESS] \n[--realtime-updates REALTIME_UPDATES]

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

gcloud CLI

ใช้คำสั่ง gcloud firestore databases create และตั้งค่า --edition=enterprise

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

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

หากต้องการเปิดใช้การป้องกันการลบ ให้เพิ่มแฟล็ก --delete-protection คุณจะลบฐานข้อมูลที่เปิดใช้การป้องกันการลบไม่ได้จนกว่าจะปิดใช้การตั้งค่านี้ การตั้งค่านี้ถูกปิดใช้งานโดยค่าเริ่มต้น

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--edition=enterprise \
--delete-protection

หากต้องการเพิ่มแท็กลงในฐานข้อมูล ให้ใช้แฟล็ก --tags เช่น

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Terraform

ใช้ทรัพยากร google_firestore_database และตั้งค่า database_edition เป็น ENTERPRISE

resource "google_firestore_database" "database" {
  name             = "DATABASE_ID"
  location_id      = "LOCATION"
  type             = "FIRESTORE_NATIVE"
  database_edition = "ENTERPRISE"

  // Optional
  delete_protection_state = "DELETE_PROTECTION_STATE"
}

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

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

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

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

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

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

ลบการปกป้อง

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

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

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

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

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

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

  2. คลิก Cloud Firestore เพื่อดูฐานข้อมูลทั้งหมดของโปรเจ็กต์
gcloud CLI

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

gcloud firestore databases list

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

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

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

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

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
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 ด้วยรหัสฐานข้อมูล

ลบฐานข้อมูล

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

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

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

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

  2. เลือกฐานข้อมูลที่ต้องการลบ
  3. คลิก ดูเพิ่มเติม
  4. คลิกลบเพื่อลบฐานข้อมูล
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 คุณจะเลือกนาทีใดก็ได้ในชั่วโมงที่ผ่านมา
    • คุณสามารถตรวจสอบการประทับเวลาที่เร็วที่สุดที่เลือกได้ในคำอธิบายของฐานข้อมูล

คอนโซล Google Cloud

  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: การประทับเวลา 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 ซึ่งเป็นรายการคู่คีย์-ค่าของแท็กที่ไม่บังคับให้เชื่อมโยง

ตัวอย่าง

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'

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

คุณสามารถใช้เงื่อนไข 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: คำอธิบายที่ไม่บังคับของนิพจน์

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

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 รายการต่อโปรเจ็กต์ คุณสามารถติดต่อทีมสนับสนุนเพื่อขอเพิ่มขีดจำกัดนี้ได้

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