จัดการดัชนี

หน้านี้จะอธิบายวิธีจัดการดัชนีสำหรับ Firestore Enterprise Edition

ดูข้อมูลเพิ่มเติมเกี่ยวกับดัชนีของ Firestore Enterprise Edition ได้ที่ ภาพรวมของดัชนี

ก่อนเริ่มต้น

ก่อนที่จะสร้างดัชนีใน Cloud Firestore ได้ คุณต้องได้รับมอบหมายบทบาทใดบทบาทหนึ่งต่อไปนี้

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

หากต้องการมอบหมายบทบาท โปรดดูหัวข้อให้สิทธิ์บทบาทเดียว ดูข้อมูลเพิ่มเติมเกี่ยวกับบทบาทของ Cloud Firestore และสิทธิ์ที่เกี่ยวข้องได้ที่บทบาทที่กำหนดไว้ล่วงหน้า

หากคุณกำหนดบทบาทที่กำหนดเองไว้ ให้มอบหมายสิทธิ์ทั้งหมดต่อไปนี้เพื่อสร้างดัชนี

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

สร้างดัชนี

หากต้องการสร้างดัชนี ให้ทำตามขั้นตอนต่อไปนี้

คอนโซล Firebase
  1. ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล Firestore

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในแท็บดัชนี ให้คลิกสร้างดัชนี
  4. ป้อนรหัสคอลเล็กชัน
  5. เพิ่มเส้นทางฟิลด์อย่างน้อย 1 เส้นทางและเลือกตัวเลือกดัชนีสำหรับแต่ละเส้นทาง
  6. เลือกตัวเลือกการมีอยู่ของฟิลด์ ไม่กระจัดกระจายหรือกระจัดกระจาย
  7. คลิกสร้าง
  8. ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากสร้างดัชนี ไม่ได้ โปรดดูสาเหตุที่เป็นไปได้ที่ข้อผิดพลาดในการสร้างดัชนี
gcloud CLI

หากต้องการสร้างดัชนี ให้ใช้ gcloud firestore indexes composite create คำสั่ง

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense

แทนที่ข้อมูลต่อไปนี้

  • DATABASE_ID: รหัสฐานข้อมูล
  • COLLECTION: ชื่อคอลเล็กชัน
  • FIELD_CONFIGURATION: การกำหนดค่าฟิลด์ สำหรับแต่ละฟิลด์ ให้เพิ่ม --field-config=field-path= เช่น
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าฟิลด์เหล่านี้ได้ที่ --field-config

หากต้องการสร้างดัชนีกระจัดกระจาย ให้ตั้งค่า --density=sparse-any

หากต้องการสร้างดัชนีที่ไม่ซ้ำ ให้เพิ่มแฟล็ก --unique

Terraform

ใช้ทรัพยากรgoogle_firestore_index

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

แทนที่ข้อมูลต่อไปนี้

  • DATABASE_ID: รหัสฐานข้อมูลสำหรับฐานข้อมูลที่เลือก
  • COLLECTION: ชื่อคอลเล็กชันที่จะจัดทำดัชนี
  • FIELD_PATH: ชื่อฟิลด์ที่จะจัดทำดัชนี
  • ORDER: ASCENDING หรือ DESCENDING
  • DENSITY: SPARSE_ANY หรือ DENSE

สร้างดัชนีข้อความ

ใช้คอนโซล Google Cloud เพื่อสร้างดัชนีข้อความ

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกดัชนี

  4. ไม่บังคับ: ป้อนชื่อดัชนี

  5. ไปที่ประเภทการค้นหา แล้วเลือกข้อความ

  6. ป้อนรหัสคอลเล็กชัน

  7. กำหนดค่าฟิลด์อย่างน้อย 1 ฟิลด์ที่จะจัดทำดัชนี

  8. กำหนดขอบเขตการค้นหาสำหรับดัชนี

  9. เลือกภาษาเริ่มต้น

  10. ไม่บังคับ: ตั้งค่าเส้นทางแทนที่ภาษาเป็นชื่อฟิลด์ที่มีการตั้งค่าภาษาของเอกสาร

  11. คลิกสร้าง

  12. ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี

สร้างดัชนีเชิงพื้นที่

ใช้คอนโซล Google Cloud เพื่อสร้างดัชนีเชิงพื้นที่

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล

  3. ในเมนูการนำทาง ให้คลิกดัชนี

  4. ไม่บังคับ: ป้อนชื่อดัชนี

  5. ไปที่ประเภทการค้นหา แล้วเลือกภูมิศาสตร์ (2dsphere)

  6. ป้อนรหัสคอลเล็กชัน

  7. กำหนดค่าฟิลด์อย่างน้อย 1 ฟิลด์ที่จะจัดทำดัชนี

  8. กำหนดขอบเขตการค้นหาสำหรับดัชนี

  9. คลิกสร้าง

    ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี

ลบดัชนี

หากต้องการลบดัชนี ให้ทำตามขั้นตอนต่อไปนี้

คอนโซล Firebase
  1. ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล Firestore

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. คลิกแท็บดัชนี
  4. ในรายการดัชนี ให้เลือกลบ จากปุ่มเพิ่มเติม สำหรับดัชนีที่ต้องการลบ
  5. คลิกลบดัชนี
gcloud CLI
  1. หากต้องการค้นหาชื่อดัชนี ให้ใช้คำสั่ง gcloud firestore indexes composite list

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล

  2. หากต้องการลบดัชนี ให้ใช้คำสั่ง gcloud firestore indexes composite delete

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    แทนที่ข้อมูลต่อไปนี้

    • INDEX_NAME: ชื่อดัชนี
    • DATABASE_ID: รหัสฐานข้อมูล

เวลาบิลด์ดัชนี

หากต้องการสร้างดัชนี Cloud Firestore ต้องสร้างดัชนีก่อน แล้วจึงเติมข้อมูลดัชนีด้วยข้อมูลที่มีอยู่ เวลาที่ต้องใช้ในการสร้างดัชนีจะขึ้นอยู่กับปัจจัยต่อไปนี้

  • เวลาบิลด์ขั้นต่ำสำหรับดัชนีคือ 2-3 นาที แม้แต่สำหรับฐานข้อมูลที่ว่างเปล่า

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

จัดการการดำเนินการที่ใช้เวลานาน

การสร้างดัชนีเป็นการ**ดำเนินการที่ใช้เวลานาน** ส่วนต่อไปนี้จะอธิบายวิธีใช้การดำเนินการที่ใช้เวลานานสำหรับดัชนี

หลังจากที่คุณเริ่มสร้างดัชนี Cloud Firestore กำหนด ชื่อที่ไม่ซ้ำกันให้กับการดำเนินการ ชื่อการดำเนินการจะมีคำนำหน้าเป็น projects/PROJECT_ID/databases/DATABASE_ID/operations/, เช่น

projects/PROJECT_ID/databases/DATABASE_ID/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 ในการตอบกลับ แสดงว่าการดำเนินการยังไม่เสร็จสมบูรณ์