Cloud Firestore ช่วยเพิ่มประสิทธิภาพการค้นหาโดยกำหนดให้ต้องมีดัชนีสำหรับทุกๆ คำถาม ดัชนีที่จำเป็นสำหรับการค้นหาขั้นพื้นฐานที่สุด จะ สร้างสำหรับคุณ เมื่อคุณใช้และทดสอบแอป คลาวด์ Firestore จะสร้างข้อความแสดงข้อผิดพลาดซึ่งช่วยคุณสร้างดัชนีเพิ่มเติม แอปจำเป็นต้องใช้ หน้านี้จะอธิบายวิธีจัดการ ดัชนีฟิลด์เดี่ยวและคอมโพสิต
สร้างดัชนีที่หายไปผ่านข้อความแสดงข้อผิดพลาด
หากคุณพยายาม ข้อความค้นหาแบบผสมที่มีวรรคเงื่อนไขช่วงที่ไม่จับคู่กับดัชนีที่มีอยู่ คุณได้รับข้อผิดพลาด ข้อความแสดงข้อผิดพลาดจะมีลิงก์โดยตรงเพื่อสร้าง ไม่มีดัชนีในคอนโซล Firebase
ไปตามลิงก์ที่สร้างขึ้นไปยังคอนโซล Firebase ตรวจสอบ ระบบจะกรอกข้อมูลให้โดยอัตโนมัติ แล้วคลิกสร้าง
บทบาทและสิทธิ์
ก่อนที่จะสร้างดัชนีใน Cloud Firestore ได้ โปรดตรวจสอบว่าคุณกำหนดบทบาทใดบทบาทหนึ่งต่อไปนี้
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
หากคุณกำหนดบทบาทที่กำหนดเอง ให้มอบหมายสิทธิ์ต่อไปนี้ทั้งหมดเพื่อสร้างดัชนี
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
ใช้คอนโซล Firebase
วิธีสร้างดัชนีใหม่ด้วยตนเองจากคอนโซล Firebase
- ไปที่ส่วน Cloud Firestore ของคอนโซล Firebase
- ไปที่แท็บดัชนี แล้วคลิกเพิ่มดัชนี
- ป้อนชื่อคอลเล็กชันและตั้งค่าช่องที่คุณต้องการเรียงลำดับดัชนี
- คลิกสร้าง
ช่องดัชนีต้องสอดคล้องกับข้อจํากัดในเส้นทางช่อง
ระบบอาจใช้เวลา 2-3 นาทีในการสร้างดัชนี ทั้งนี้ขึ้นอยู่กับขนาดของการค้นหา หลังจากสร้างแล้ว คุณจะดูดัชนีและสถานะของดัชนีได้ใน ดัชนีผสม หากยังอยู่ในระหว่างการสร้าง คอนโซล Firebase จะมี แถบสถานะอาคาร
นําดัชนีออก
หากต้องการลบดัชนี ให้ทำดังนี้
- ไปที่ส่วน Cloud Firestore ของคอนโซล Firebase
- คลิกแท็บดัชนี
- วางเมาส์เหนือดัชนีที่ต้องการลบ แล้วเลือกลบจากเมนูตามบริบท
- ยืนยันว่าต้องการลบการแจ้งเตือนโดยคลิกลบจากการแจ้งเตือน
ใช้ Firebase CLI
นอกจากนี้คุณยังทำให้ดัชนีใช้งานได้ด้วย Firebase CLI
ในการเริ่มต้นใช้งาน ให้เรียกใช้ firebase init firestore
ในไดเรกทอรีโปรเจ็กต์
ในระหว่างการตั้งค่า Firebase CLI จะสร้างไฟล์ JSON ที่มีค่าเริ่มต้น
จัดทำดัชนีในรูปแบบที่ถูกต้อง แก้ไขไฟล์เพื่อเพิ่มดัชนีและทำให้ใช้งานได้
ด้วยคำสั่ง firebase deploy
หากต้องการติดตั้งใช้งานเฉพาะดัชนีและกฎ Cloud Firestore รายการ ให้เพิ่มแอตทริบิวต์
การแจ้งว่าไม่เหมาะสม --only firestore
หากคุณแก้ไขดัชนีโดยใช้คอนโซล Firebase โปรด ตรวจสอบว่าคุณได้อัปเดตไฟล์ดัชนีในเครื่องแล้ว โปรดดู การอ้างอิงคำจำกัดความของดัชนี JSON
ใช้ Terraform
กำลังสร้างดัชนีในฐานข้อมูล
ฐานข้อมูล Cloud Firestore สามารถรวมดัชนีช่องเดียวหรือดัชนีผสม คุณสามารถแก้ไขไฟล์การกำหนดค่า Terraform เพื่อสร้างดัชนีสำหรับฐานข้อมูลของคุณได้
ดัชนีช่องเดียว
ตัวอย่างต่อไปนี้ของไฟล์การกำหนดค่า Terraform จะสร้างดัชนีช่องเดียวในช่อง name
ในคอลเล็กชัน chatrooms
firestore.tf
resource "random_id" "variable"{ byte_length = 8 } resource "google_firestore_field" "single-index" { project = "project-id" database = "database-id" collection = "chatrooms_${random_id.variable.hex}" field = "name" index_config { indexes { order = "ASCENDING" query_scope = "COLLECTION_GROUP" } indexes { array_config = "CONTAINS" } } ttl_config {} }
- แทนที่ project-id ด้วยรหัสโปรเจ็กต์ รหัสโปรเจ็กต์ต้องไม่ซ้ำกัน
- แทนที่ database-id ด้วยรหัสฐานข้อมูล
ดัชนีผสม
ตัวอย่างต่อไปนี้ของไฟล์การกำหนดค่า Terraform จะสร้างดัชนีผสมสำหรับชุดค่าผสมของฟิลด์ name
และช่อง description
ในคอลเล็กชัน chatrooms
firestore.tf
resource "google_firestore_index" "composite-index" { project = "project-id" database = "database-id" collection = "chatrooms" fields { field_path = "name" order = "ASCENDING" } fields { field_path = "description" order = "DESCENDING" } }
- แทนที่ project-id ด้วยรหัสโปรเจ็กต์ รหัสโปรเจ็กต์ต้องไม่ซ้ำกัน
- แทนที่ database-id ด้วยรหัสฐานข้อมูล
เวลาในการสร้างดัชนี
หากต้องการสร้างดัชนี Cloud Firestore ต้องตั้งค่าดัชนี จากนั้น ทดแทนดัชนีด้วยข้อมูลที่มีอยู่ เวลาในการสร้างดัชนีคือผลรวมของเวลาในการตั้งค่า และเวลาทดแทนข้อมูล:
การตั้งค่าดัชนีจะใช้เวลา 2-3 นาที บิลด์ขั้นต่ำ เวลาดัชนีใช้เวลา 2-3 นาที ถึงแม้ว่าฐานข้อมูลจะว่างเปล่าก็ตาม
เวลาในการทดแทนข้อมูลจะขึ้นอยู่กับปริมาณข้อมูลที่มีอยู่ในดัชนีใหม่ ยิ่งมีค่าฟิลด์ตรงกับคำจำกัดความของดัชนี มากเท่าใด ก็ยิ่งใช้เวลานานขึ้นเท่านั้น ทดแทนดัชนี
บิลด์ดัชนีเป็นการดำเนินการที่ใช้เวลานาน
หลังจากเริ่มสร้างบิลด์ดัชนีแล้ว Cloud Firestore จะกำหนด
ชื่อที่ไม่ซ้ำกันของการดำเนินการ ชื่อการดำเนินการมี projects/[PROJECT_ID]/databases/(default)/operations/
นำหน้า
เช่น
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
อย่างไรก็ตาม คุณไม่ต้องใส่คำนำหน้าเมื่อระบุชื่อการดำเนินการสำหรับ
คำสั่ง describe
แสดงรายการการดำเนินการที่ใช้เวลานานทั้งหมด
หากต้องการแสดงรายการการดำเนินการที่ใช้เวลานาน ให้ใช้ รายการการดำเนินการ gcloud Firestore คำสั่ง คำสั่งนี้จะแสดงการดำเนินการที่ดำเนินอยู่และที่เพิ่งเสร็จสิ้นไป ระบบจะแสดงการดำเนินการภายใน 2-3 วันหลังจากเสร็จสิ้น
gcloud firestore operations list
ตรวจสอบสถานะการดำเนินการ
แทนที่จะแสดงรายการการดำเนินการที่ใช้เวลานานทั้งหมด คุณสามารถระบุรายละเอียดของ การดำเนินการเดียว:
gcloud firestore operations describe operation-name
การประมาณเวลาเสร็จสมบูรณ์
ขณะที่การดำเนินการของคุณทำงาน โปรดดูค่าของช่อง state
เพื่อดูสถานะโดยรวมของการดำเนินการ
คำขอสำหรับสถานะของการดำเนินการที่ใช้เวลานานจะแสดงผลเมตริกด้วย
workEstimated
และ workCompleted
ระบบจะแสดงผลเมตริกเหล่านี้เป็นตัวเลข
ของเอกสาร workEstimated
แสดงจำนวนเอกสารทั้งหมดโดยประมาณ
จะประมวลผล workCompleted
แสดงจำนวนเอกสารที่มีการประมวลผลจนถึงปัจจุบัน หลังจากการดำเนินการเสร็จสิ้น
workCompleted
แสดงจำนวนเอกสารทั้งหมดที่ถูก
ประมวลผลจริงแล้ว ซึ่งอาจต่างจากค่าของ workEstimated
หาร workCompleted
ด้วย workEstimated
เพื่อดูความคืบหน้าโดยประมาณ
ค่าประมาณอาจไม่ถูกต้องเนื่องจากขึ้นอยู่กับสถิติที่ล่าช้า
คอลเล็กชัน
ตัวอย่างเช่น สถานะความคืบหน้าของบิลด์ดัชนีมีดังนี้
{ "operations": [ { "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI", "metadata": { "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata", "common": { "operationType": "CREATE_INDEX", "startTime": "2020-06-23T16:52:25.697539Z", "state": "PROCESSING" }, "progressDocuments": { "workCompleted": "219327", "workEstimated": "2198182" } }, }, ...
เมื่อการดำเนินการเสร็จสิ้น คำอธิบายการดำเนินการจะมีคำว่า "done":
true
อยู่ ดูค่าในช่อง state
สำหรับ
ผลของการดำเนินการนี้ หากไม่ได้ตั้งค่าช่อง done
ในการตอบกลับ
ค่าจะเป็น false
ไม่ขึ้นอยู่กับการมีอยู่ของค่า done
สำหรับการดำเนินการที่อยู่ระหว่างดำเนินการ
ข้อผิดพลาดในการสร้างดัชนี
คุณอาจพบข้อผิดพลาดในการสร้างดัชนีเมื่อจัดการดัชนีผสมและ การยกเว้นดัชนีช่องเดียว การดำเนินการจัดทำดัชนีอาจล้มเหลวหาก Cloud Firestore พบปัญหาเกี่ยวกับข้อมูลที่กำลังจัดทำดัชนี พบบ่อยที่สุด โดยทั่วไปแล้ว หมายความว่าคุณได้ ขีดจำกัดดัชนี สำหรับ ตัวอย่างเช่น การดำเนินการนี้อาจมีรายการดัชนีถึงจำนวนสูงสุดแล้ว ต่อเอกสาร
หากสร้างดัชนีไม่สำเร็จ คุณจะเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลัง คุณยืนยันว่าไม่ได้ ขีดจำกัดของดัชนี ให้ลองดำเนินการดัชนีอีกครั้ง