เกี่ยวข้องกับ Cloud Firestore Enterprise Edition เท่านั้น |
หน้านี้จะอธิบายวิธีจัดการดัชนี ดูข้อมูลเพิ่มเติม เกี่ยวกับดัชนีได้ที่ภาพรวมของดัชนี
ก่อนเริ่มต้น
ก่อนที่จะสร้างดัชนีใน Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ได้ โปรดตรวจสอบว่าคุณได้รับมอบหมายบทบาทต่อไปนี้
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
สร้างดัชนี
หากต้องการสร้างดัชนี ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด createIndex()
เพื่อสร้างดัชนี เช่น
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
การสร้างดัชนีด้วย
db.runCommand()
ยังรองรับดัชนีอย่างน้อย 1 รายการด้วยdb.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
โปรดทราบข้อจำกัดต่อไปนี้
- คุณสร้างดัชนีได้เพียง 1 รายการต่อคำขอ ไม่รองรับ
db.collection.createIndexes()
- บันทึกการตรวจสอบสำหรับการสร้างดัชนีด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.CreateIndex
- ดูตัวเลือกดัชนีที่รองรับได้ที่ดัชนีและพร็อพเพอร์ตี้ดัชนี
Firebase คอนโซล
-
ในFirebaseคอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- ในแท็บดัชนี ให้คลิกสร้างดัชนี
- ป้อนรหัสคอลเล็กชัน
- เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
- เลือกตัวเลือกการแสดงฟิลด์เป็นแบบไม่กระจัดกระจายหรือแบบกระจัดกระจาย
- คุณเลือกตั้งค่าตัวเลือกดัชนีแบบหลายคีย์ได้ (ไม่บังคับ)
- คลิกสร้าง
- ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore ที่เข้ากันได้กับ MongoDB จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากไม่ได้สร้างดัชนี โปรดดูสาเหตุที่เป็นไปได้ในข้อผิดพลาดในการสร้างดัชนี
gcloud CLI
หากต้องการสร้างดัชนี ให้ใช้คำสั่ง
gcloud firestore indexes composite create
ตั้งค่า api-scope
เป็น mongodb-compatible-api
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
แทนที่ค่าต่อไปนี้
- 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
หากต้องการสร้างดัชนีแบบหลายคีย์ ให้เพิ่มแฟล็ก --multikey
หากต้องการสร้างดัชนีที่ไม่ซ้ำกัน ให้เพิ่มแฟล็ก --unique
Terraform
ใช้แหล่งข้อมูล
google_firestore_index
และตั้งค่า api_scope
เป็น MONGODB_COMPATIBLE_API
และ query_scope
เป็น COLLECTION_GROUP
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" 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
ลบดัชนี
หากต้องการลบดัชนี ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด dropIndex()
เพื่อลบดัชนี เช่น
ลบดัชนีโดยใช้ชื่อดัชนี
db.restaurants.dropIndex("cuisine_index")
ลบดัชนีโดยใช้คำจำกัดความดัชนี
db.restaurants.dropIndex({"cuisine" : 1})
Firebase คอนโซล
-
ในFirebaseคอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- คลิกแท็บดัชนี
- ในรายการดัชนี ให้เลือกลบจากปุ่มเพิ่มเติม สำหรับดัชนีที่ต้องการลบ
- คลิกลบดัชนี
gcloud CLI
หากต้องการค้นหาชื่อดัชนี ให้ใช้คำสั่ง
gcloud firestore indexes composite list
gcloud firestore indexes composite list \ --database='DATABASE_ID'
แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล
-
หากต้องการลบดัชนี ให้ใช้คำสั่ง
gcloud firestore indexes composite delete
gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
แทนที่ค่าต่อไปนี้
- INDEX_NAME: ชื่อดัชนี
- DATABASE_ID: รหัสฐานข้อมูล
เวลาสร้างดัชนี
หากต้องการสร้างดัชนี Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ต้องสร้างดัชนีแล้ว ป้อนข้อมูลดัชนีย้อนหลังด้วยข้อมูลที่มีอยู่ เวลาที่ใช้ในการสร้างดัชนีจะขึ้นอยู่กับปัจจัยต่อไปนี้
เวลาในการสร้างดัชนีขั้นต่ำคือ 2-3 นาที แม้ว่าจะเป็นฐานข้อมูลที่ว่างเปล่าก็ตาม
เวลาที่ต้องใช้ในการทดแทนรายการดัชนีขึ้นอยู่กับปริมาณข้อมูลที่มีอยู่ ซึ่งอยู่ในดัชนีใหม่ ยิ่งค่าช่องตรงกับคำจำกัดความของดัชนีมากเท่าใด ก็จะยิ่งใช้เวลานานขึ้นในการป้อนข้อมูลย้อนหลังในรายการดัชนี
จัดการการดำเนินการที่ใช้เวลานาน
การสร้างดัชนีเป็นการดำเนินการที่ใช้เวลานาน ส่วนต่อไปนี้จะอธิบาย วิธีใช้งานการดำเนินการที่ใช้เวลานานสำหรับดัชนี
หลังจากเริ่มสร้างดัชนีแล้ว Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB จะกำหนดชื่อที่ไม่ซ้ำกันให้กับการดำเนินการ
ชื่อการดำเนินการจะมีคำนำหน้าเป็น 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
ในการตอบกลับ
แสดงว่าการดำเนินการยังไม่เสร็จสมบูรณ์