จัดการดัชนีใน 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. ไปที่ส่วน เมฆ Firestore ของ คอนโซล Firebase
  2. ไปที่แท็บ ดัชนี แล้วคลิก เพิ่มดัชนี
  3. ป้อนชื่อการรวบรวมและตั้งค่าฟิลด์ที่คุณต้องการสั่งซื้อดัชนีโดย
  4. คลิก สร้าง

ฟิลด์ดัชนี จะต้อง สอดคล้องกับ ข้อ จำกัด บนเส้นทางฟิลด์

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

ลบดัชนี

เพื่อลบดัชนี:

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

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

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