จัดการฐานข้อมูล

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

บทบาทและสิทธิ์ที่จำเป็น

หากต้องการสร้างและจัดการฐานข้อมูล คุณจะต้องมีบทบาท Identity and Access Management ต่อไปนี้

บทบาทดังกล่าวจะให้สิทธิ์ต่อไปนี้ซึ่งคุณต้องใช้ในการสร้างและจัดการ ฐานข้อมูล

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

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

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

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

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

  2. คลิกเพิ่มฐานข้อมูล
  3. เลือกรุ่นมาตรฐาน คลิกถัดไป
  4. ป้อนรหัสฐานข้อมูล
  5. เลือกตำแหน่งสำหรับฐานข้อมูล คลิกถัดไป
  6. เลือกโหมดเริ่มต้นสำหรับ Cloud Firestore Security Rules

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

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

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

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

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Firebase CLI
firebase firestore:databases:create DATABASE_ID \n--location=LOCATION \n[--edition EDITION] \n[--firestore-data-access FIRESTORE_ACCESS] \n[--realtime-updates REALTIME_UPDATES] \n[--delete-protection DELETE_PROTECTION_ENABLEMENT]

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

Terraform
resource "google_firestore_database" "database" {
  project     = "project-id"
  name        = DATABASE_ID
  location_id = LOCATION
  type        = DATABASE_TYPE

  // Optional
  delete_protection_state = DELETE_PROTECTION_STATE
}

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

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

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

รหัสฐานข้อมูลที่ถูกต้องต้องเป็นไปตามกฎต่อไปนี้

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

มีข้อยกเว้น 1 ข้อสำหรับกฎเหล่านี้ นั่นคือรุ่นมาตรฐานจะสร้าง ฐานข้อมูลชื่อ (default) หากคุณไม่ได้ป้อนรหัสด้วยตนเอง

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

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

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

ตั้งค่า Cloud Firestore Security Rules สำหรับฐานข้อมูล

ใช้ Firebase CLI เพื่อติดตั้งใช้งาน Cloud Firestore Security Rules ในฐานข้อมูลแต่ละรายการ ดูคำแนะนำในการจัดการและติดตั้งใช้งาน Cloud Firestore Security Rules

เข้าถึงฐานข้อมูลที่มีชื่อด้วยไลบรารีของไคลเอ็นต์

ฐานข้อมูลที่มีชื่อรวมถึงฐานข้อมูลที่ไม่ได้ชื่อ (default) โดยค่าเริ่มต้น SDK ของ Firebase และไลบรารีไคลเอ็นต์ Google API จะเชื่อมต่อกับฐานข้อมูล (default) Cloud Firestore ในโปรเจ็กต์ หากต้องการสร้างไคลเอ็นต์ที่เชื่อมต่อกับ ฐานข้อมูลที่มีชื่อ ให้ตั้งค่ารหัสฐานข้อมูลเมื่อคุณสร้างอินสแตนซ์ไคลเอ็นต์

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

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

คอนโซล

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

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

gcloud

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

gcloud firestore databases list
Firebase CLI

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

firebase firestore:databases:list

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

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

gcloud

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

gcloud firestore databases describe --database=DATABASE_ID
Firebase CLI

ใช้คำสั่ง firebase firestore:databases:get

firebase firestore:databases:get DATABASE_ID

เอาต์พุตสำหรับฐานข้อมูล Enterprise จะมีฟิลด์ต่อไปนี้

  • Edition: ENTERPRISE
  • Firestore Data Access: DATA_ACCESS_MODE_ENABLED หรือ DATA_ACCESS_MODE_DISABLED
  • MongoDB Compatible Data Access: DATA_ACCESS_MODE_ENABLED หรือ DATA_ACCESS_MODE_DISABLED
  • Realtime Updates: REALTIME_UPDATES_ENABLED หรือ REALTIME_UPDATES_DISABLED

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

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

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

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

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

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

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

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

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

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

ลบฐานข้อมูล

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

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

หากฐานข้อมูลมีApp Engineการค้นหา ข้อมูลหรือ เอนทิตี Blob คุณต้องลบข้อมูลนั้นก่อน

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

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

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

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

  2. ในแท็บข้อมูล เหนือมุมมองตารางข้อมูลของฐานข้อมูล ให้คลิก แล้วเลือก ลบฐานข้อมูล
  3. ทำตามวิธีการเพื่อลบฐานข้อมูล
gcloud

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

gcloud firestore databases delete --database=DATABASE_ID

แทนที่ DATABASE_ID ด้วยรหัสของฐานข้อมูลที่จะลบ หากต้องการลบฐานข้อมูลเริ่มต้น ให้ใช้รหัส '(default)'

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

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

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

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

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

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

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

คอนโซล

คอนโซล Firebase ไม่รองรับการโคลนฐานข้อมูล คุณใช้ วิธีการสำหรับ Google Cloud CLI เพื่อโคลนฐานข้อมูลได้

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/(default)' \
--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'

โดยค่าเริ่มต้น ฐานข้อมูลที่โคลนจะมีค่ากำหนดการเข้ารหัสเหมือนกับฐานข้อมูลต้นทาง หากต้องการเปลี่ยนการกำหนดค่าการเข้ารหัส ให้ใช้อาร์กิวเมนต์ --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/(default)' \
--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: การประทับเวลา 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: อีเมลที่แสดงถึงบัญชี Google ที่เฉพาะเจาะจง เช่น 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: อีเมลที่แสดงถึงบัญชี Google ที่เฉพาะเจาะจง เช่น 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: อีเมลที่แสดงถึงบัญชี Google ที่เฉพาะเจาะจง เช่น alice@example.com

Cloud Monitoring

Cloud Firestore จะได้รับการรายงานภายใต้ทรัพยากรที่ตรวจสอบ 2 รายการ

คุณตรวจสอบเมตริกรวมที่ระดับฐานข้อมูลได้โดยดูที่ firestore.googleapis.com/Database เมตริกที่รายงานในส่วน firestore_instance จะได้รับการรวบรวมที่ระดับโปรเจ็กต์

ข้อจำกัด

  • คุณมีฐานข้อมูลได้สูงสุด 100 ฐานต่อโปรเจ็กต์ คุณสามารถติดต่อทีมสนับสนุนเพื่อขอเพิ่ม ขีดจำกัดนี้ได้
  • คุณจะลบ(default)ฐานข้อมูลไม่ได้หากมีข้อมูลการค้นหา GAE ใช้ index delete api เพื่อลบข้อมูลการค้นหาของ GAE หากเพิ่งลบข้อมูล GAE Search อาจมีระยะเวลารอก่อนที่คุณจะลบฐานข้อมูลได้
  • คุณจะลบ(default)ฐานข้อมูลไม่ได้หากมีเอนทิตี Blob ใช้ Blobstore delete api เพื่อลบข้อมูล Blobstore คุณตรวจสอบได้ว่าฐานข้อมูล (default) มีข้อมูล Blobstore หรือไม่โดยเรียกใช้การค้นหา GQL ต่อไปนี้ในคอนโซล Google Cloud SELECT * FROM __BlobInfo__
  • คุณจะนำรหัสฐานข้อมูลมาใช้ซ้ำไม่ได้จนกว่าจะผ่านไป 5 นาทีหลังจากลบ
  • Cloud Functions v1 ไม่รองรับฐานข้อมูลที่มีชื่อของ Firestore ใช้ทริกเกอร์ Cloud Firestore (รุ่นที่ 2) เพื่อ กำหนดค่าเหตุการณ์สำหรับฐานข้อมูลที่มีชื่อ
  • ทริกเกอร์ฟังก์ชัน Firestore v1 และ ทริกเกอร์เหตุการณ์ Firestore อาจหยุดทำงานหลังจากลบฐานข้อมูลแล้ว แม้ว่าจะมีการสร้างฐานข้อมูลใหม่ ที่มีชื่อเดียวกันก็ตาม

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