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

Cloud Firestore ดูแลให้การค้นหามีประสิทธิภาพโดยกำหนดให้มีดัชนีสำหรับทุกๆ คำถาม ดัชนีที่จำเป็นสำหรับการค้นหาขั้นพื้นฐานที่สุด จะ สร้างสำหรับคุณ เมื่อคุณใช้และทดสอบแอป คลาวด์ 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. คลิกสร้าง

ช่องดัชนีต้องสอดคล้องกับข้อจํากัดในเส้นทางช่อง

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

ใช้ 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 ด้วยรหัสฐานข้อมูล

ดัชนีผสม

ตัวอย่างต่อไปนี้ของไฟล์การกำหนดค่า 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 ด้วยรหัสฐานข้อมูล

เวลาในการสร้างดัชนี

Cloud Firestore ต้องตั้งค่าดัชนีเพื่อสร้างดัชนี จากนั้น ทดแทนดัชนีด้วยข้อมูลที่มีอยู่ เวลาในการสร้างดัชนีคือผลรวมของเวลาในการตั้งค่า และเวลาทดแทนข้อมูล:

  • การตั้งค่าดัชนีจะใช้เวลา 2-3 นาที บิลด์ขั้นต่ำ เวลาดัชนีใช้เวลา 2-3 นาที ถึงแม้ว่าฐานข้อมูลจะว่างเปล่าก็ตาม

  • เวลาในการทดแทนข้อมูลจะขึ้นอยู่กับปริมาณข้อมูลที่มีอยู่ในดัชนีใหม่ ยิ่งมีค่าฟิลด์ตรงกับคำจำกัดความของดัชนี มากเท่าใด ก็ยิ่งใช้เวลานานขึ้นเท่านั้น ทดแทนดัชนี

บิลด์ดัชนีเป็นการดำเนินการที่ใช้เวลานาน

หลังจากเริ่มสร้างบิลด์ดัชนี Cloud Firestore จะกำหนด ชื่อที่ไม่ซ้ำกันของการดำเนินการ ชื่อการดำเนินการมี projects/[PROJECT_ID]/databases/(default)/operations/ นำหน้า เช่น

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

อย่างไรก็ตาม คุณไม่ต้องใส่คำนำหน้าเมื่อระบุชื่อการดำเนินการสำหรับ คำสั่ง describe

แสดงรายการการดำเนินการที่ใช้เวลานานทั้งหมด

หากต้องการแสดงรายการการดำเนินการที่ใช้เวลานาน ให้ใช้ รายการการดำเนินการ gcloud Firestore คำสั่ง คำสั่งนี้จะแสดงการดำเนินการที่ดำเนินอยู่และที่เพิ่งเสร็จสิ้นไป ระบบจะแสดงการดำเนินการภายใน 2-3 วันหลังจากเสร็จสิ้น

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

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