Quản lý chỉ mục

Trang này mô tả cách quản lý chỉ mục cho phiên bản Firestore Enterprise.

Để tìm hiểu thêm về chỉ mục của phiên bản Firestore Enterprise, hãy xem bài viết Tổng quan về chỉ mục.

Trước khi bắt đầu

Trước khi 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

Để cấp một vai trò, hãy xem bài viết Cấp một vai trò. Để biết thêm thông tin về các vai trò Cloud Firestore và quyền liên quan, hãy xem bài viết Các vai trò được xác định trước.

Nếu bạn đã xác định các 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

Tạo chỉ mục

Để tạo chỉ mục, hãy hoàn tất các bước sau:

bảng điều khiển của Firebase
  1. Trong bảng điều khiển của Firebase, hãy chuyển đến trang Firestore Database (Cơ sở dữ liệu Firestore).

    Chuyển đến Cơ sở dữ liệu Firestore

  2. Chọn một cơ sở dữ liệu trong danh sách cơ sở dữ liệu.
  3. Trong thẻ Indexes (Chỉ mục), hãy nhấp vào Create Index (Tạo chỉ mục).
  4. Nhập Collection ID (Mã bộ sưu tập).
  5. Thêm một hoặc nhiều đường dẫn đến trường rồi chọn một tuỳ chọn chỉ mục cho từng đường dẫn.
  6. Chọn một tuỳ chọn về sự hiện diện của trường, không thưa thớt hoặc thưa thớt.
  7. Nhấp vào Tạo.
  8. Chỉ mục mới của bạn sẽ xuất hiện trong danh sách chỉ mục và Cloud Firestore bắt đầu tạo chỉ mục. Khi chỉ mục được tạo, bạn sẽ thấy dấu kiểm màu xanh lục bên cạnh chỉ mục đó. Nếu chỉ mục không được tạo, hãy xem bài viết Lỗi khi tạo chỉ mục để biết các nguyên nhân có thể.
gcloud CLI

Để tạo chỉ mục, hãy sử dụng gcloud firestore indexes composite create lệnh.

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

Thay thế các mục sau:

  • DATABASE_ID: mã cơ sở dữ liệu.
  • COLLECTION: tên bộ sưu tập.
  • FIELD_CONFIGURATION: cấu hình trường. Đối với mỗi trường, hãy thêm --field-config=field-path=. Ví dụ:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    Để biết thêm thông tin về cách định cấu hình các trường này, hãy xem --field-config.

Để tạo chỉ mục thưa thớt, hãy đặt --density=sparse-any.

Để tạo chỉ mục duy nhất, hãy thêm cờ --unique.

Terraform

Sử dụng tài nguyên.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"
}

Thay thế các mục sau:

  • DATABASE_ID: Mã cơ sở dữ liệu cho cơ sở dữ liệu bạn chọn
  • COLLECTION: Tên của bộ sưu tập cần lập chỉ mục
  • FIELD_PATH: Tên của trường cần lập chỉ mục
  • ORDER: Một trong ASCENDING hoặc DESCENDING
  • DENSITY: Một trong SPARSE_ANY hoặc DENSE

Tạo chỉ mục văn bản

Sử dụng bảng điều khiển Cloud để tạo chỉ mục văn bản.

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến Cơ sở dữ liệu

  2. Chọn một cơ sở dữ liệu trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Indexes (Chỉ mục).

  4. Không bắt buộc: Nhập tên cho chỉ mục.

  5. Chuyển đến Search Type (Loại tìm kiếm) rồi chọn Text (Văn bản).

  6. Nhập Collection ID (Mã bộ sưu tập).

  7. Định cấu hình một hoặc nhiều trường để lập chỉ mục.

  8. Đặt phạm vi truy vấn cho chỉ mục.

  9. Chọn ngôn ngữ mặc định.

  10. Không bắt buộc: Đặt đường dẫn ghi đè ngôn ngữ thành tên trường chứa chế độ cài đặt ngôn ngữ của tài liệu.

  11. Nhấp vào Tạo.

  12. Chỉ mục mới của bạn sẽ xuất hiện trong danh sách chỉ mục và Cloud Firestore bắt đầu tạo chỉ mục. Khi chỉ mục được tạo, bạn sẽ thấy dấu kiểm màu xanh lục bên cạnh chỉ mục đó.

Tạo chỉ mục không gian địa lý

Sử dụng bảng điều khiển Cloud để tạo chỉ mục không gian địa lý.

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến Cơ sở dữ liệu

  2. Chọn một cơ sở dữ liệu trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Indexes (Chỉ mục).

  4. Không bắt buộc: Nhập tên cho chỉ mục.

  5. Chuyển đến Search Type (Loại tìm kiếm) rồi chọn Geo (2dsphere) (Địa lý (2dsphere)).

  6. Nhập Collection ID (Mã bộ sưu tập).

  7. Định cấu hình một hoặc nhiều trường để lập chỉ mục.

  8. Đặt phạm vi truy vấn cho chỉ mục.

  9. Nhấp vào Tạo.

    Chỉ mục mới của bạn sẽ xuất hiện trong danh sách chỉ mục và Cloud Firestore bắt đầu tạo chỉ mục. Khi chỉ mục được tạo, bạn sẽ thấy dấu kiểm màu xanh lục bên cạnh chỉ mục đó.

Xoá chỉ mục

Để xoá chỉ mục, hãy hoàn tất các bước sau:

bảng điều khiển của Firebase
  1. Trong bảng điều khiển của Firebase, hãy chuyển đến trang Firestore Database (Cơ sở dữ liệu Firestore).

    Chuyển đến Cơ sở dữ liệu Firestore

  2. Chọn một cơ sở dữ liệu trong danh sách cơ sở dữ liệu.
  3. Nhấp vào thẻ Indexes (Chỉ mục).
  4. Trong danh sách chỉ mục, hãy chọn Delete (Xoá) trong nút More (Tuỳ chọn khác) cho chỉ mục bạn muốn xoá.
  5. Nhấp vào Delete Index (Xoá chỉ mục).
gcloud CLI
  1. Để tìm tên của chỉ mục, hãy sử dụng lệnh gcloud firestore indexes composite list.

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

    Thay thế DATABASE_ID bằng mã cơ sở dữ liệu.

  2. Để xoá chỉ mục, hãy sử dụng lệnh gcloud firestore indexes composite delete.

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

    Thay thế các mục sau:

    • INDEX_NAME: tên của chỉ mục
    • DATABASE_ID: mã cơ sở dữ liệu

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

Để tạo chỉ mục, Cloud Firestore phải tạo chỉ mục rồi điền lại các mục chỉ mục bằng dữ liệu hiện có. Thời gian cần thiết để tạo chỉ mục được xác định theo các yếu tố sau:

  • 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 cần thiết để điền lại các mục chỉ mục phụ thuộc vào lượng dữ liệu hiện có thuộc về chỉ mục mới. Càng có nhiều giá trị trường khớp với định nghĩa chỉ mục, thì thời gian điền lại các mục chỉ mục càng lâu.

Quản lý các thao tác chạy trong thời gian dài

Việc tạo chỉ mục là các thao tác chạy trong thời gian dài. Các phần sau đây mô tả cách làm việc với các thao tác chạy trong thời gian dài cho chỉ mục.

Sau khi bạn bắt đầu tạo chỉ mục, Cloud Firestore sẽ chỉ định một tên duy nhất cho thao tác đó. Tên thao tác có tiền tố là projects/PROJECT_ID/databases/DATABASE_ID/operations/, ví dụ:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Bạn có thể bỏ qua tiền tố khi chỉ định tên thao tác cho lệnh describe.

Liệt kê tất cả các thao tác chạy 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 gcloud firestore operations list lệnh. Lệnh này liệt kê các thao tác đang diễn ra và các thao tác đã hoàn tất gần đây. Các thao tác đượ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 thao tác

Thay vì liệt kê tất cả các thao tác chạy trong thời gian dài, bạn có thể liệt kê thông tin chi tiết của một thao tác:

gcloud firestore operations describe operation-name

Ước tính thời gian hoàn tất

Khi thao tác đang chạy, hãy xem giá trị của trường state để biết trạng thái tổng thể của thao tác.

Yêu cầu về trạng thái của một thao tác chạy trong thời gian dài cũng trả về các chỉ số workEstimatedworkCompleted. workEstimated cho biết tổng số tài liệu ước tính mà một thao tác sẽ xử lý. workCompleted cho biết số tài liệu đã xử lý cho đến nay. 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ý, có thể khác với giá trị của workEstimated.

Để ước tính tiến trình của một thao tác, hãy chia workCompleted cho workEstimated.

Sau đây là ví dụ về tiến trình tạo 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 thao tác. Nếu trường done không được đặt trong phản hồi, thì thao tác đó chưa hoàn tất.