原生模式的 Firestore 總覽

原生模式的 Firestore 包含兩組作業:Firestore 核心作業和 Firestore 管道作業。

Firestore Core 作業提供標準的文件建立、讀取、更新和刪除 (CRUD) 功能,並內建即時監聽查詢和離線持續性支援。這個版本在作業上的明顯差異在於,索引為選用項目,不會自動為單一欄位建立。雖然這樣一來,不必預先設定索引就能執行查詢,但未建立索引的查詢預設會掃描整個集合。隨著資料集增加,這可能會導致延遲時間和成本增加。

Firestore 管道作業是 Firestore Enterprise 版的核心功能,採用先進的查詢引擎,大幅擴充可執行的查詢範圍。管道作業採用彈性的查詢語法和獨特的索引方法,索引為選用項目,不會自動建立,可為應用程式提供進階資料擷取作業。

Firestore 核心作業的功能

核心作業可執行標準 CRUD 作業和即時監聽查詢。不過,在 Enterprise 版本中使用這些作業時,索引和計費的基礎行為與 Standard 版本相比會有顯著差異。

功能和連貫性

核心作業會保留 Standard 版中熟悉的方法鏈結語法 (例如 .where()、.orderBy())。這些作業支援即時監聽查詢,以及行動和網頁用戶端的離線持續性。建議您將這些作業用於標準交易工作負載、簡單查詢,以及現有應用程式程式碼遷移。

自訂索引

與 Standard 版本不同,Enterprise 版本的 Core 作業不會自動建立單一欄位索引。索引為選用項目,不一定要建立才能執行查詢。如果缺少特定索引,查詢會執行完整的集合掃描。雖然未建立索引的查詢可快速建立原型,但隨著資料集增加,執行速度可能會變慢,成本也可能提高。開發人員必須手動建立索引,才能最佳化查詢效能並降低讀取單位消耗量。

計費模式 (依單位)

讀取單位是以 4 KB 為一組計費,而非依文件數量計費。如果未建立索引的查詢掃描大型集合,系統會根據所有文件掃描的總位元組數,消耗讀取單位。寫入單元以 1 KB 為一組計費。寫入文件時,系統會根據資料量和更新的索引項目數量,Standard 版本會強制自動建立單一欄位索引,但現在您可以選擇要建立索引的特定欄位,以最佳化寫入成本和效能。

Firestore 管道作業功能

Firestore Enterprise 版提供管道作業,採用進階查詢引擎,可消除 Firestore Standard 版的許多現有限制。管道作業提供數百項額外的查詢功能。管道作業具有下列功能:

階段式可組合語法

管道查詢的建構方式是定義一系列依序執行的階段。這可讓您執行複雜作業,例如篩選匯總結果,這在過去是無法做到的。

以下範例顯示管道查詢,可找出上個月瀏覽的不重複產品 ID 數量:

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

擴充功能

Pipeline 查詢導入了大量新功能,包括:

  • 匯總:支援新的匯總函式 (例如 sum(...)、min(...) 和 count_distinct(...)),並可與任意分組欄位結合。
  • 關聯式彙整:使用關聯子查詢,在集合和子集合之間執行伺服器端彙整。
  • 複雜篩選:支援數百個額外函式,可表達任意複雜的 where(...) 陳述式,包括 regex_match(...)、add(...) 和 str_contains(...),且不需硬性索引。
  • 部分讀取 / 投影:使用 select(...)、remove_fields(...) 和許多其他文件操作階段,擷取動態文件子集。

如要進一步瞭解這些功能,請參閱「使用管道作業查詢資料」。

即時和離線支援

如要使用即時和離線功能,開發人員可以運用 Firestore Enterprise 版本的 Firestore Core 作業。

用戶端和工具整合

Enterprise 版提供專屬功能,可與管道查詢互動及管理:

  • 查詢說明和剖析:您可以使用查詢說明結果,瞭解查詢消耗的讀取或寫入單位數量,並分析執行情況。
  • 查詢洞察: Enterprise 版支援查詢洞察功能,可讓您瞭解資料庫中執行的熱門查詢及其效能特性,進而判斷可在何處建立索引,提升效能並降低成本
  • 新索引類型: 您可以為 Enterprise 版本建立專用索引,包括稀疏、非稀疏和不重複索引等類型。此外,也支援建立及編輯 Enterprise 資料庫的向量搜尋索引。

Firestore Standard 版和 Firestore Enterprise 版的差異

核心作業和管道作業的主要差異在於索引管理,這會直接影響效能和成本。

Standard 版 - 核心作業 Enterprise 版:核心作業和管道作業
索引規定 查詢必須使用索引。

系統會自動建立個別欄位的索引,但較複雜的查詢則需要手動設定複合式索引或集合群組索引。

索引並非必要,因此查詢時可選擇是否使用。

您可以視需要定義索引。Enterprise 版也支援更多索引類型,包括非稀疏/稀疏和不重複索引。

索引欄位 如果索引欄位中沒有 __name__ 欄位,系統會自動附加該欄位。 __name__「不會」自動附加至已建立索引的欄位。如果 __name__ 對應用程式很重要,您必須在索引欄位中明確指定。
排列順序正規化 查詢的 order by 子句會正規化,方法是在結尾附加不等式欄位和 __name__ 欄位 (如果尚未存在)。無論 order by 子句中包含哪些其他欄位,這都能確保結果會以不重複且確定的順序排列。 不正規化排列順序。sort a ASC 等排列順序只能保證結果會依欄位 a 排序。Cloud Firestore 會使用現有索引,盡可能以最有效率的順序傳回結果。因此,如果 a 在結果集中並非唯一,則結果的順序可能會因查詢而異,具體取決於索引設定、執行策略等。如要保證結果的順序唯一且確定,您需要在排序順序中新增唯一欄位,例如 __name__。
效能 索引查詢:效能和費用會隨著結果集的大小而調整。

未建立索引的查詢:效能和費用會隨著資料集大小而調整。

索引查詢:效能和成本會隨著結果集的大小而調整。

建議您使用「查詢說明」和「查詢洞察」工具建立索引,並提高查詢效能和成本效益。

儲存空間成本影響 自動索引和複合式索引會產生儲存空間負擔。 系統不會自動為每個欄位建立索引,因此可以節省儲存空間費用。
成本基準 依文件讀取、寫入和刪除作業計費。 依讀取單位 (4 KB 為一組) 和寫入單位 (1 KB 為一組) 計費。寫入索引項目會耗用寫入單位。

請參閱範例,瞭解新定價。

安全性規則 安全性規則會驗證讀取/寫入權限,保護集合。 安全性規則會驗證讀取/寫入權限,保護集合。請參閱資料模型指南,瞭解如何建立資料模型,以支援管道查詢。