Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Các loại chỉ mục trong Cloud Firestore

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Các chỉ mục là một yếu tố quan trọng trong hiệu suất của cơ sở dữ liệu. Giống như chỉ mục của sách ánh xạ các chủ đề trong sách tới số trang, chỉ mục cơ sở dữ liệu ánh xạ các mục trong cơ sở dữ liệu tới vị trí của chúng trong cơ sở dữ liệu. Khi bạn gửi một truy vấn đến cơ sở dữ liệu, cơ sở dữ liệu có thể sử dụng một chỉ mục để tra cứu nhanh vị trí của các mục mà bạn đã yêu cầu.

Trang này mô tả hai loại chỉ mục mà Cloud Firestore sử dụng, chỉ mục trường đơn và chỉ mục tổng hợp .

Một chỉ mục đằng sau mỗi truy vấn

Nếu không có chỉ mục nào tồn tại cho một truy vấn, hầu hết các cơ sở dữ liệu sẽ thu thập thông tin qua từng mục nội dung của chúng, một quá trình chậm sẽ chậm hơn nữa khi cơ sở dữ liệu phát triển. Cloud Firestore đảm bảo hiệu suất truy vấn cao bằng cách sử dụng các chỉ mục cho tất cả các truy vấn. Do đó, hiệu suất truy vấn phụ thuộc vào kích thước của tập kết quả chứ không phụ thuộc vào số mục trong cơ sở dữ liệu.

Quản lý chỉ mục ít hơn, phát triển ứng dụng nhiều hơn

Cloud Firestore bao gồm các tính năng giúp giảm lượng thời gian bạn cần dành cho việc quản lý các chỉ mục. Các chỉ mục cần thiết cho các truy vấn cơ bản nhất được tạo tự động cho bạn. Khi bạn sử dụng và thử nghiệm ứng dụng của mình, Cloud Firestore sẽ giúp bạn xác định và tạo các chỉ mục bổ sung mà ứng dụng của bạn yêu cầu.

Các loại chỉ mục

Cloud Firestore sử dụng hai loại chỉ mục: trường đơntổng hợp . Bên cạnh số lượng trường được lập chỉ mục, chỉ mục trường đơn và chỉ mục tổng hợp khác nhau về cách bạn quản lý chúng.

Chỉ mục trường đơn

Chỉ mục một trường lưu trữ ánh xạ được sắp xếp của tất cả các tài liệu trong bộ sưu tập có chứa một trường cụ thể. Mỗi mục trong chỉ mục một trường ghi lại giá trị của tài liệu cho một trường cụ thể và vị trí của tài liệu trong cơ sở dữ liệu. Cloud Firestore sử dụng các chỉ mục này để thực hiện nhiều truy vấn cơ bản. Bạn quản lý các chỉ mục trường đơn bằng cách định cấu hình cài đặt lập chỉ mục tự động và miễn trừ chỉ mục cho cơ sở dữ liệu của mình.

lập chỉ mục tự động

Theo mặc định, Cloud Firestore tự động duy trì các chỉ mục trường đơn cho từng trường trong tài liệu và từng trường con trong bản đồ. Cloud Firestore sử dụng các cài đặt mặc định sau cho các chỉ mục trường đơn:

  • Đối với mỗi trường không phải mảng và không phải bản đồ, Cloud Firestore xác định hai chỉ mục trường đơn trong phạm vi bộ sưu tập , một ở chế độ tăng dần và một ở chế độ giảm dần.

  • Đối với mỗi trường bản đồ, Cloud Firestore tạo một chỉ mục tăng dần trong phạm vi bộ sưu tập và một chỉ mục giảm dần cho mỗi trường con không phải mảng và không phải bản đồ trong bản đồ.

  • Đối với mỗi trường mảng trong tài liệu, Cloud Firestore tạo và duy trì chỉ mục chứa mảng trong phạm vi bộ sưu tập.

  • Các chỉ mục trường đơn với phạm vi nhóm bộ sưu tập không được duy trì theo mặc định.

Miễn trừ chỉ mục trường đơn

Bạn có thể miễn trừ một trường khỏi cài đặt lập chỉ mục tự động của mình bằng cách tạo miễn trừ chỉ mục một trường. Miễn trừ lập chỉ mục sẽ ghi đè cài đặt lập chỉ mục tự động trên toàn cơ sở dữ liệu. Việc miễn trừ có thể kích hoạt chỉ mục một trường mà cài đặt lập chỉ mục tự động của bạn sẽ vô hiệu hóa hoặc vô hiệu hóa chỉ mục một trường mà lập chỉ mục tự động sẽ bật. Đối với những trường hợp miễn trừ có thể hữu ích, hãy xem các phương pháp hay nhất về lập chỉ mục .

Nếu bạn tạo miễn trừ chỉ mục một trường cho trường bản đồ, thì các trường con của bản đồ sẽ kế thừa các cài đặt đó. Tuy nhiên, bạn có thể xác định miễn trừ chỉ mục trường đơn cho các trường con cụ thể. Nếu bạn xóa một miễn trừ cho một trường con, thì trường con đó sẽ kế thừa các thiết lập miễn trừ của trường mẹ nếu chúng tồn tại, hoặc các thiết đặt toàn bộ cơ sở dữ liệu nếu không tồn tại các thiết lập miễn trừ của trường mẹ.

Để tạo và quản lý các trường hợp miễn trừ chỉ mục trường đơn, hãy xem Quản lý chỉ mục trong Cloud Firestore .

chỉ mục tổng hợp

Một chỉ mục tổng hợp lưu trữ một ánh xạ được sắp xếp của tất cả các tài liệu trong một bộ sưu tập, dựa trên danh sách các trường được sắp xếp theo thứ tự để lập chỉ mục.

Cloud Firestore sử dụng các chỉ mục tổng hợp để hỗ trợ các truy vấn chưa được chỉ mục trường đơn hỗ trợ.

Cloud Firestore không tự động tạo các chỉ mục tổng hợp giống như đối với các chỉ mục trường đơn vì số lượng lớn các kết hợp trường có thể có. Thay vào đó, Cloud Firestore giúp bạn xác định và tạo các chỉ mục tổng hợp bắt buộc khi bạn xây dựng ứng dụng của mình.

Nếu bạn thử truy vấn ở trên mà không tạo chỉ mục được yêu cầu trước, Cloud Firestore sẽ trả về thông báo lỗi có chứa liên kết mà bạn có thể nhấp vào để tạo chỉ mục bị thiếu. Điều này xảy ra bất cứ khi nào bạn thử truy vấn không được chỉ mục hỗ trợ. Bạn cũng có thể xác định và quản lý các chỉ mục tổng hợp theo cách thủ công bằng cách sử dụng bảng điều khiển hoặc bằng cách sử dụng Firebase CLI . Để biết thêm về cách tạo và quản lý chỉ mục tổng hợp, hãy xem Quản lý chỉ mục .

Chế độ chỉ mục và phạm vi truy vấn

Bạn định cấu hình chỉ mục trường đơn và chỉ mục tổng hợp khác nhau, nhưng cả hai đều yêu cầu bạn định cấu hình chế độ chỉ mục và phạm vi truy vấn cho chỉ mục của mình.

Chế độ chỉ mục

Khi bạn xác định một chỉ mục, bạn chọn một chế độ chỉ mục cho từng trường được lập chỉ mục. Chế độ chỉ mục của mỗi trường hỗ trợ các mệnh đề truy vấn cụ thể trên trường đó. Bạn có thể chọn từ các chế độ chỉ mục sau:

Chế độ chỉ mục Sự miêu tả
Tăng dần Hỗ trợ các mệnh đề truy vấn < , <= , == , >= , > , != , innot-in trên trường và hỗ trợ sắp xếp kết quả theo thứ tự tăng dần dựa trên giá trị trường này.
Giảm dần Hỗ trợ các mệnh đề truy vấn < , <= , == , >= , > , != , innot-in trên trường và hỗ trợ sắp xếp kết quả theo thứ tự giảm dần dựa trên giá trị trường này.
Mảng‑chứa Hỗ trợ các mệnh đề truy vấn array-containsarray-contains-any trên trường.

phạm vi truy vấn

Mỗi chỉ mục nằm trong phạm vi của một bộ sưu tập hoặc một nhóm bộ sưu tập. Đây được gọi là phạm vi truy vấn của chỉ mục:

Phạm vi thu thập
Cloud Firestore tạo các chỉ mục có phạm vi thu thập theo mặc định. Các chỉ mục này hỗ trợ các truy vấn trả về kết quả từ một bộ sưu tập duy nhất.

Phạm vi nhóm bộ sưu tập
Một nhóm bộ sưu tập bao gồm tất cả các bộ sưu tập có cùng ID bộ sưu tập. Để chạy một truy vấn nhóm bộ sưu tập trả về kết quả được lọc hoặc sắp xếp từ một nhóm bộ sưu tập, bạn phải tạo một chỉ mục tương ứng với phạm vi nhóm bộ sưu tập.

Thứ tự mặc định và trường __name__

Ngoài việc sắp xếp tài liệu theo các chế độ chỉ mục được chỉ định cho từng trường (tăng dần hoặc giảm dần), các chỉ mục áp dụng cách sắp xếp cuối cùng theo trường __name__ của mỗi tài liệu. Giá trị của trường __name__ được đặt thành đường dẫn tài liệu đầy đủ. Điều này có nghĩa là các tài liệu trong tập kết quả có cùng giá trị trường được sắp xếp theo đường dẫn tài liệu.

Theo mặc định, trường __name__ được sắp xếp theo cùng hướng của trường được sắp xếp cuối cùng trong định nghĩa chỉ mục. Ví dụ:

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
các thành phố name, __name__ Bộ sưu tập
các thành phố state, __name__ Bộ sưu tập
các thành phố gia đi lên, số đi lên, __name__ Bộ sưu tập

Để sắp xếp kết quả theo hướng __name__ không mặc định, bạn cần tạo chỉ mục đó.

Ví dụ lập chỉ mục

Bằng cách tự động tạo các chỉ mục trường đơn cho bạn, Cloud Firestore cho phép ứng dụng của bạn nhanh chóng hỗ trợ các truy vấn cơ sở dữ liệu cơ bản nhất. Chỉ mục trường đơn cho phép bạn thực hiện các truy vấn đơn giản dựa trên giá trị trường và bộ so sánh < , <= , == , >= , >in . Đối với các trường mảng, chúng cho phép bạn thực hiện truy vấn array-containsarray-contains-any truy vấn nào.

Để minh họa, hãy kiểm tra các ví dụ sau từ quan điểm tạo chỉ mục. Đoạn mã sau tạo một vài tài liệu về thành city trong bộ sưu tập cities và đặt các trường name , state , country , capital , populationtags cho mỗi tài liệu:

mạng
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

Giả sử cài đặt lập chỉ mục tự động mặc định, Cloud Firestore cập nhật một chỉ mục trường đơn tăng dần cho mỗi trường không phải mảng, một chỉ mục trường đơn giảm dần cho mỗi trường không phải mảng và một chỉ mục trường đơn chứa mảng cho trường mảng. Mỗi hàng trong bảng sau đại diện cho một mục nhập trong chỉ mục một trường:

Bộ sưu tập Trường được lập chỉ mục phạm vi truy vấn
các thành phố tên Bộ sưu tập
các thành phố Bộ sưu tập
các thành phố quốc gia Bộ sưu tập
các thành phố vốn Bộ sưu tập
các thành phố dân số Bộ sưu tập
các thành phố tên Bộ sưu tập
các thành phố thái đi xuống Bộ sưu tập
các thành phố nước Bộ sưu tập
các thành phố vốn Bộ sưu tập
các thành phố số giảm Bộ sưu tập
các thành phố vùng array-contains Bộ sưu tập

Các truy vấn được hỗ trợ bởi các chỉ mục trường đơn

Bằng cách sử dụng các chỉ mục trường đơn được tạo tự động này, bạn có thể chạy các truy vấn đơn giản như sau:

mạng
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

Bạn cũng có thể tạo các truy vấn đẳng thức in và gộp ( == ):

mạng
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

Nếu bạn cần chạy một truy vấn phức hợp sử dụng phép so sánh phạm vi ( < , <= , > hoặc >= ) hoặc nếu bạn cần sắp xếp theo một trường khác, bạn phải tạo một chỉ mục tổng hợp cho truy vấn đó.

Chỉ mục array-contains cho phép bạn truy vấn trường mảng regions :

mạng
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

Các truy vấn được hỗ trợ bởi các chỉ mục tổng hợp

Cloud Firestore sử dụng các chỉ mục tổng hợp để hỗ trợ các truy vấn phức hợp chưa được chỉ mục trường đơn hỗ trợ. Ví dụ: bạn sẽ cần một chỉ mục tổng hợp cho các truy vấn sau:

mạng
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

Các truy vấn này yêu cầu chỉ mục tổng hợp bên dưới. Vì truy vấn sử dụng đẳng thức ( == hoặc in ) cho trường country , nên bạn có thể sử dụng chế độ chỉ mục tăng dần hoặc giảm dần cho trường này. Theo mặc định, mệnh đề bất đẳng thức áp dụng thứ tự sắp xếp tăng dần dựa trên trường trong mệnh đề bất đẳng thức.

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
các thành phố (hoặc ) quốc gia, dân số Bộ sưu tập

Để chạy các truy vấn tương tự nhưng với thứ tự sắp xếp giảm dần, bạn cần có một chỉ mục tổng hợp bổ sung theo hướng giảm dần cho population :

mạng
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
các thành phố gia đi lên, số đi lên Bộ sưu tập
các thành phố gia đi lên , số đi xuống Bộ sưu tập

Bạn cũng cần tạo một chỉ mục tổng hợp để kết hợp truy vấn array-contains hoặc array-contains-any truy vấn nào với các mệnh đề bổ sung.

mạng
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
các thành phố thẻ chứa mảng , viết hoa (hoặc ) Bộ sưu tập

Các truy vấn được hỗ trợ bởi chỉ mục nhóm bộ sưu tập

Để minh họa một chỉ mục với phạm vi nhóm bộ sưu tập, hãy tưởng tượng bạn thêm một bộ sưu tập con các landmarks vào một số tài liệu city :

mạng
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

Bằng cách sử dụng chỉ mục một trường sau với phạm vi bộ sưu tập, bạn có thể truy vấn bộ sưu tập landmarks của một thành phố dựa trên trường category :

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
Các địa danh danh mục (hoặc ) Bộ sưu tập
mạng
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

Bây giờ, hãy tưởng tượng rằng bạn quan tâm đến việc truy vấn các địa danh trên tất cả các thành phố. Để chạy truy vấn này trên nhóm bộ sưu tập bao gồm tất cả các bộ sưu tập landmarks , bạn phải bật chỉ mục một trường landmarks với phạm vi nhóm bộ sưu tập:

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
Các địa danh danh mục (hoặc ) Nhóm bộ sưu tập

Với chỉ mục này được bật, bạn có thể truy vấn nhóm bộ sưu tập landmarks :

mạng
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

Để chạy truy vấn nhóm bộ sưu tập trả về kết quả được lọc hoặc sắp xếp, bạn phải bật chỉ mục tổng hợp hoặc trường đơn tương ứng với phạm vi nhóm bộ sưu tập. Tuy nhiên, truy vấn nhóm bộ sưu tập không lọc hoặc sắp xếp kết quả không yêu cầu bất kỳ định nghĩa chỉ mục bổ sung nào.

Ví dụ: bạn có thể chạy truy vấn nhóm bộ sưu tập sau mà không cần bật chỉ mục bổ sung:

mạng
db.collectionGroup("landmarks").get()

Mục nhập chỉ mục

Các chỉ mục được định cấu hình của dự án của bạn và cấu trúc của tài liệu xác định số lượng mục nhập chỉ mục cho tài liệu. Các mục nhập chỉ mục được tính vào giới hạn số lượng mục nhập chỉ mục .

Ví dụ sau minh họa các mục nhập chỉ mục của một tài liệu.

Tài liệu

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

Chỉ mục một trường

  • city_name ASC
  • city_name DESC
  • nhiệt độ.summer ASC
  • nhiệt độ.mùa hè DESC
  • nhiệt độ.winter ASC
  • nhiệt độ.mùa đông DESC
  • Vùng lân cận Array Chứa (ASC và DESC)

chỉ mục tổng hợp

  • city_name ASC, khu phố ARRAY
  • city_name DESC, khu phố ARRAY

Mục nhập chỉ mục

Cấu hình lập chỉ mục này dẫn đến 18 mục nhập chỉ mục sau đây cho tài liệu:

Mục lục dữ liệu được lập chỉ mục
Các mục nhập chỉ mục một trường
city_name ASC city_name: "San Francisco"
city_name DESC city_name: "San Francisco"
nhiệt độ.summer ASC nhiệt độ.mùa hè: 67
nhiệt độ.mùa hè DESC nhiệt độ.mùa hè: 67
nhiệt độ.winter ASC nhiệt độ.mùa đông: 55
nhiệt độ.mùa đông DESC nhiệt độ.mùa đông: 55
Mảng vùng lân cận Chứa ASC khu phố: "Sứ mệnh"
Mảng vùng lân cận Chứa DESC khu phố: "Sứ mệnh"
Mảng vùng lân cận Chứa ASC khu phố: "Trung tâm thành phố"
Mảng vùng lân cận Chứa DESC khu phố: "Trung tâm thành phố"
Mảng vùng lân cận Chứa ASC khu phố: "Bến du thuyền"
Mảng vùng lân cận Chứa DESC khu phố: "Bến du thuyền"
Các mục nhập chỉ mục tổng hợp
city_name ASC, khu phố ARRAY city_name: "San Francisco", các vùng lân cận: "Sứ mệnh"
city_name ASC, khu phố ARRAY city_name: "San Francisco", khu vực lân cận: "Trung tâm thành phố"
city_name ASC, khu phố ARRAY city_name: "San Francisco", các vùng lân cận: "Bến du thuyền"
city_name DESC, khu phố ARRAY city_name: "San Francisco", các vùng lân cận: "Sứ mệnh"
city_name DESC, khu phố ARRAY city_name: "San Francisco", khu vực lân cận: "Trung tâm thành phố"
city_name DESC, khu phố ARRAY city_name: "San Francisco", các vùng lân cận: "Bến du thuyền"

Chỉ số và giá cả

Các chỉ mục đóng góp vào chi phí lưu trữ của ứng dụng của bạn. Để biết thêm về cách tính kích thước lưu trữ cho các chỉ mục, hãy xem Kích thước mục nhập chỉ mục .

Tận dụng việc hợp nhất chỉ mục

Mặc dù Cloud Firestore sử dụng một chỉ mục cho mọi truy vấn nhưng không nhất thiết yêu cầu một chỉ mục cho mỗi truy vấn. Đối với các truy vấn có nhiều mệnh đề bằng ( == ) và mệnh đề orderBy , tùy chọn, Cloud Firestore có thể sử dụng lại các chỉ mục hiện có. Cloud Firestore có thể hợp nhất các chỉ mục cho các bộ lọc đẳng thức đơn giản để xây dựng các chỉ mục tổng hợp cần thiết cho các truy vấn đẳng thức lớn hơn.

Bạn có thể giảm chi phí lập chỉ mục bằng cách xác định các tình huống mà bạn có thể tận dụng lợi thế của việc hợp nhất chỉ mục. Ví dụ: hãy tưởng tượng một bộ sưu tập restaurants cho ứng dụng xếp hạng nhà hàng:

  • dấu nhà hàng

    • burgerthyme

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

Bây giờ, hãy tưởng tượng ứng dụng này sử dụng các truy vấn như bên dưới. Lưu ý rằng ứng dụng sử dụng kết hợp các mệnh đề bình đẳng cho category , cityeditors_pick trong khi luôn sắp xếp theo mức tăng dần star_rating :

mạng
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

Bạn có thể tạo một chỉ mục cho mỗi truy vấn:

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
nhà hàng danh mục, star_rating Bộ sưu tập
nhà hàng thành phố, star_rating Bộ sưu tập
nhà hàng danh mục, thành phố, star_rating Bộ sưu tập
nhà hàng danh mục, thành phố, editors_pick, star_rating Bộ sưu tập

Là một giải pháp tốt hơn, bạn có thể giảm số lượng chỉ mục bằng cách tận dụng khả năng của Cloud Firestore để hợp nhất các chỉ mục cho mệnh đề bình đẳng:

Bộ sưu tập Các trường được lập chỉ mục phạm vi truy vấn
nhà hàng danh mục, star_rating Bộ sưu tập
nhà hàng thành phố, star_rating Bộ sưu tập
nhà hàng editors_pick, star_rating Bộ sưu tập

Tập hợp các chỉ mục này không chỉ nhỏ hơn mà còn hỗ trợ một truy vấn bổ sung:

mạng
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

giới hạn lập chỉ mục

Các giới hạn sau áp dụng cho các chỉ mục. Đối với tất cả hạn ngạch và giới hạn, xem Hạn ngạch và giới hạn .

Giới hạn Thông tin chi tiết
Số chỉ mục tổng hợp tối đa cho một cơ sở dữ liệu

200

Bạn có thể liên hệ với bộ phận hỗ trợ để yêu cầu tăng giới hạn này.

Số lượng cấu hình trường đơn tối đa cho cơ sở dữ liệu

200

Cho phép tổng cộng 200 cấu hình cấp trường. Một cấu hình trường có thể chứa nhiều cấu hình cho cùng một trường. Ví dụ: miễn lập chỉ mục một trường và chính sách TTL trên cùng một trường được tính là một cấu hình trường đối với giới hạn.

Số mục nhập chỉ mục tối đa cho mỗi tài liệu

40.000

Số lượng mục nhập chỉ mục là tổng của những điều sau đây cho một tài liệu:

  • Số mục nhập chỉ mục trường đơn
  • Số mục nhập chỉ mục tổng hợp

Để xem cách Cloud Firestore biến một tài liệu và một tập hợp các chỉ mục thành các mục nhập chỉ mục, hãy xem ví dụ về số lượng mục nhập chỉ mục này .

Số trường tối đa trong một chỉ mục tổng hợp 100
Kích thước tối đa của một mục nhập chỉ mục

7,5 KiB

Để xem cách Cloud Firestore tính toán kích thước mục nhập chỉ mục, hãy xem kích thước mục nhập chỉ mục .

Tổng kích thước tối đa của các mục nhập chỉ mục của tài liệu

8 MiB

Tổng kích thước là tổng của những điều sau đây cho một tài liệu:

  • Tổng kích thước của các mục nhập chỉ mục một trường của tài liệu
  • Tổng kích thước của các mục nhập chỉ mục tổng hợp của tài liệu
  • Kích thước tối đa của một giá trị trường được lập chỉ mục

    1500 byte

    Giá trị trường trên 1500 byte bị cắt bớt. Các truy vấn liên quan đến giá trị trường bị cắt bớt có thể trả về kết quả không nhất quán.

    Lập chỉ mục các phương pháp hay nhất

    Đối với hầu hết các ứng dụng, bạn có thể dựa vào lập chỉ mục tự động và liên kết thông báo lỗi để quản lý chỉ mục của mình. Tuy nhiên, bạn có thể muốn thêm các trường hợp miễn trừ cho một trường trong các trường hợp sau:

    Trường hợp Sự miêu tả
    Trường chuỗi lớn

    Nếu bạn có một trường chuỗi thường chứa các giá trị chuỗi dài mà bạn không sử dụng để truy vấn, thì bạn có thể cắt giảm chi phí lưu trữ bằng cách miễn lập chỉ mục cho trường đó.

    Tỷ lệ ghi cao vào một bộ sưu tập chứa các tài liệu có giá trị tuần tự

    Nếu bạn lập chỉ mục một trường tăng hoặc giảm tuần tự giữa các tài liệu trong bộ sưu tập, chẳng hạn như dấu thời gian, thì tốc độ ghi tối đa cho bộ sưu tập là 500 lần ghi mỗi giây. Nếu không truy vấn dựa trên trường có giá trị tuần tự, bạn có thể miễn lập chỉ mục cho trường để bỏ qua giới hạn này.

    Ví dụ: trong trường hợp sử dụng IoT có tốc độ ghi cao, một bộ sưu tập chứa tài liệu có trường dấu thời gian có thể đạt đến giới hạn 500 lần ghi mỗi giây.

    trường TTL

    Nếu bạn sử dụng chính sách TTL (thời gian tồn tại) , hãy lưu ý rằng trường TTL phải là dấu thời gian. Lập chỉ mục trên các trường TTL được bật theo mặc định và có thể ảnh hưởng đến hiệu suất ở tốc độ lưu lượng truy cập cao hơn. Cách tốt nhất là thêm các trường hợp miễn trừ một trường cho các trường TTL của bạn.

    Mảng lớn hoặc trường bản đồ

    Các trường bản đồ hoặc mảng lớn có thể đạt tới giới hạn 40.000 mục nhập chỉ mục trên mỗi tài liệu. Nếu bạn không truy vấn dựa trên mảng lớn hoặc trường bản đồ, bạn nên miễn lập chỉ mục cho nó.