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 為一組) 收費。寫入索引項目會消耗寫入單位。
請參閱範例,瞭解新定價。 |
| 安全性規則 | 安全性規則會驗證讀取/寫入權限,以保護集合。 | 安全性規則會驗證讀取/寫入權限,以保護集合。請參閱資料模型指南,瞭解如何建立資料模型,支援管道查詢。 |