จัดการดัชนีใน 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. คลิกสร้าง

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

ระบบอาจใช้เวลา 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 ที่ต่างกัน

ดัชนีช่องเดียว

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

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