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.

Chỉ mục là một yếu tố quan trọng trong hoạt động của cơ sở dữ liệu. Giống như chỉ mục của một cuốn sách ánh xạ các chủ đề trong sách thành số trang, chỉ mục cơ sở dữ liệu ánh xạ các mục trong cơ sở dữ liệu đến vị trí của chúng trong cơ sở dữ liệu. Khi bạn gửi cho cơ sở dữ liệu một truy vấn, cơ sở dữ liệu có thể sử dụng một chỉ mục để nhanh chóng tra cứu vị trí của các mục 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, thì 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 diễn ra chậm chạp 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ố lượng 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 để 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à kiểm tra ứng dụng của mình, Cloud Firestore giúp bạn xác định và tạo 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 đơn và trường tổ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ữ một ánh xạ được sắp xếp của tất cả các tài liệu trong một tập hợp chứa một trường cụ thể. Mỗi mục nhập trong chỉ mục trường đơn 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ý 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 của cơ sở dữ liệu và miễn trừ chỉ mục.

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 phạm vi tập hợ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 phạm vi thu thập.

  • Chỉ mục trường đơn với phạm vi nhóm tập hợ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 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 một trường miễn chỉ mục duy nhất. Quyền miễn lập chỉ mục ghi đè cài đặt 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 trường đơn 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 trường đơn mà nếu không thì tính năng lập chỉ mục tự động sẽ kích hoạt. Đối với các 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 chỉ mục trường đơn miễn cho một trường bản đồ, 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 các trường hợp miễn trừ chỉ số trường đơn cho các trường con cụ thể. Nếu bạn xóa một trường hợp miễn trừ cho một trường con, trường con sẽ kế thừa các cài đặt miễn trừ của trường cha, nếu chúng tồn tại hoặc các cài đặt trên toàn cơ sở dữ liệu nếu không có trường con nào tồn tại.

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

Chỉ mục tổng hợp

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ó thứ tự để lập chỉ mục.

Cloud Firestore sử dụng 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 chỉ mục tổng hợp giống như đối với 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ần thiết trước, Cloud Firestore sẽ trả về thông báo lỗi chứa liên kết mà bạn có thể theo dõi để tạo chỉ mục bị thiếu. Điều này xảy ra bất cứ khi nào bạn thực hiện một 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ế độ lập 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ế độ lập 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 mỗi 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ế độ lập chỉ mục sau:

Chế độ lập chỉ mục Sự mô 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ợ array-containsarray-contains-any mệnh đề truy vấn nào trên trường.

Phạm vi truy vấn

Mỗi chỉ mục được phân chia thành một tập hợp hoặc một nhóm tập hợ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 chỉ mục với 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 tập hợp duy nhất.

Phạm vi nhóm thu thậ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 một ID bộ sưu tập. Để chạy truy vấn nhóm tập hợp trả về kết quả đã lọc hoặc có thứ tự từ một nhóm tập hợp, bạn phải tạo chỉ mục tương ứng với phạm vi nhóm tập hợp.

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

Bằng cách tự động tạo 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à các 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 các truy vấn array-containsarray-contains-any .

Để minh họa, hãy xem xét các ví dụ sau theo quan điểm của việc tạo chỉ mục. Đoạn mã sau tạo một vài tài liệu 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:

Web
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ố name Bộ sưu tập
các thành phố trạng thái Bộ sưu tập
các thành phố country Bộ sưu tập
các thành phố capital Bộ sưu tập
các thành phố dân số Bộ sưu tập
các thành phố name Bộ sưu tập
các thành phố trạng thái Bộ sưu tập
các thành phố quốc gia Bộ sưu tập
các thành phố capital Bộ sưu tập
các thành phố dân số 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

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:

Web
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 in và kết hợp ( == ):

Web
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 truy vấn kết hợp sử dụng so sánh phạm vi ( < , <= , > hoặc >= ) hoặc nếu bạn cần sắp xếp theo trường khác, bạn phải tạo 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 :

Web
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 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 hỗ trợ bởi các chỉ mục trường đơn. Ví dụ: bạn sẽ cần một chỉ mục tổng hợp cho các truy vấn sau:

Web
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 một bằng ( == hoặc in ) cho trường country , 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ố quốc gia (hoặc ), 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 một chỉ mục tổng hợp bổ sung theo hướng giảm dần cho tập population :

Web
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ố quốc gia , dân số Bộ sưu tập
các thành phố quốc gia , dân số Bộ sưu tập

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

Web
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ố mảng chứa thẻ, (hoặc ) viết hoa Bộ sưu tập

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

Để chứng minh 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 phụ các landmarks vào một số tài liệu city :

Web
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" });

Sử dụng chỉ mục trường đơn sau đây với phạm vi thu thậ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
Web
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 tập hợp bao gồm tất cả các tập hợp landmarks , bạn phải bật chỉ mục trường đơn landmarks với phạm vi nhóm tập hợ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 sưu tập

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

Web
var landmarksGroupRef = db.collectionGroup("landmarks");

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

Để chạy truy vấn nhóm tập hợp trả về kết quả đã lọc hoặc có thứ tự, 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 tập hợp. Tuy nhiên, các truy vấn nhóm tập hợ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 thu thập sau đây mà không cần bật chỉ mục bổ sung:

Web
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 một tài liệu xác định số lượng mục nhập chỉ mục cho một tài liệu. Các mục nhập chỉ mục được tính vào giới hạn số 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 độ. ASC mùa hè
  • nhiệt độ. mùa hè DESC
  • nhiệt độ. mùa đông ASC
  • nhiệt độ. MÔ TẢ mùa đông
  • vùng lân cận Chứa mảng (ASC và DESC)

Chỉ mục tổng hợp

  • city_name ASC, vùng lân cận ARRAY
  • city_name DESC, vùng lân cận 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 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 trường đơn
city_name ASC city_name: "San Francisco"
city_name DESC city_name: "San Francisco"
nhiệt độ. ASC mùa hè nhiệt độ. mùa hè: 67
nhiệt độ. mùa hè DESC nhiệt độ. mùa hè: 67
nhiệt độ. mùa đông ASC nhiệt độ. mùa đông: 55
nhiệt độ. MÔ TẢ mùa đông nhiệt độ. mùa đông: 55
vùng lân cận Mảng Chứa ASC vùng lân cận: "Mission"
vùng lân cận Mảng chứa DESC vùng lân cận: "Mission"
vùng lân cận Mảng Chứa ASC vùng lân cận: "Downtown"
vùng lân cận Mảng chứa DESC vùng lân cận: "Downtown"
vùng lân cận Mảng Chứa ASC vùng lân cận: "Marina"
vùng lân cận Mảng chứa DESC vùng lân cận: "Marina"
Mục nhập chỉ mục tổng hợp
city_name ASC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Mission"
city_name ASC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Downtown"
city_name ASC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Marina"
city_name DESC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Mission"
city_name DESC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Downtown"
city_name DESC, vùng lân cận ARRAY city_name: "San Francisco", vùng lân cận: "Marina"

Chỉ mục và giá 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 lợi thế của 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 nó 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ình đẳ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 bình đẳng đơ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 bình đẳng 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:

  • 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 star_rating tăng dần:

Web
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 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 city, star_rating Bộ sưu tập
nhà hàng category, city, star_rating Bộ sưu tập
nhà hàng category, city, 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 các điều khoản 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 city, star_rating Bộ sưu tập
nhà hàng editors_pick, star_rating Bộ sưu tập

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

Web
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, hãy xem Hạn ngạch và Giới hạn .

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

200

Tổng số 200 cấu hình cấp trường được phép. 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 trừ 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 theo giới hạn.

Số lượng 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 các mục sau cho một tài liệu:

  • Số lượng mục nhập chỉ mục trường đơn
  • Số lượng 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ố mục nhập chỉ mục này .

Số lượng 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ác kích thước sau cho một tài liệu:

  • Tổng kích thước của các mục nhập chỉ mục trường đơn 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 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 ngắn 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à các liên kết thông báo lỗi để quản lý các 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ừ đơn lẻ trong các trường hợp sau:

    Trường hợp Sự mô tả
    Các trường chuỗi lớn

    Nếu bạn có 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, bạn có thể cắt giảm chi phí lưu trữ bằng cách miễn lập chỉ mục trường.

    Tỷ lệ ghi cao vào 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 vào bộ sưu tập là 500 lần ghi mỗi giây. Nếu bạn 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 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 các 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. Như một phương pháp hay nhất, hãy thêm các trường hợp miễn trừ đơn lẻ cho các trường TTL của bạn.

    Các trường mảng hoặc bản đồ lớn

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