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
- ไปที่แท็บ ดัชนี แล้วคลิก เพิ่มดัชนี
- ป้อนชื่อคอลเลกชันและตั้งค่าฟิลด์ที่คุณต้องการเรียงลำดับดัชนี
- คลิก สร้าง
ดัชนีอาจใช้เวลาไม่กี่นาทีในการสร้าง ขึ้นอยู่กับขนาดของแบบสอบถาม หลังจากที่คุณสร้างดัชนีแล้ว คุณจะเห็นดัชนีและสถานะของดัชนีในส่วนดัชนีผสม หากยังคงสร้างอยู่ คอนโซล Firebase จะมีแถบสถานะของอาคาร
ลบดัชนี
ในการลบดัชนี:
- ไปที่ส่วน Cloud Firestore ของ คอนโซล Firebase
- คลิกแท็บ ดัชนี
- วางเมาส์เหนือดัชนีที่คุณต้องการลบแล้วเลือก ลบ จากเมนูบริบท
- ยืนยันว่าคุณต้องการลบโดยคลิก ลบ จากการแจ้งเตือน
ใช้ Firebase CLI
คุณยังสามารถปรับใช้ดัชนีกับ Firebase CLI ในการเริ่มต้น ให้เรียกใช้ firebase init firestore
ในไดเร็กทอรีโปรเจ็กต์ของคุณ ระหว่างการตั้งค่า Firebase CLI จะสร้างไฟล์ JSON ที่มีดัชนีเริ่มต้นในรูปแบบที่ถูกต้อง แก้ไขไฟล์เพื่อเพิ่มดัชนีและปรับใช้ด้วยคำสั่ง firebase deploy
หากคุณต้องการปรับใช้ดัชนีเท่านั้น ให้เพิ่มแฟล็ก --only firestore:indexes
หากคุณแก้ไขดัชนีโดยใช้คอนโซล Firebase อย่าลืมอัปเดตไฟล์ดัชนีในเครื่องด้วย อ้างถึง การอ้างอิงคำจำกัดความของดัชนี JSON
เวลาในการสร้างดัชนี
ในการสร้างดัชนี Cloud Firestore ต้องตั้งค่าดัชนีแล้วเติมข้อมูลที่มีอยู่ลงในดัชนี เวลาในการสร้างดัชนีคือผลรวมของเวลาการตั้งค่าและเวลาทดแทน:
การตั้งค่าดัชนีใช้เวลาไม่กี่นาที เวลาสร้างขั้นต่ำสำหรับดัชนีคือไม่กี่นาที แม้แต่ฐานข้อมูลที่ว่างเปล่า
เวลาทดแทนขึ้นอยู่กับจำนวนข้อมูลที่มีอยู่ในดัชนีใหม่ ยิ่งค่าฟิลด์ตรงกับคำนิยามดัชนีมากเท่าใด การเติมดัชนีกลับก็จะใช้เวลานานขึ้นเท่านั้น
การสร้างดัชนีเป็นการ ดำเนินการที่ใช้เวลานาน
หลังจากที่คุณเริ่มสร้างดัชนี Cloud Firestore จะกำหนดชื่อเฉพาะให้กับการดำเนินการ ชื่อการดำเนินการจะนำหน้าด้วย projects/[PROJECT_ID]/databases/(default)/operations/
ตัวอย่างเช่น:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
อย่างไรก็ตาม คุณสามารถละเว้นคำนำหน้าเมื่อระบุชื่อการดำเนินการสำหรับคำสั่ง describe
แสดงรายการการดำเนินการระยะยาวทั้งหมด
หากต้องการแสดงรายการการดำเนินการที่ใช้เวลานาน ให้ใช้คำสั่ง รายการการดำเนินการของ gcloud firestore คำสั่งนี้แสดงการดำเนินการที่กำลังดำเนินอยู่และเพิ่งเสร็จสิ้นไป การดำเนินการจะแสดงขึ้นสองสามวันหลังจากเสร็จสิ้น:
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 พบปัญหากับข้อมูลที่จัดทำดัชนี โดยทั่วไปหมายความว่าคุณถึงขีด จำกัดของดัชนี ตัวอย่างเช่น การดำเนินการอาจมีรายการดัชนีถึงจำนวนสูงสุดต่อเอกสาร
หากการสร้างดัชนีล้มเหลว คุณจะเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลังจากที่คุณยืนยันว่าคุณไม่ถึงขีด จำกัดของดัชนี ใดๆ ให้ลองดำเนินการกับดัชนีอีกครั้ง