Firestore 原生模式概览

Firestore 原生模式包含两组操作:Firestore 核心操作和 Firestore 流水线操作。

Firestore 核心操作提供标准的文档创建、读取、更新和删除 (CRUD) 功能,并内置支持实时监听查询和离线持久性。此版本的一个显著操作差异是,索引是可选的,并且不会自动为单个字段创建索引。虽然这样可以执行查询,而无需预先配置索引,但未编制索引的查询默认会扫描整个集合。随着数据集的增大,这会导致延迟时间和费用增加。

Firestore 流水线操作是 Firestore 企业版的核心功能,基于高级查询引擎构建,可显著扩展可能的查询范围。Firestore 流水线操作采用灵活的查询语法和独特的索引方法,其中索引是可选的,且不会自动创建,从而为应用实现高级数据检索操作。

Firestore 核心操作的特点

核心操作支持标准 CRUD 操作和实时侦听查询。不过,在企业版中使用这些操作时,与标准版相比,有关索引编制和结算的底层行为会发生显著变化。

功能和连续性

核心操作保留了标准版中使用的熟悉的方法链式调用语法(例如 .where().orderBy())。这些操作支持移动和 Web 客户端的实时侦听查询和离线持久性。建议将这些操作用于标准事务性工作负载、简单查找和现有应用代码迁移。

自定义索引编入

与标准版不同,企业版中的核心操作不会自动创建单字段索引。索引是可选的,并非执行查询所必需。如果缺少特定索引,查询会执行完整的集合扫描。虽然无索引查询有助于快速进行原型设计,但随着数据集的增大,其性能可能会下降,费用也会增加。开发者必须手动创建索引,以优化查询性能并减少读取单位消耗量。

结算模式(基于单位)

读取单位以 4 KB 为一批次计费,而不是按文档数量计费。扫描大型集合的未编制索引的查询将根据所有文档中扫描的总字节数消耗读取单位。写入单位以 1 KB 为批次收费。写入文档会消耗数据单位,以及每个更新的索引条目的额外单位。与强制执行自动单字段索引的 Standard 版不同,您现在可以选择要编制索引的特定字段,以优化写入费用和性能。

Firestore 流水线操作的特点

Firestore 企业版与流水线操作搭配使用,可利用高级查询引擎消除 Firestore 标准版的许多现有限制。Firestore 流水线操作提供了数百项额外的查询功能。Firestore 流水线操作具有以下功能:

基于阶段的可组合语法

流水线查询通过定义一系列按顺序执行的连续阶段来构建。这样一来,您就可以执行复杂的运算,例如对汇总结果进行过滤,而这在以前是不可能实现的。

以下示例展示了一个流水线查询,用于查找过去一个月内查看的唯一商品 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(...) 和许多其他文档操作阶段检索文档的动态子集。

如需详细了解这些功能,请参阅使用流水线操作查询数据

实时和离线支持

为了利用实时和离线功能,开发者可以在 Firestore 企业版上使用 Firestore 核心操作。

客户端和工具集成

企业版包含用于与流水线查询互动和管理流水线查询的专用功能:

  • 查询解释和分析:您可以使用查询解释结果来了解查询消耗的读取或写入单位数,并分析其执行情况。
  • Query Insights: 企业版支持 Query Insights,该功能通过提供数据库中运行的热门查询及其性能特征的可见性,帮助您确定可在何处创建索引以提高性能并降低成本。
  • 新的索引类型: 您可以为企业版创建专用索引,包括稀疏索引、非稀疏索引和唯一索引等索引类型。它还支持为企业版数据库创建和修改向量搜索索引。

Firestore 标准版与 Firestore 企业版之间的区别

核心操作与流水线操作之间的主要区别在于索引管理,这会直接影响性能和成本。

Firestore 标准版 - 核心操作 Firestore 企业版 - 核心操作和流水线操作
索引编制要求 查询需要使用索引。

系统会自动为单个字段创建索引,而更复杂的查询则依赖于必须手动配置的复合索引或集合组索引。

索引并非必需,因此对于查询而言是可选的。

您可以根据需要定义索引。企业版还支持更广泛的索引类型,包括稀疏/非稀疏索引和唯一索引。

性能 已编入索引的查询:性能和费用与结果集的大小成正比。

未编入索引的查询:性能和费用与数据集的大小成正比。

已编入索引的查询:性能和费用与结果集的大小成正比。

建议使用查询解释和 Query Insights 工具来创建索引,并提高查询的性能和降低查询的费用。

存储费用影响 自动索引和复合索引会产生存储开销。 您可以节省存储费用,因为系统不会自动为每个字段创建索引。
计费依据 按每次文档读取写入删除操作收费。 读取单位(4 KB 分批)和写入单位(1 KB 分批)收费。写入索引条目会消耗写入单位。

通过一些示例了解新价格。

安全规则 安全规则通过验证读/写权限来保护集合。 安全规则通过验证读/写权限来保护集合。如需了解如何对数据进行建模以支持流水线查询,请参阅数据模型指南。