【问题标题】:How to create multi environment DB's with Firestore如何使用 Firestore 创建多环境数据库
【发布时间】:2018-07-16 21:02:00
【问题描述】:

我一直在研究如何在 Firebase 中创建多个 Firestore 实例,我需要不同的 Db 用于生产、登台和开发。我阅读了文档,似乎只需要修改应用程序中的“Google-services.json”文件。我没有得到的是我应该修改什么以及它在控制台中的外观。

  • 我会在同一个项目中看到不同的实例吗?

  • 我需要为每个环境创建不同的项目并修改文件中的这些值吗?

  • 如果我需要测试需要在所有环境中测试的东西,并且所有环境都需要 Blaze 来运行该测试,我有吗? 付三倍?

提前致谢

【问题讨论】:

    标签: database firebase google-cloud-platform google-cloud-firestore environment


    【解决方案1】:

    Firebase 不支持在单个项目中使用多个 Firestore 实例。

    Firebase 团队强烈建议您为每个环境创建不同的项目,以将它们分开。这可能意味着您必须构建不同的应用程序,每个应用程序都指向不同的实例,或者您必须在运行时以某种方式配置您的应用程序以选择要使用的项目。

    只要您接受 Spark 计划的限制,就没有义务为您不想支付的任何项目添加账单。

    【讨论】:

    • 谢谢@DougStevenson!我正在相应地重构我的 Firestore 项目以准备生产。在一个类似于 Firebase 的项目中的多个 Firestore 数据库的路线图中是否有任何计划?
    • @AdamHurwitz 实时数据库允许您添加多个数据库,因为它的可扩展性受到限制,当您达到这些限制时,您需要将数据分片到多个数据库中。 Firestore 没有这些限制,因此不需要多个数据库。如果这是您真正需要的,您必须为每个实例创建不同的项目。
    • 谢谢道格。一个应用使用两个 Cloud Firestore 项目是否合法?
    • 两个项目意味着两个 google-services.json 文件。我该如何处理?
    • @Ruben 如果您对 Firebase 产品为何采用这种方式有疑问,您应该在 Firebase 讨论组中发帖。 groups.google.com/forum/#!forum/firebase-talk
    【解决方案2】:

    是的,Firebase 不支持单个项目中的多个实例。但是我的情况是,我在 Firestore 根目录中创建了 3 个不同的文档,并设置了每个环境以相应地引用这些文档。每个文档都有相同的集合、子集合和文档。

    例如,

    dev -> users -> details
        -> others_collection -> details
    
    stag -> users
         -> others_collection -> details
    
    prod -> users
         -> others_collection -> details
    

    在客户端,每个环境都会像这样获取集合:

    db.collection(`${env}/users`)
    

    我在小项目上做这件事,似乎对 Firestore 提供的东西很满意。在单个项目中。我可以根据环境创建许多 ios/android 应用程序,每个环境在 Firestore 中都有自己的文档和集合。

    【讨论】:

    • 从开发的角度来看这很方便,但从安全的角度来看似乎不太理想。您的任何环境中的任何客户端现在都可以访问您任何其他环境中的所有数据!
    • 了解您的担忧。我认为这些规则有助于提高安全性并防止用户访问其他环境。
    • 与此方法相关的任何其他缺点?
    • 我在哪里存储env 变量? Firebase 会自动检测到这一点吗?
    • 除非您复制函数代码以便为每个环境使用不同命名的函数,否则这将不容易与 firestore 函数一起使用,我不建议这样做。单独的项目似乎更安全。
    【解决方案3】:

    最安全的方法是新建一个谷歌云项目。如果需要,您可以将当前的 firestore 数据库导出到新项目。

    一步一步:

    1. 通过将所有文档导出到 桶: https://firebase.google.com/docs/firestore/manage-data/export-import

      gcloud beta firestore export gs://[BUCKET_NAME]

    2. 新建项目->https://cloud.google.com/resource-manager/docs/creating-managing-projects

    3. 在仪表板中,选择 Firestore 进入您的新项目并创建一个空数据库
    4. 在仪表板中,转到您的 BACKUP_BUCKET 并在权限选项卡中添加您的新项目服务帐户

    5. 将项目切换到新项目 gcloud config set project 'new-project'

    6. 然后导出您的数据 gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ EXPORT_PREFIX 是在您的存储桶中创建的文件夹的名称。

    我使用这种方法来明确区分“preprod”和“生产”环境(团队可以访问并与生产同步,而无需访问生产环境代码库和配置)。

    【讨论】:

    • 导出/导入需要启用计费。这对于暂存环境没有意义
    • 我猜这取决于贵公司的规模。其实我不明白你的意思,为什么要在分期中禁用计费?
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2019-05-31
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多