项目之间的Firestore模式迁移

我有一个Firebase项目,该项目基本上具有两个环境:登台生产。我组织它们的方式是通过创建不同的Firebase项目。我的每个项目都使用 Firebase Cloud Functions Firestore 。除此之外,我还有与特定GIT分支关联的每个项目。这两个分支都集成到Google Cloud Build中的CI / CD管道中。

因此,为了使它非常清楚,我将共享一个简单的图:

项目之间的Firestore模式迁移

如您所见,我拥有受源代码控制的云函数的源代码,因此无需担心。当我遇到以下情况时,就会出现此问题:

  1. 登台
  2. 上有Firestore架构更改
  3. 云功能(在登台上)已调整为新架构。
  4. 登台分支合并到生产
  5. 由于生产上的旧Firestore模式,新功能无法按预期运行。

为了解决该问题,我需要手动转到 production Firestore实例并在那里调整架构(存在混淆生产数据的风险)。

在理想情况下,我将使操作自动化,并将现有项目数据调整为合并后动态引入的新模式。

有可能吗?像migrations in .NET Core之类的东西。

yangshenghan521 回答:项目之间的Firestore模式迁移

Cloud Firestore是无架构的-文档没有强制架构。代码可以随时编写所需的任何字段。 (对于Web和移动客户端,这受安全规则约束,但对于后端代码,没有任何限制。)因此,Cloud Firestore中没有正式迁移之类的东西。

文档的“模式”由读取和写入这些文档的代码有效地定义。这意味着将数据迁移为新格式意味着您将不得不编写代码来执行所需的更改。确实没有解决此问题的简便方法。您真正能做的就是设计更新,以便在将它们移至另一个环境时不会破坏现有代码。这意味着您的代码应该能够抵抗重大更改,或者只是在所有代码都之后已更新以应对这些更改之后才执行重大更改。

,

您必须使用 Google Cloud 下载 Firestore 数据的存档。自己在档案上运行迁移脚本,然后上传档案以恢复您的 Firestore 数据库。

https://cloud.google.com/firestore/docs/manage-data/export-import

Google Cloud 为您提供了许多用于管理 Firestore 服务的命令行访问权限。

// manage indexes
gcloud firestore indexes

// export all data to a bucket
gcloud firestore export gs://[BUCKET_NAME]

// import data from a bucket
gcloud firestore import gs://[BUCKET_NAME]/[filename]

// manage admin "functions" currently running (i.e. kill long processes)
gcloud firestore operations

从 Google Cloud 存储分区下载/上传您的 JSON 存档

// list files in a bucket
gsutil ls gs://[BUCKET_NAME]

// download
gsutil cp gs://[BUCKET_NAME]/[filename] .

// upload
gsutil cp [filename] gs://[BUCKET_NAME]/[filename]

一旦您将 Google Cloud 设置为可从您的构建脚本访问。可以自动执行数据迁移脚本来下载、转换和上传数据。

建议在您的 Firestore 中维护一个“迁移”文档,以便您可以跟踪需要完成哪个迁移还原。

为避免繁重的迁移任务,请尝试向文档添加“版本”属性,然后使用查询构建器上的转换器回调将数据更改为“客户端”上的最新模式。虽然这不会帮助您处理 Firestore 规则或函数的更改。进行主要是装饰性的微小更改通常更容易。

本文链接:https://www.f2er.com/3124548.html

大家都在问