Cloud Firestore ช่วยรับประกันประสิทธิภาพของคำค้นหาโดยกำหนดให้ต้องมีดัชนีสำหรับทุกๆ คำถาม ดัชนีที่จำเป็นสำหรับการค้นหาขั้นพื้นฐานที่สุด จะ สร้างสำหรับคุณ เมื่อคุณใช้และทดสอบแอป Cloud 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 ที่ต่างกัน
ดัชนีช่องเดียว
ตัวอย่างต่อไปนี้ของไฟล์การกำหนดค่า 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 operations list คำสั่งนี้จะแสดงการดำเนินการที่ดำเนินอยู่และที่เพิ่งเสร็จสิ้นไป ระบบจะแสดงการดำเนินการภายใน 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 พบปัญหาเกี่ยวกับข้อมูลที่จัดทําดัชนี พบบ่อยที่สุด โดยทั่วไปแล้ว หมายความว่าคุณได้ ขีดจำกัดดัชนี สำหรับ ตัวอย่างเช่น การดำเนินการนี้อาจมีรายการดัชนีถึงจำนวนสูงสุดแล้ว ต่อเอกสาร
หากสร้างดัชนีไม่สำเร็จ คุณจะเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลัง คุณยืนยันว่าไม่ได้ ขีดจำกัดของดัชนี ให้ลองดำเนินการดัชนีอีกครั้ง