จัดการดัชนีใน 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

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

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