Cloud Firestore 入门
了解 Cloud Firestore 的入门知识。
是否需要关系型或非关系型数据库取决于你的项目用例。对于特定项目,同时使用两者也很常见。
本课程的重点是名为 Cloud Firestore 的非关系型文档数据库,它是整体 Firebase 开发平台 的一部分。
Cloud Firestore
除了可用性、性能和可扩展性外,灵活性同样重要。Firestore 提供了 集合(collections) 来分组文档,并在必要时支持嵌套集合以实现更细粒度的组织。
它还具备两个非常强大的功能:数据库触发器 和 设备间数据同步,即使设备处于离线状态也能实现。
数据库触发器
想象一下,你有一个 User 集合,当新用户注册时,会插入一条新文档。
在没有 Firestore 的情况下,你的应用代码需要先将用户对象持久化到数据库中,然后只有在持久化成功后,才调用邮件服务向新用户发送欢迎信息。
而使用 Firestore,你可以部署一个服务来处理由数据库变化触发的事件。现在,你的应用代码只需负责持久化用户对象。Firestore 会自动触发你的其他服务发送欢迎邮件。如果数据库操作失败,邮件服务则不会被调用。
这使代码解耦,让你能够独立地开发、测试和运行各个服务,从而大幅提升开发速度。
数据同步
这是一个非常实用的功能,可以帮你省去大量原本需要手动编写的代码,这些代码用于在多个设备之间同步数据,即使设备处于离线状态也是如此。
想象一个社交媒体应用,用户可以发布图片。一位用户正在飞机上,看到了令人惊叹的极光。他们拿出手机,打开使用 Cloud Firestore 和 Firebase SDK 的渐进式网页应用,迅速拍下一张照片,创建一条新动态并提交。一旦飞机降落,移动设备连接到互联网,该动态就会与云端的 Cloud Firestore 同步,旅行者的亲友便能欣赏这张照片。
安全规则
安全规则是一个非常强大的概念,可用于保护你的 Firestore 数据库。让我们回顾一下课程早期开发的一个示例,当时我们创建了一个 Firestore 实例。
1rules_version = '2'; 2service cloud.firestore { 3 match /databases/{database}/documents { 4 match /posts/{post} { 5 allow read; 6 allow write: if request.auth.uid != null; 7 } 8 } 9}
你觉得这段安全规则的作用是什么?花一分钟仔细阅读一下。用通俗易懂的话来说,任何人都可以阅读博客文章,但只有经过身份验证的用户才能创建新的帖子。
还需要注意的是,根据上述安全规则,所有其他数据库操作都被禁止,必须显式定义规则才能启用!这意味着它们默认就是安全的。
替代方案
存在许多替代方案,其提供的功能和服务各不相同,例如 Firestore 所提供的功能。由于数量众多,无法列出完整清单,但以下是一些流行的数据库选项(不分先后顺序):
为什么选择 Firestore?
作为一项完全托管的服务,它与本课程之前概述的理念高度契合。Firestore 尽可能依赖云服务商提供的托管服务。
基于数据库变化执行服务的事件驱动特性,使 Cloud Firestore 变得尤为引人注目。在一个日益拥抱事件驱动架构的世界中,能够开箱即用地获得这种能力,无疑是一个绝佳的起点。
章节概览
本章我们将探讨 Firestore 的三个方面:
- 写入数据
- 读取数据
- 安全规则
Firestore 及其生态系统远不止 CRUD(创建、读取、更新、删除)功能。例如,我们将根据数据库中的变化自动触发服务。目前,我们先聚焦基础内容,为你的云原生网页应用打下坚实基础,以便开始自己的项目。
下图展示了本章在架构中的位置。