摘要
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 的新引擎明确了这一点,避免了团队被迫在应用代码中处理复杂逻辑。他强调了从架构角度带来的三个关键变化:
- 索引控制权转移:开发者掌握了索引控制权,提升了写入性能并减少了存储开销。
- 可观测性提升:查询规划和执行统计成为一等公民。
- 成本更可预测:使用量定价与文档大小挂钩,而非隐含的索引行为。
Olmedo 将核心问题总结为:“将逻辑推向更接近数据的地方,是否简化了整个系统?”而不仅仅是关注数据库本身能做多少事。
迁移指南与向后兼容性
谷歌强调,新版本非常适合电子商务、互动游戏、内容管理和复杂的用户个性化等高要求场景。相比之下,标准版对索引有很强的依赖,通常需要在整个应用生命周期中提前规划。
- 向后兼容: 现有的 Firestore 用户可以逐步采用管道。SDK 与标准版语法保持向后兼容,开发者只需将标准查询包装在
db.pipeline.createFrom(query)中,即可立即开始添加新阶段,甚至可以通过其 MongoDB 兼容模式重用工具,无需重写正在工作的代码。 - 迁移注意事项: 从标准版迁移到企业版需要使用 Firestore 的导入/导出服务将数据复制到新数据库。索引和安全规则不会自动转移,团队需要重新创建。在连接字符串更改之前,指向旧数据库的客户端将继续正常使用旧库。
预览版限制与双版本共存
目前 Pipeline 操作处于预览阶段,仍存在一些限制:
- 尚未与 Firestore 模拟器兼容。
- 不支持实时监听或离线持久性。
- 不处理数组包含(array-contains)或向量搜索,效率暂不如标准版。
- 谷歌表示将使用其他索引作为回退,但警告在预览期间性能可能会有所落后。
标准版不会消失。 谷歌确认将继续支持两个版本,熟悉的查询方法也不会被弃用。需要注意的是,如果在标准数据库上运行流水线操作,系统会抛出服务器错误。
目前,新的查询引擎已作为 Firestore 企业版的一部分在原生模式下发布,开发者可在 Firebase 的开发文档中获取完整的文档和代码示例。