Cloud Firestore đảm bảo hiệu suất truy vấn bằng cách yêu cầu phải có một chỉ mục cho mỗi truy vấn. Chỉ mục bắt buộc cho các truy vấn cơ bản nhất sẽ tự động tạo cho bạn. Khi bạn sử dụng và thử nghiệm ứng dụng, Cloud Firestore tạo các thông báo lỗi giúp bạn tạo các chỉ mục bổ sung ứng dụng yêu cầu. Trang này mô tả cách quản lý chỉ mục một trường và chỉ mục kết hợp.
Tạo chỉ mục bị thiếu thông qua thông báo lỗi
Nếu bạn thử một truy vấn phức hợp có mệnh đề dải ô không ánh xạ đến chỉ mục hiện có, bạn nhận được thông báo lỗi. Thông báo lỗi có một đường liên kết trực tiếp để tạo chỉ mục bị thiếu trong bảng điều khiển của Firebase.
Truy cập vào bảng điều khiển Firebase theo đường liên kết được tạo, xem lại thông tin được điền tự động rồi nhấp vào Tạo.
Vai trò và quyền
Trước khi bạn có thể tạo chỉ mục trong Cloud Firestore, đảm bảo rằng bạn được chỉ định một trong các vai trò sau:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Nếu bạn đã xác định vai trò tuỳ chỉnh, hãy chỉ định tất cả các quyền sau đây để tạo chỉ mục:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Sử dụng bảng điều khiển của Firebase
Cách tạo chỉ mục mới theo cách thủ công trong bảng điều khiển Firebase:
- Chuyển đến mục Cloud Firestore trong bảng điều khiển của Firebase.
- Chuyển đến thẻ Chỉ mục rồi nhấp vào Thêm chỉ mục.
- Nhập tên tập hợp và đặt các trường mà bạn muốn sắp xếp chỉ mục theo.
- Nhấp vào Tạo.
Các trường chỉ mục phải tuân thủ các quy tắc ràng buộc trên đường dẫn trường.
Có thể mất vài phút để tạo chỉ mục, tuỳ thuộc vào kích thước của truy vấn. Sau khi tạo chỉ mục, bạn có thể xem chỉ mục và trạng thái của chúng trong Chỉ số tổng hợp. Nếu các ứng dụng đó vẫn đang tạo, bảng điều khiển của Firebase sẽ có một thanh trạng thái tạo.
Xoá chỉ mục
Để xoá chỉ mục:
- Chuyển đến mục Cloud Firestore trong bảng điều khiển của Firebase.
- Nhấp vào thẻ Chỉ mục.
- Di chuột qua chỉ mục mà bạn muốn xoá và chọn Xoá trên trình đơn theo bối cảnh.
- Xác nhận rằng bạn muốn xoá thông báo đó bằng cách nhấp vào Xoá trong thông báo.
Sử dụng Giao diện dòng lệnh (CLI) của Firebase
Bạn cũng có thể triển khai chỉ mục bằng CLI của Firebase.
Để bắt đầu, hãy chạy firebase init firestore
trong thư mục dự án của bạn.
Trong quá trình thiết lập, Firebase CLI sẽ tạo một tệp JSON có giá trị mặc định
chỉ mục ở định dạng chính xác. Chỉnh sửa tệp này để thêm và triển khai chỉ mục khác
bằng lệnh firebase deploy
.
Để chỉ triển khai chỉ mục và quy tắc Cloud Firestore, hãy thêm phương thức
Cờ --only firestore
.
Nếu bạn chỉnh sửa các chỉ mục bằng bảng điều khiển Firebase, hãy nhớ cập nhật tệp chỉ mục cục bộ. Tham khảo tài liệu tham khảo về định nghĩa chỉ mục JSON.
Sử dụng Terraform
Tạo chỉ mục trong cơ sở dữ liệu
Cơ sở dữ liệu Cloud Firestore có thể bao gồm cả chỉ mục đơn trường và chỉ mục tổng hợp. Bạn có thể chỉnh sửa tệp cấu hình Terraform để tạo chỉ mục cho cơ sở dữ liệu của mình. Chỉ mục đơn trường và chỉ mục kết hợp sử dụng các loại tài nguyên Terraform riêng biệt.
Chỉ mục một trường
Tệp cấu hình Terraform mẫu sau đây tạo một chỉ mục trường đơn trên trường name
trong tập hợp 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 {} }
- Thay thế project-id bằng mã dự án của bạn. Mã dự án phải là duy nhất.
- Thay thế database-id bằng mã cơ sở dữ liệu của bạn.
Chỉ số tổng hợp
Tệp cấu hình Terraform mẫu sau đây tạo một chỉ mục tổng hợp cho tổ hợp trường name
và trường description
trong tập hợp 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" } }
- Thay thế project-id bằng mã dự án của bạn. Mã dự án phải là duy nhất.
- Thay thế database-id bằng mã cơ sở dữ liệu của bạn.
Thời gian xây dựng chỉ mục
Để tạo chỉ mục, Cloud Firestore phải thiết lập chỉ mục, sau đó bổ sung dữ liệu hiện có vào chỉ mục. Thời gian tạo chỉ mục là tổng thời gian thiết lập và thời gian chèn lấp:
Quá trình thiết lập chỉ mục sẽ mất vài phút. Bản dựng tối thiểu cho một chỉ mục mất vài phút, ngay cả đối với một cơ sở dữ liệu trống.
Thời gian bổ sung phụ thuộc vào lượng dữ liệu hiện có trong chỉ mục mới. Chiến lược phát hành đĩa đơn càng có nhiều giá trị trường phù hợp với định nghĩa chỉ mục, thì càng mất nhiều thời gian thay thế chỉ mục.
Bản dựng chỉ mục là các hoạt động diễn ra trong thời gian dài.
Sau khi bạn bắt đầu tạo chỉ mục, Cloud Firestore sẽ chỉ định
cho thao tác một tên duy nhất. Tên thao tác có tiền tố là projects/[PROJECT_ID]/databases/(default)/operations/
,
ví dụ:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Tuy nhiên, bạn có thể bỏ tiền tố này khi chỉ định tên thao tác cho
lệnh describe
.
Liệt kê tất cả thao tác diễn ra trong thời gian dài
Để liệt kê các thao tác chạy trong thời gian dài, hãy sử dụng lệnh gcloud firestore operations list. Lệnh này liệt kê các thao tác đang diễn ra và đã hoàn thành gần đây. Các hoạt động sẽ được liệt kê trong vài ngày sau khi hoàn tất:
gcloud firestore operations list
Kiểm tra trạng thái hoạt động
Thay vì liệt kê tất cả hoạt động diễn ra trong thời gian dài, bạn có thể liệt kê thông tin chi tiết về một thao tác:
gcloud firestore operations describe operation-name
Ước tính thời gian hoàn thành
Khi thao tác của bạn chạy, hãy xem giá trị của trường state
cho trạng thái tổng thể của hoạt động.
Yêu cầu về trạng thái của một hoạt động lâu dài cũng trả về các chỉ số
workEstimated
và workCompleted
. Hệ thống trả về các chỉ số này cho số lượng
tài liệu. workEstimated
cho biết tổng số tài liệu ước tính mà một
sẽ xử lý. workCompleted
cho biết số lượng tài liệu được xử lý tính đến thời điểm hiện tại. Sau khi thao tác hoàn tất, workCompleted
sẽ phản ánh tổng số tài liệu thực sự được xử lý. Giá trị này có thể khác với giá trị của workEstimated
.
Chia workCompleted
cho workEstimated
để có số liệu ước tính sơ bộ về tiến độ. Chiến lược phát hành đĩa đơn
ước tính có thể không chính xác vì phụ thuộc vào thống kê bị trễ
bộ sưu tập.
Ví dụ: sau đây là trạng thái tiến trình của một bản dựng chỉ mục:
{ "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" } }, }, ...
Khi một thao tác hoàn tất, nội dung mô tả thao tác sẽ chứa "done":
true
. Xem giá trị của trường state
để biết kết quả của phép toán. Nếu bạn không đặt trường done
trong phản hồi, thì giá trị của trường này sẽ là false
. Không phụ thuộc vào sự tồn tại của giá trị done
cho các thao tác đang diễn ra.
Lỗi khi tạo chỉ mục
Bạn có thể gặp phải lỗi tạo chỉ mục khi quản lý chỉ mục tổng hợp và miễn trừ chỉ mục một trường. Thao tác lập chỉ mục có thể không thành công nếu Cloud Firestore gặp vấn đề với dữ liệu mà nó đang lập chỉ mục. Thường gặp nhất Thông thường, điều này có nghĩa là bạn đạt được giới hạn chỉ mục. Để ví dụ: thao tác có thể đã đạt đến số mục nhập chỉ mục tối đa cho mỗi tài liệu.
Nếu tạo chỉ mục không thành công, bạn sẽ thấy thông báo lỗi trong bảng điều khiển. Sau bạn xác minh rằng bạn không nhấn giới hạn chỉ mục, hãy thử lại thao tác lập chỉ mục của bạn.