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