谷歌已经彻底改革了Firestore企业版的查询引擎,增加了管道(Pipeline)操作,这让开发者可以将多个查询阶段串联起来,用于复杂的聚合、数组操作和正则表达式匹配。这次更新消除了 Firestore 长期以来的查询限制,并使得索引成为可选的,使数据库与其他主要 NoSQL 平台持平。
Pipeline 操作通过数据库内部的顺序阶段来转换数据。开发者现在可以解包数组、聚合结果,并在聚合输出上进行过滤,这些能力之前是不可用的。谷歌声称新引擎支持超过 100 个查询特性,现在可以在 Android、iOS、Web 和管理员 SDK 的预览版中使用,Flutter、Unity 和 C++的支持将稍后推出。
Firebase 团队用一个食谱应用示例来说明这一变化。以前,如果标签以数组的形式存储在食谱文档中,就没有办法在查询中提取和计数它们以找到流行标签。开发者不得不维护单独的标签元数据。有了 Pipeline 操作,一个查询就可以解包标签数组,计算所有食谱中的出现次数,按标签名称分组,按流行度排序,并返回前十个。
const snapshot = await db.pipeline() .collection("recipes") .unnest(field("tags").as("tagName")) .aggregate({ accumulators: [countAll().as("tagCount")], groups: ["tagName"] }).sort(field("tagCount").descending()) .limit(10) .execute()这种方法模仿了 MongoDB 和类似数据库中的聚合管道。Firestore 产品经理 Tyler Crowe 和 Minh Nguyen写道,这“使我们与其他主要 NoSQL 数据库在功能上持平”。
Firestore 企业版不会自动创建索引,也不要求它们来运行查询。这颠覆了标准版模型,后者默认构建单字段索引,并依赖它们来执行查询。权衡是:写入速度更快,存储成本降低,但在大型未索引集合上的查询运行缓慢。
谷歌增加了 Query Explain 和 Query Insights 工具,以帮助开发者发现性能问题。Query Explain 显示哪些查询命中了索引,哪些回退到全表扫描。Query Insights 显示最常运行的查询及其性能模式,以便开发者可以决定索引实际上在哪里重要。
企业版支持稀疏、非稀疏和唯一索引,对性能和执行现有查询都很有用。开发者可以将标准查询包装在 db.pipeline.createFrom(query) 中,并立即开始添加新阶段。SDKs 与标准版语法保持向后兼容性,因此团队不必重写正在工作的代码。
从标准版迁移到企业版需要使用 Firestore 的导入/导出服务复制到新数据库。索引和安全规则不会自动转移——团队需要重新创建它们。任何指向旧数据库的客户端将继续使用它,直到连接字符串更改。
尽管名为“企业版”,但该版本包括一个免费层。定价模型也发生了变化:企业版将写入和删除合并为一个“写入操作”类别,并按数据块计费,这可以降低小文档应用的成本。标准版计费将写入和删除分别对待。
谷歌关于更新的博客文章强调了目标用例:
像电子商务、互动游戏、内容管理和复杂的用户个性化这样的高要求解决方案。
公司指出,标准版的“简化查询引擎对索引有很强的依赖性,通常需要在整个应用生命周期中提前规划。”
与谷歌云系统合作的云架构师 Gustavo Olmedo 在 LinkedIn 上分析了架构影响。他指出,随着应用的增长,数据库经常成为无意的数据处理层,Firestore 的新引擎使这一点变得明确,而不是迫使团队在应用代码中处理复杂性。
Olmedo 强调了从解决方案架构角度的三个关键变化:索引控制转移到开发者那里,提高了写入性能并减少了存储开销;可观测性成为一等公民,具有查询规划和执行统计;成本变得更加可预测,使用量定价与文档大小挂钩,而不是隐含的索引行为。
他指出了迁移的灵活性:
现有的 Firestore 用户可以逐步采用管道,保持向后兼容性,甚至通过其 MongoDB 兼容模式重用工具。
Olmedo 将核心问题定义为:“将这个逻辑更接近数据是否简化了整个系统?”而不仅仅是数据库能否做更多。
预览版中存在一些限制:Pipeline 操作尚未与 Firestore 模拟器一起工作,不支持实时监听或离线持久性,并且不处理数组包含或向量搜索,效率不如标准版。谷歌表示将使用其他索引作为回退,但警告预览期间性能可能会落后。
标准版不会消失。谷歌确认将继续支持两个版本,熟悉的查询方法也不会被弃用。如果在标准数据库上运行流水线操作,会抛出服务器错误。
新的查询引擎作为 Firestore 企业版的一部分,在原生模式下发布。完整的文档和代码示例可在 Firebase 的开发文档中找到。
原文链接:
https://www.infoq.com/news/2026/02/firestore-enterprise-pipeline/





