Trang này được dịch bởi Cloud Translation API.
Switch to English

Lập chỉ mục dữ liệu của bạn

Firebase cho phép bạn thực hiện các truy vấn đặc biệt trên dữ liệu của mình bằng cách sử dụng khóa con tùy ý. Nếu bạn biết trước chỉ mục của mình sẽ là gì, bạn có thể xác định chúng thông qua quy tắc .indexOn trong Quy tắc bảo mật cơ sở dữ liệu thời gian thực của Firebase để cải thiện hiệu suất truy vấn.

Xác định chỉ mục dữ liệu

Firebase cung cấp các công cụ mạnh mẽ để sắp xếptruy vấn dữ liệu của bạn. Cụ thể, Firebase cho phép bạn thực hiện các truy vấn đặc biệt trên một tập hợp các nút bằng cách sử dụng bất kỳ khóa con chung nào. Khi ứng dụng của bạn phát triển, hiệu suất của truy vấn này sẽ giảm xuống. Tuy nhiên, nếu bạn cho Firebase biết về các khóa bạn sẽ truy vấn, Firebase sẽ lập chỉ mục các khóa đó tại máy chủ, cải thiện hiệu suất truy vấn của bạn.

Lập chỉ mục với orderByChild

Cách dễ nhất để giải thích điều này là thông qua một ví dụ. Tất cả chúng tôi tại Firebase đều đồng ý rằng khủng long khá tuyệt. Đây là một đoạn trích từ cơ sở dữ liệu mẫu về các dữ kiện về khủng long. Chúng tôi sẽ sử dụng nó để giải thích cách .indexOn hoạt động với orderByChild() .

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

Hãy tưởng tượng rằng trong ứng dụng của chúng ta, chúng ta thường cần đặt hàng khủng long theo tên, chiều cao và chiều dài, nhưng không bao giờ theo trọng lượng. Chúng tôi có thể cải thiện hiệu suất của các truy vấn của mình bằng cách cho Firebase biết thông tin này. Vì tên của loài khủng long chỉ là khóa, nên Firebase đã tối ưu hóa cho các truy vấn theo tên khủng long, vì đây là khóa của bản ghi. Chúng tôi có thể sử dụng .indexOn để nói với Firebase để tối ưu hóa các truy vấn về chiều cao và chiều dài:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Giống như các quy tắc khác, bạn có thể chỉ định quy tắc .indexOn ở bất kỳ cấp nào trong quy tắc của mình. Chúng tôi đã đặt nó ở cấp cơ sở cho ví dụ trên vì tất cả dữ liệu khủng long được lưu trữ ở gốc của cơ sở dữ liệu.

Lập chỉ mục với orderByValue

Trong ví dụ này, chúng tôi sẽ giải thích cách .indexOn hoạt động với orderByValue() . Giả sử chúng tôi đang lập bảng xếp hạng điểm số môn thể thao khủng long với dữ liệu sau:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

Vì chúng tôi đang sử dụng orderByValue () để tạo bảng xếp hạng, chúng tôi có thể tối ưu hóa các truy vấn của mình bằng cách thêm quy tắc .value tại nút /scores .value của chúng tôi:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}