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

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

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

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

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

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

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

  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]

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

  • DATABASE_ID: รหัสฐานข้อมูลที่ ถูกต้อง
  • LOCATION: ชื่อของ Cloud Firestore หลายภูมิภาคหรือภูมิภาค
  • FIRESTORE_ACCESS: ENABLED หรือ DISABLED ค่าเริ่มต้นคือ ENABLED
  • MONGODB_ACCESS: หรือ ENABLED หรือ DISABLED ค่าเริ่มต้นคือ DISABLED
  • REALTIME_UPDATES: ENABLED หรือ DISABLED ค่าเริ่มต้นคือ ENABLED หากเปิดใช้ firestore-data-access
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 ได้

  • การประทับเวลามีความละเอียดระดับนาทีและระบุจุดเวลา ในอดีตในช่วงเวลาที่กำหนดโดย กรอบเวลา 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: การประทับเวลา 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'

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

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

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