Firestore 流水线操作概览

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

Firestore 流水线操作的特点

Firestore 企业版和新的流水线操作使用新的高级查询引擎,消除了 Firestore 标准版的许多现有限制。Firestore 流水线操作提供了 120 多项新的查询功能。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(...)),并可与任意分组字段结合使用。
  • 复杂过滤:支持 120 多种新函数来表达任意复杂的 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 分批)收费。写入索引条目会消耗写入单位。

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

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