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

หน้านี้จะอธิบายวิธีสร้าง อัปเดต และลบ 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 Security Rules สําหรับฐานข้อมูล

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

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

ฐานข้อมูลที่มีชื่อจะมีฐานข้อมูลที่ไม่ได้ชื่อ (default) โดยค่าเริ่มต้น ไลบรารีของไคลเอ็นต์ Google API และ Firebase SDK จะเชื่อมต่อกับ (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

แทนที่ 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 กับ Flag --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 ด้วยรหัสของฐานข้อมูลที่จะลบ

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

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

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

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