摘要

1) 一句话总结 谷歌对 Firestore 企业版进行了重大升级,引入了支持百余项新特性的管道(Pipeline)操作,将索引改为可选配置,并优化了计费模式与性能监控工具。

2) 关键要点

  • 引入管道(Pipeline)操作:允许串联多个查询阶段,实现复杂的聚合、数组解包、结果过滤和正则表达式匹配。
  • 百余项新查询特性:新引擎支持超过 100 个查询特性,已在 Android、iOS、Web 和管理员 SDK 的预览版中上线(Flutter、Unity 和 C++ 稍后推出)。
  • 索引机制变更为可选:企业版不再自动创建或强制依赖索引,开发者获得了索引控制权(支持稀疏、非稀疏和唯一索引),从而提升了写入速度并降低了存储成本。
  • 计费模式优化:保留免费层,将“写入”和“删除”合并为单一的“写入操作”并按数据块计费,有效降低了小文档应用的成本。
  • 新增性能监控工具:引入 Query Explain(显示索引命中与全表扫描情况)和 Query Insights(展示高频查询及性能模式),提升系统可观测性。
  • 高度向后兼容:SDK 语法与标准版兼容,现有查询可通过 db.pipeline.createFrom(query) 包装后直接添加新阶段,并支持 MongoDB 兼容模式重用工具。
  • 双版本长期共存:标准版不会被弃用,谷歌将继续支持两个版本。

3) 风险与不足

  • 查询性能风险:由于索引变为可选,在大型未索引集合上运行查询会变慢;且官方警告在预览期间,整体性能可能暂时落后于标准版。
  • 迁移成本与配置丢失:从标准版迁移至企业版需通过导入/导出服务复制数据,且原有的索引和安全规则不会自动转移,必须重新创建。
  • 预览版功能限制:当前管道操作不支持 Firestore 模拟器、实时监听、离线持久性、数组包含(array-contains)以及向量搜索。
  • 版本混用报错:若在标准版数据库上错误地运行管道操作,系统会直接抛出服务器错误。

正文

谷歌对 Firestore 企业版的查询引擎进行了彻底改革,正式新增了管道(Pipeline)操作。这一更新允许开发者将多个查询阶段串联起来,用于处理复杂的聚合、数组操作和正则表达式匹配。此次升级不仅消除了 Firestore 长期以来的查询限制,还使得索引成为可选配置,令其在功能上与其他主流 NoSQL 平台(如 MongoDB)齐平。

管道操作的强大能力

Pipeline 操作通过数据库内部的顺序阶段来转换数据。开发者现在可以解包数组、聚合结果,并在聚合输出上进行过滤——这些能力在以前是无法实现的。

新引擎支持超过 100 个查询特性,目前已在 Android、iOS、Web 和管理员 SDK 的预览版中提供(Flutter、Unity 和 C++ 的支持将稍后推出)。

应用示例: Firebase 团队以食谱应用为例说明了这一变化。过去,如果标签以数组形式存储在食谱文档中,开发者无法直接在查询中提取并计数以找出热门标签,只能在应用中维护单独的标签元数据。现在,通过 Pipeline 操作,只需一个查询即可完成全过程:解包标签数组、计算所有食谱中的出现次数、按标签名称分组、按流行度排序,并直接返回前十名。

索引机制与计费模式的转变

与默认构建单字段索引并依赖其执行查询的标准版不同,Firestore 企业版不会自动创建索引,也不强制要求使用索引来运行查询

  • 性能权衡: 这种设计的优势在于写入速度更快、存储成本更低;但代价是,在大型未索引集合上运行查询会变慢。企业版目前支持稀疏、非稀疏和唯一索引,以帮助开发者优化性能。
  • 计费模式调整: 尽管名为“企业版”,该版本依然包含一个免费层。在定价上,企业版将写入和删除合并为单一的“写入操作”类别,并按数据块计费,这有助于降低小文档应用的成本(标准版则是将写入和删除分开计费)。

性能监控与架构影响

为了帮助开发者发现性能问题,谷歌引入了强大的监控工具:

  • Query Explain:显示哪些查询命中了索引,哪些回退到了全表扫描。
  • Query Insights:展示最常运行的查询及其性能模式,帮助开发者决定哪里真正需要建立索引。

云架构师 Gustavo Olmedo 分析指出,随着应用增长,数据库往往会无意中成为数据处理层。Firestore 的新引擎明确了这一点,避免了团队被迫在应用代码中处理复杂逻辑。他强调了从架构角度带来的三个关键变化:

  1. 索引控制权转移:开发者掌握了索引控制权,提升了写入性能并减少了存储开销。
  2. 可观测性提升:查询规划和执行统计成为一等公民。
  3. 成本更可预测:使用量定价与文档大小挂钩,而非隐含的索引行为。

Olmedo 将核心问题总结为:“将逻辑推向更接近数据的地方,是否简化了整个系统?”而不仅仅是关注数据库本身能做多少事。

迁移指南与向后兼容性

谷歌强调,新版本非常适合电子商务、互动游戏、内容管理和复杂的用户个性化等高要求场景。相比之下,标准版对索引有很强的依赖,通常需要在整个应用生命周期中提前规划。

  • 向后兼容: 现有的 Firestore 用户可以逐步采用管道。SDK 与标准版语法保持向后兼容,开发者只需将标准查询包装在 db.pipeline.createFrom(query) 中,即可立即开始添加新阶段,甚至可以通过其 MongoDB 兼容模式重用工具,无需重写正在工作的代码。
  • 迁移注意事项: 从标准版迁移到企业版需要使用 Firestore 的导入/导出服务将数据复制到新数据库。索引和安全规则不会自动转移,团队需要重新创建。在连接字符串更改之前,指向旧数据库的客户端将继续正常使用旧库。

预览版限制与双版本共存

目前 Pipeline 操作处于预览阶段,仍存在一些限制:

  • 尚未与 Firestore 模拟器兼容。
  • 不支持实时监听或离线持久性。
  • 不处理数组包含(array-contains)或向量搜索,效率暂不如标准版。
  • 谷歌表示将使用其他索引作为回退,但警告在预览期间性能可能会有所落后。

标准版不会消失。 谷歌确认将继续支持两个版本,熟悉的查询方法也不会被弃用。需要注意的是,如果在标准数据库上运行流水线操作,系统会抛出服务器错误。

目前,新的查询引擎已作为 Firestore 企业版的一部分在原生模式下发布,开发者可在 Firebase 的开发文档中获取完整的文档和代码示例。

关联主题