Firebase Data Connect 服务有三个主要组件:
- 具有自己的 SQL 架构的底层 PostgreSQL 数据库
- Data Connect 应用架构(在
.gql
文件中声明) - 多个连接器(在您的
.gql
文件中声明)。
SQL 架构是数据的可信来源,Data Connect 架构是连接器查看这些数据的方式,连接器声明客户端可用于访问这些数据的 API。
使用 CLI 部署 Data Connect 服务时,您需要先迁移 SQL 架构,然后更新 Data Connect 架构,最后更新每个连接器。
重要的部署概念
为了全面了解部署,请务必注意架构和连接器的关键概念。
架构部署
Data Connect 架构的部署会影响 Cloud SQL 数据库的 SQL 架构。无论您是使用新数据库,还是需要以非破坏性方式调整现有数据库,Data Connect 都可以帮助您在部署期间迁移架构。
Data Connect 架构迁移有两种不同的架构验证模式:严格和兼容。
严格模式验证要求数据库架构与应用架构完全匹配,然后才能更新应用架构。Data Connect 架构中未使用的任何表或列都将从数据库中删除。
兼容模式验证要求数据库架构与应用架构兼容,然后才能更新应用架构;任何会删除架构、表或列的其他更改都是可选的。
兼容表示架构迁移只会影响应用架构中引用的表和列。数据库中未被应用架构使用的元素将保持不变。因此,部署后,您的数据库可能包含未使用的数据:
- 架构
- Tables
- 列
连接器部署
Data Connect 查询和更改操作不是由客户端代码提交并在服务器上执行的。相反,在部署时,这些 Data Connect 操作会存储在服务器上,例如 Cloud Functions。这意味着,部署可能会中断现有用户。
遵循部署工作流
您可以在本地项目目录和 Firebase 控制台中处理 Data Connect 项目。
建议的部署流程包括:
- 使用
firebase dataconnect:services:list
列出当前部署的架构和连接器。 - 管理任何架构更新。
- 使用
firebase dataconnect:sql:diff
检查 Cloud SQL 数据库与本地 Data Connect 架构之间的 SQL 架构差异。 - 根据需要,使用
dataconnect:sql:migrate
执行 SQL 架构迁移。
- 使用
- 通过运行
firebase deploy
执行架构和连接器部署,可以仅部署架构、仅部署连接器,也可以部署资源组合。
部署和管理 Data Connect 资源
最好在执行部署之前验证生产资源。
firebase dataconnect:services:list
在本地项目目录中工作时,您一般会参考交互式反馈,使用 firebase deploy
命令将架构和连接器部署到生产环境中。
借助 --only dataconnect
标志,您可以使用任何 deploy
命令将 Data Connect 部署与项目中的其他产品分开。
正常部署
firebase deploy --only dataconnect
在此常规部署中,Firebase CLI 会尝试部署架构和连接器。
它用于验证新架构是否会破坏任何现有连接器。进行破坏性更改时,请遵循最佳实践。
此外,还会在更新 Data Connect 架构之前验证 SQL 架构是否已迁移。如果没有,系统会自动提示您完成迁移架构所需的所有步骤。
--force
标志部署
firebase deploy --only dataconnect --force
如果连接器或 SQL 架构验证都不在意,您可以使用 --force
重新运行该命令以忽略它们。
--force
部署仍会检查 SQL 架构是否与 Data Connect 架构匹配,并在发现不兼容时发出警告并提示。
部署所选资源
如需更精细地控制部署,请将 --only
标志与 serviceId
参数结合使用。如需仅部署特定服务的架构更改,请执行以下操作:
firebase deploy --only dataconnect:serviceId:schema
您还可以为指定的连接器和服务部署所有资源。
firebase deploy --only dataconnect:serviceId:connectorId
最后,您可以为单个服务部署架构和所有连接器。
firebase deploy --only dataconnect:serviceId
回滚部署
如需执行手动回滚,请查看并部署以前版本的代码。如果原始部署包含破坏性重大更改,您可能无法完全恢复任何已删除的数据。
迁移数据库架构
如果您要快速制作原型、试验架构,并且知道架构更改具有破坏性,则可以计划使用 Data Connect 工具来验证更改并监督更新方式。
比较 SQL 架构更改
您可以通过以下方式验证更改:
firebase dataconnect:sql:diff
您可以传递逗号分隔的服务列表。
该命令会将服务的本地架构与相应 Cloud SQL 数据库的当前架构进行比较。如果存在差异,则会输出用于修正差异的 SQL 命令
应用更改
当您对架构 Cloud SQL 实例的更改感到满意并准备好部署更改时,请发出 firebase dataconnect:sql:migrate
命令。系统会提示您批准更改。
firebase dataconnect:sql:migrate [serviceId]
在交互式环境中,系统会显示 SQL 迁移语句和操作提示。
在严格模式或兼容模式下进行迁移
在全新项目中,系统会应用默认的架构验证模式。migrate
命令的行为是应用应用架构所需的所有数据库架构更改,然后提示您批准用于删除架构、表或列的可选操作,以强制使数据库架构与应用架构完全匹配。
您可以通过修改 dataconnect.yaml
文件来调整此行为。取消注释 schemaValidation
键,并声明 COMPATIBLE
,以便在迁移中仅应用必要的更改。
schemaValidation: "COMPATIBLE"
或者,将行为设置为 STRICT
,以应用所有架构更改,并强制数据库架构与应用架构匹配。
schemaValidation: "STRICT"
如需了解详情,请参阅 Data Connect CLI 参考文档。
管理架构和连接器的最佳实践
Firebase 建议您在 Data Connect 项目中遵循一些做法。
尽量减少破坏性更改
- Firebase 建议您将 Data Connect 架构和连接器文件保存在源代码控制系统中。
- 请尽可能避免破坏性更改。破坏性更改的一些常见示例包括:
- 从架构中移除字段
- 将架构中可为 null 的字段设为不可为 null(即
Int
->Int!
) - 重命名架构中的字段。
- 如果您确实需要从架构中移除字段,请考虑将其拆分为多个部署,以尽可能降低影响:
- 首先,移除连接器中对该字段的所有引用,然后部署更改。
- 接下来,更新您的应用以使用新生成的 SDK。
- 最后,移除架构
.gql
文件中的字段,迁移 SQL 架构,然后再次部署。
使用新数据库时,请使用严格模式
如果您将 Data Connect 与新数据库搭配使用,并积极开发应用架构,并且希望确保数据库架构与应用架构完全一致,则可以在 dataconnect.yaml
中指定 schemaValidation: "STRICT"
。
这将确保系统也应用可选更改。
如果数据库中有生产数据,请使用兼容模式
如果您要更改包含生产数据的数据库,我们建议您在兼容模式下执行架构迁移,以确保不会丢弃现有数据。您可以在 dataconnect.yaml
中指定 schemaValidation: "COMPATIBLE"
在兼容模式下,系统只会将必要的架构迁移更改应用于您的数据库。
DROP SCHEMA
、DROP TABLE
和DROP COLUMN
被视为可选语句,系统不会为您的方案生成这些语句,即使您的数据库架构包含应用架构中未定义的架构、表或列也是如此。- 如果数据库表包含未包含在应用架构中的非 null 列,则
NOT NULL
限制条件将被移除,因此仍然可以使用定义的连接器将数据添加到表中。
后续步骤
- 如需了解如何部署和管理您使用生成的 SDK 开发的客户端代码,请参阅适用于 Android、iOS、Web 和 Flutter 的指南。
- 如需详细了解部署工具,请参阅 Data Connect CLI 参考文档和 Data Connect 配置文件参考文档。