Google Cloud Firestore 是 Google Cloud 提供的全托管 NoSQL 文档数据库,最早与 Firebase 生态紧密结合,如今同时服务于移动应用、Web 应用以及服务器端系统。它采用集合(Collection)、文档(Document)和子集合(Subcollection)构成的数据模型,允许一个文档包含字符串、数字、数组、嵌套对象等多种字段,因此在应用层面看起来与 JSON 数据结构非常接近,但它并不是简单把 JSON 文件存进数据库。Google 官方目前将 Firestore 分为 Standard edition 和 Enterprise edition,两者在查询能力和功能上有所区别。
Firestore 最容易被误解的地方,是它的“分布式数据库”并不意味着采用传统意义上的最终一致性。Firestore 默认读取提供强一致性,写入也通过底层事务和复制机制保证数据一致性。Google 的架构文档显示,Firestore 内部会把数据划分为多个数据分片(splits),这些分片在区域或多区域架构中进行复制;当一个写入涉及多个分片时,还可能使用两阶段提交等机制完成操作。因此,不能把 Firestore 简化成“用户从最近区域节点读取数据,节点之间最终慢慢同步”。
Firestore 的地域部署主要分为区域和多区域两种模式。区域数据库将数据复制到一个区域内的多个可用区,适合对成本、写入延迟或者与其他 Google Cloud 服务的同区域部署更加敏感的应用。多区域数据库则把副本部署在多个区域,以提高可用性和数据持久性。Google 官方资料显示,多区域部署包含多个数据库副本,其中两个区域保存完整的读写副本,另一个区域作为见证副本参与复制。选择多区域可以获得更高的可用性,但同时会带来成本和延迟方面的取舍。
Firestore 特别适合数据结构变化较快的应用。传统关系型数据库通常需要设计表、字段和约束,而 Firestore 的文档模型允许不同文档包含不同字段,因此非常适合用户资料、内容管理、移动应用状态、聊天记录、订单状态以及各种层级化数据。例如一个用户文档可以保存基本资料,同时通过子集合保存地址、订单或者活动记录。Google 官方将这种层级化文档结构列为 Firestore 的核心数据模型之一。
实时数据同步是 Firestore 的另一个重要特点。客户端可以建立实时监听器,当数据库中的相关文档发生变化时,连接中的客户端能够收到更新,因此适合聊天、在线协作、订单状态、通知、多人编辑以及实时仪表盘等应用。Firestore 还支持客户端离线缓存,在网络暂时中断时,移动和 Web 应用仍然可以访问已经缓存的数据,恢复连接后再与服务器同步。
不过,“实时同步”并不意味着 Firestore 适合所有高频实时数据。比如证券行情、广告竞价、传感器每毫秒产生的大量数据等场景,真正的瓶颈可能不是数据库能不能实时推送,而是写入频率、数据生命周期、查询模式和成本是否合理。对于这类系统,Firestore 往往更适合保存用户关注的状态、交易结果、配置或业务记录,而不是把所有原始高频数据都直接写入同一个数据库。
Firestore 也支持事务和原子批量操作,因此不能简单地把 NoSQL 理解为“不适合事务”。例如电商系统中的库存扣减、账户状态变化以及订单状态更新,都可以根据业务需求使用事务。不过,事务并不能替代合理的数据建模。对于大量客户端同时修改同一个文档的场景,如果所有请求都集中到少数几个文档,就可能形成热点(hotspot),从而影响吞吐量和延迟。Google 官方因此建议在设计文档 ID 和写入路径时避免产生过度集中的访问模式,例如避免使用连续递增的文档 ID。
索引同样是 Firestore 架构设计的重要组成部分。Standard edition 会利用索引支持过滤、排序和组合查询,开发人员需要根据实际查询模式设计数据结构和索引。Firestore 并不是一个可以随意执行任意 SQL 的关系型数据库,某些复杂查询存在明确限制。例如 Standard edition 对 OR 查询的析取数量、not-in、!= 以及过滤条件和排序条件的组合都有具体限制。数据库规模扩大以后,索引数量、索引条目数量和单个文档产生的索引数据也需要纳入设计。
因此,Firestore 更适合“应用围绕文档和业务对象运行”的系统,而不是简单按照“数据量大就应该使用 NoSQL”的逻辑进行选择。用户账户、社交关系、聊天、内容平台、移动应用、在线协作、订单状态和实时业务后台,都可能成为合适的应用场景。对于这些系统,开发团队通常可以利用 Firestore 的 SDK、实时监听、离线能力和自动扩展功能减少大量基础设施工作。
另一方面,如果业务核心是复杂的多表关联、复杂聚合分析、传统 ERP 财务模型或者大量依赖 SQL 的报表查询,关系型数据库可能更自然。对于大规模分析任务,也不应该把 Firestore 当成数据仓库使用。实际架构中完全可以让 Firestore 保存应用实时业务数据,再通过其他 Google Cloud 数据服务承担分析、日志、数据湖或长期归档任务。
成本也必须纳入 Firestore 的架构设计。Firestore 的优势之一是无需传统数据库服务器那样提前规划大量计算和存储容量,但“自动扩展”并不意味着成本自动消失。大量读取、实时监听、大规模写入以及复杂索引都可能产生持续的数据库开销。因此,在设计系统时,除了关注单次操作是否成功,还应该计算每个用户每天产生多少读取、写入和监听事件,以及哪些数据应该缓存、聚合、归档或放到其他存储系统。
从工程角度看,Firestore 真正有价值的地方并不是简单的“它是一个 NoSQL 数据库”,而是它把文档数据模型、实时监听、离线能力、事务、自动扩展和 Google Cloud/Firebase 生态整合在了一起。对于需要快速开发、客户端直接交互、数据结构灵活以及实时状态同步的应用,这种模式可以明显减少后端基础设施工作;但对于复杂关系型数据和分析型工作负载,则应该从查询模式、事务模型、索引、数据规模和长期成本出发进行选择,而不是因为“NoSQL”三个字就决定数据库架构。
Google Cloud Firestore 是什么,NoSQL 数据库适合哪些应用场景
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP