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 ด้วยตนเอง:
- ไปที่ส่วน เมฆ Firestore ของ คอนโซล Firebase
- ไปที่แท็บ ดัชนี แล้วคลิก เพิ่มดัชนี
- ป้อนชื่อการรวบรวมและตั้งค่าฟิลด์ที่คุณต้องการสั่งซื้อดัชนีโดย
- คลิก สร้าง
ฟิลด์ดัชนี จะต้อง สอดคล้องกับ ข้อ จำกัด บนเส้นทางฟิลด์
ดัชนีอาจใช้เวลาสองสามนาทีในการสร้างขึ้นอยู่กับขนาดของแบบสอบถาม หลังจากที่คุณสร้างพวกเขาคุณสามารถเห็นดัชนีและสถานะของพวกเขาในส่วนดัชนีคอมโพสิต หากพวกเขายังคงสร้างคอนโซล Firebase จะมีแถบสถานะอาคาร
ลบดัชนี
เพื่อลบดัชนี:
- ไปที่ส่วน เมฆ Firestore ของ คอนโซล Firebase
- คลิกแท็บ ดัชนี
- วางเมาส์เหนือดัชนีที่คุณต้องการลบและเลือก ลบ จากเมนูบริบท
- ยืนยันว่าคุณต้องการลบโดยคลิก ลบ จากการแจ้งเตือน
ใช้ Firebase CLI
คุณยังสามารถปรับใช้ดัชนีด้วย Firebase CLI ในการเริ่มต้นใช้ firebase init firestore
ในไดเรกทอรีโครงการของคุณ ในระหว่างการตั้งค่า Firebase CLI จะสร้างไฟล์ JSON พร้อมดัชนีเริ่มต้นในรูปแบบที่ถูกต้อง แก้ไขไฟล์เพื่อเพิ่มดัชนีเพิ่มเติมและปรับใช้ด้วยคำสั่ง firebase deploy
ในการปรับใช้ดัชนีและกฎของคลาวด์เฟอร์สอร์เท่านั้นให้เพิ่มธง --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 ด้วย 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 ด้วย ID ฐานข้อมูลของคุณ
ดัชนีเวลาสร้าง
ในการสร้างดัชนี 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 ประสบปัญหากับข้อมูลที่กำลังจัดทำดัชนี โดยทั่วไป หมายความว่าคุณถึงขีด จำกัดของดัชนี ตัวอย่างเช่น การดำเนินการอาจมีรายการดัชนีถึงจำนวนสูงสุดต่อเอกสารแล้ว
ถ้าการสร้างดัชนีล้มเหลว คุณเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลังจากที่คุณตรวจสอบแล้วว่าคุณไม่ได้ถึง ขีดจำกัดของดัชนี ใดๆ ให้ลองดำเนินการดัชนีของคุณอีกครั้ง