Catch up on highlights from Firebase at Google I/O 2023. Learn more

จัดการดัชนีใน Cloud Firestore

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

  1. ไปที่ส่วน Cloud Firestore ของ คอนโซล Firebase
  2. ไปที่แท็บ ดัชนี แล้วคลิก เพิ่มดัชนี
  3. ป้อนชื่อคอลเลกชันและตั้งค่าฟิลด์ที่คุณต้องการเรียงลำดับดัชนี
  4. คลิก สร้าง

ดัชนีอาจใช้เวลาไม่กี่นาทีในการสร้าง ขึ้นอยู่กับขนาดของแบบสอบถาม หลังจากที่คุณสร้างดัชนีแล้ว คุณจะเห็นดัชนีและสถานะของดัชนีในส่วนดัชนีผสม หากยังคงสร้างอยู่ คอนโซล Firebase จะมีแถบสถานะของอาคาร

ลบดัชนี

ในการลบดัชนี:

  1. ไปที่ส่วน Cloud Firestore ของ คอนโซล Firebase
  2. คลิกแท็บ ดัชนี
  3. วางเมาส์เหนือดัชนีที่คุณต้องการลบแล้วเลือก ลบ จากเมนูบริบท
  4. ยืนยันว่าคุณต้องการลบโดยคลิก ลบ จากการแจ้งเตือน

ใช้ 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 พบปัญหากับข้อมูลที่จัดทำดัชนี โดยทั่วไปหมายความว่าคุณถึงขีด จำกัดของดัชนี ตัวอย่างเช่น การดำเนินการอาจมีรายการดัชนีถึงจำนวนสูงสุดต่อเอกสาร

หากการสร้างดัชนีล้มเหลว คุณจะเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลังจากที่คุณยืนยันว่าคุณไม่ถึงขีด จำกัดของดัชนี ใดๆ ให้ลองดำเนินการกับดัชนีอีกครั้ง