Quản lý chỉ mục trong Cloud Firestore

Cloud Firestore đảm bảo hiệu suất truy vấn bằng cách yêu cầu lập chỉ mục cho mọi truy vấn. Các chỉ mục cần thiết cho các truy vấn cơ bản nhất sẽ được tạo tự động cho bạn. Khi bạn sử dụng và kiểm tra ứng dụng của mình, Cloud Firestore sẽ tạo các thông báo lỗi giúp bạn tạo các chỉ mục bổ sung mà ứng dụng của bạn yêu cầu. Trang này mô tả cách quản lý chỉ mục trường đơn và chỉ mục tổng hợp của bạn.

Tạo chỉ mục bị thiếu thông qua thông báo lỗi

Nếu bạn thử truy vấn phức hợp có mệnh đề phạm vi không ánh xạ tới chỉ mục hiện có thì bạn sẽ gặp lỗi. Thông báo lỗi bao gồm liên kết trực tiếp để tạo chỉ mục bị thiếu trong bảng điều khiển Firebase.

Theo liên kết đã tạo tới bảng điều khiển Firebase, xem lại thông tin được điền tự động và 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, hãy đả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ò tùy chỉnh, hãy chỉ định tất cả các quyền sau để 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 Firebase

Để tạo chỉ mục mới theo cách thủ công từ bảng điều khiển Firebase:

hình ảnh giao diện lập chỉ mục firestore trong bảng điều khiển firebase

  1. Đi tới phần Cloud Firestore của bảng điều khiển Firebase .
  2. Chuyển đến tab Chỉ mục và nhấp vào Thêm chỉ mục .
  3. Nhập tên bộ sưu tập và đặt các trường bạn muốn sắp xếp chỉ mục theo.
  4. Nhấp vào Tạo .

Các trường chỉ mục phải tuân theo các ràng buộc trên đường dẫn trường .

Việc xây dựng chỉ mục có thể mất vài phút, tùy thuộc vào kích thước của truy vấn. Sau khi tạo chúng, bạn có thể xem các chỉ mục của mình và trạng thái của chúng trong phần Chỉ mục tổng hợp. Nếu họ vẫn đang xây dựng thì bảng điều khiển Firebase sẽ bao gồm thanh trạng thái tòa nhà.

Xóa chỉ mục

Để xóa một chỉ mục:

  1. Đi tới phần Cloud Firestore của bảng điều khiển Firebase .
  2. Nhấp vào tab Chỉ mục .
  3. Di chuột qua chỉ mục bạn muốn xóa và chọn Xóa từ menu ngữ cảnh.
  4. Xác nhận rằng bạn muốn xóa nó bằng cách nhấp vào Xóa từ cảnh báo.

Sử dụng CLI Firebase

Bạn cũng có thể triển khai các chỉ mục bằng Firebase CLI . Để 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 tạo tệp JSON có chỉ mục mặc định ở định dạng chính xác. Chỉnh sửa tệp để thêm nhiều chỉ mục hơn và triển khai nó bằng lệnh firebase deploy .

Để chỉ triển khai các chỉ mục và quy tắc của Cloud Firestore, hãy thêm 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 đảm bảo bạn cũng cập nhật tệp chỉ mục cục bộ của mình. Tham khảo tài liệu tham khảo định nghĩa chỉ mục JSON .

Sử dụng địa hình

Tạo chỉ mục trong cơ sở dữ liệu

Cơ sở dữ liệu Cloud Firestore có thể bao gồm chỉ mục trường đơn hoặc 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 trường đơn

Ví dụ sau đây là tệp cấu hình Terraform tạo chỉ mục một trường trên trường name trong bộ sưu tậ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 ID dự án của bạn. ID dự án phải là duy nhất.
  • Thay thế database-id bằng ID cơ sở dữ liệu của bạn.

Chỉ số tổng hợp

Ví dụ sau đây là tệp cấu hình Terraform tạo chỉ mục tổng hợp cho sự kết hợp giữa trường name và trường description trong bộ sưu tậ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 ID dự án của bạn. ID dự án phải là duy nhất.
  • Thay thế database-id bằng ID cơ sở dữ liệu của bạn.

Thời gian xây dựng chỉ mục

Để xây dựng chỉ mục, Cloud Firestore phải thiết lập chỉ mục và sau đó lấp đầy chỉ mục bằng dữ liệu hiện có. Thời gian xây dựng chỉ mục là tổng thời gian thiết lập và thời gian chèn lấp:

  • Việc thiết lập chỉ mục mất vài phút. Thời gian xây dựng tối thiểu cho một chỉ mục là vài phút, ngay cả đối với cơ sở dữ liệu trống.

  • Thời gian chèn lấp phụ thuộc vào lượng dữ liệu hiện có trong chỉ mục mới. Càng nhiều giá trị trường khớp với định nghĩa chỉ mục thì thời gian lấp đầy chỉ mục càng lâu.

Việc xây dựng chỉ mục là các hoạt động kéo dài .

Sau khi bạn bắt đầu xây dựng chỉ mục, Cloud Firestore sẽ gán cho thao tác một tên duy nhất. Tên hoạt động 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ố khi chỉ định tên thao tác cho lệnh describe .

Liệt kê tất cả các hoạt động chạy dài

Để liệt kê các hoạt động chạy dài, hãy sử dụng lệnh danh sách hoạt động của gcloud firestore . Lệnh này liệt kê các hoạt động đang diễn ra và đã hoàn thành gần đây. Các hoạt động được liệt kê trong vài ngày sau khi hoàn thành:

gcloud firestore operations list

Kiểm tra trạng thái hoạt động

Thay vì liệt kê tất cả các thao tác kéo dài, bạn có thể liệt kê chi tiết của 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 để biết trạng thái chung của thao tác.

Yêu cầu về trạng thái của một hoạt động chạy dài cũng trả về các chỉ số workEstimatedworkCompleted . Các số liệu này được trả về cho số lượng tài liệu. workEstimated hiển thị tổng số tài liệu ước tính mà một hoạt động sẽ xử lý. workCompleted hiển thị số lượng tài liệu được xử lý cho đến nay. Sau khi thao tác hoàn tất, workCompleted phản ánh tổng số tài liệu đã được xử lý thực sự, có thể khác với giá trị của workEstimated .

Chia workCompleted theo workEstimated để ước tính tiến độ sơ bộ. Ước tính này có thể không chính xác vì nó phụ thuộc vào việc thu thập số liệu thống kê bị trì hoãn.

Ví dụ: đây là trạng thái tiến trình của quá trình xây 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 được thực hiện, 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 thao tác. Nếu trường done không được đặt trong phản hồi thì giá trị của nó là false . Không phụ thuộc vào sự tồn tại của giá trị done đối với các hoạt động đang thực hiện.

Lỗi xây dựng chỉ mục

Bạn có thể gặp phải lỗi xây dựng 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. Hoạt động lập chỉ mục có thể không thành công nếu Cloud Firestore gặp sự cố với dữ liệu mà nó đang lập chỉ mục. Thông thường nhất, điều này có nghĩa là bạn đã đạt đến 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 việc 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 khi bạn xác minh rằng bạn không đạt bất kỳ giới hạn chỉ mục nào , hãy thử lại thao tác chỉ mục của bạn.