Firestore 原生模式總覽

Firestore 原生模式包含兩組作業:Firestore Core 和 Firestore Pipeline 作業。

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

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

Firestore Core 作業的功能

核心作業可執行標準 CRUD 作業和即時監聽查詢。不過,在 Enterprise 版上使用這些作業時,與 Standard 版相比,有關索引和帳單的基礎行為會大幅變更。

功能和連貫性

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

自訂索引

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

計費模式 (以單位為準)

讀取單位的計費方式是以 4 KB 為一組,而非以文件數為準。如果未建立索引的查詢掃描大型集合,系統會根據所有文件中掃描的總位元組數,計算讀取單元用量。寫入單元是以 1 KB 為一組計費。寫入文件時,系統會消耗資料的單位,以及每個更新的索引項目的額外單位。與強制執行單一欄位自動建立索引的標準版不同,您現在可以選擇要建立索引的特定欄位,以最佳化寫入費用和效能。

Firestore 管道作業功能

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

以階段為基礎的可組合函式語法

管道查詢的建構方式是定義一系列依序執行的階段。這項功能可執行複雜作業,例如根據匯總結果進行篩選,這是先前無法做到的事。

以下範例顯示管道查詢,可找出上個月瀏覽的不重複產品 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()

擴充功能

管道查詢功能推出許多新功能,包括:

  • 匯總:支援新的匯總函式 (例如 sum(...)min(...)count_distinct(...)),並結合任意分組欄位。
  • 複雜篩選:支援數百個額外函式,可表示任意複雜的 where(...) 陳述式,包括 regex_match(...)add(...)str_contains(...),完全沒有硬性索引需求。
  • 部分讀取 / 投影:使用 select(...)remove_fields(...) 和許多其他文件操作階段,擷取文件的動態子集。

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

即時和離線支援

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

用戶端和工具整合

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

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

Firestore Standard 和 Firestore Enterprise 的差異

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

Firestore Standard - 核心作業 Firestore Enterprise - Core 和 Pipeline 作業
索引規定 查詢必須使用索引。

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

查詢不需要索引,因此索引為選用項目。

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

效能 已建立索引的查詢:效能和費用會根據結果集大小調整。

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

已建立索引的查詢:效能和費用會根據結果集大小調整。

建議您使用「查詢說明」和「查詢深入分析」工具建立索引,並提高查詢效能及降低查詢成本。

儲存空間成本影響 自動索引和複合式索引會產生儲存空間用量。 由於系統不會為每個欄位自動建立索引,因此可節省儲存空間費用。
成本基礎 系統會針對每項文件讀取寫入刪除作業收費。 系統會根據讀取單位 (4 KB 為一組) 和寫入單位 (1 KB 為一組) 收費。寫入索引項目會消耗寫入單位。

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

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