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

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

ฐานข้อมูล (default)

หากแอปไม่จำเป็นต้องใช้ฐานข้อมูลหลายรายการ ให้ใช้ฐานข้อมูล (default)

หากไม่ระบุฐานข้อมูล ไลบรารีของไคลเอ็นต์ Cloud Firestore และ Google Cloud CLI จะเชื่อมต่อกับฐานข้อมูล (default) โดยค่าเริ่มต้น

คุณจะใช้โควต้าฟรีได้เฉพาะกับฐานข้อมูล (default)

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

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

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

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

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

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

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

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

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

  2. หากนี่คือฐานข้อมูลที่มีชื่อรายการแรก ให้คลิกเพิ่มฐานข้อมูล
  3. หรือคลิก (ค่าเริ่มต้น) แล้วคลิกเพิ่มฐานข้อมูล
  4. กำหนดค่าฐานข้อมูล ป้อนรหัสฐานข้อมูล เลือกสถานที่ตั้ง คลิกสร้างฐานข้อมูล
gcloud

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

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--type=DATABASE_TYPE \
[--delete-protection]

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

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

Firebase CLI
firebase firestore:databases:create DATABASE_ID \
--location=LOCATION \
[--delete-protection DELETE_PROTECTION_ENABLEMENT]

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

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

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

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

รหัสฐานข้อมูลที่ถูกต้อง ได้แก่ (default) และรหัสที่เป็นไปตามข้อกำหนดต่อไปนี้

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

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

ลบการปกป้อง

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

ตั้งค่ากฎความปลอดภัยของ Cloud Firestore สำหรับฐานข้อมูล

ใช้ Firebase CLI เพื่อทำให้กฎการรักษาความปลอดภัยของ Cloud Firestore ใช้งานได้กับฐานข้อมูลแต่ละรายการ โปรดดูคำแนะนำสำหรับการจัดการและทำให้กฎความปลอดภัยของ Cloud Firestore ใช้งานได้

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

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

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

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

คอนโซล

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

ไปที่ Databases

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

แทนที่ 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

ใช้คำสั่ง `gcloudfirestore Databases delete`

gcloud firestore databases delete --database=DATABASE_ID

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

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

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

ดูนโยบาย 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: คำอธิบายนิพจน์ที่ไม่บังคับ

ให้สิทธิ์เข้าถึงฐานข้อมูลทั้งหมดยกเว้น 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: อีเมลที่แสดงถึงบัญชี 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 คุณอาจต้องรอสักระยะก่อนที่คุณจะสามารถลบฐานข้อมูลได้
  • คุณไม่สามารถลบฐานข้อมูล (default) ได้หากมีเอนทิตี BLOB โปรดใช้ Blobstore delete api เพื่อลบข้อมูล Blobstore คุณสามารถตรวจสอบว่าฐานข้อมูล (default) มีข้อมูล Blobstore หรือไม่โดยเรียกใช้การค้นหา GQL ต่อไปนี้ในคอนโซล Google Cloud Platform: SELECT * FROM __BlobInfo__
  • คุณจะใช้รหัสฐานข้อมูลซ้ำไม่ได้จนกว่าจะดำเนินการลบไปแล้ว 5 นาที
  • Cloud Function v1 ไม่รองรับฐานข้อมูลที่มีชื่อของ Firestore โปรดใช้ทริกเกอร์ Cloud Firestore (รุ่นที่ 2) เพื่อกำหนดค่าเหตุการณ์สำหรับฐานข้อมูลที่มีชื่อ
  • ทริกเกอร์ฟังก์ชัน v1 และทริกเกอร์เหตุการณ์ของ Firestore อาจหยุดทำงานหลังจากลบฐานข้อมูลแล้ว แม้ว่าจะมีการสร้างฐานข้อมูลใหม่ด้วยชื่อเดียวกันก็ตาม

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