Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 运行数据库架构迁移的最佳实践_Mongodb_Google App Engine_Sequelize.js_Google Cloud Build_Schema Migration - Fatal编程技术网

Mongodb 运行数据库架构迁移的最佳实践

Mongodb 运行数据库架构迁移的最佳实践,mongodb,google-app-engine,sequelize.js,google-cloud-build,schema-migration,Mongodb,Google App Engine,Sequelize.js,Google Cloud Build,Schema Migration,构建服务器通常与运行实例的VPC分离。无论是基于GCP的云构建,还是利用众多CI工具中的一种(CircleCI、Codeship等),因此运行DB模式更新尤其具有挑战性 所以,我想知道何时是运行数据库架构迁移的最佳地点? 在我看来,有四种机会可以在CD管道中自动运行模式迁移或种子: 在构建阶段 实例启动时 通过预热脚本(同步或异步) 通过端点,自动或手动调用部署后 选项1的主要问题是安全性。有了Google Cloud Sql/Google Cloud Build,我就可以通过构建步骤和Sql代

构建服务器通常与运行实例的VPC分离。无论是基于GCP的云构建,还是利用众多CI工具中的一种(CircleCI、Codeship等),因此运行DB模式更新尤其具有挑战性

所以,我想知道何时是运行数据库架构迁移的最佳地点?

在我看来,有四种机会可以在CD管道中自动运行模式迁移或种子:

  • 在构建阶段
  • 实例启动时
  • 通过预热脚本(同步或异步)
  • 通过端点,自动或手动调用部署后
  • 选项1的主要问题是安全性。有了Google Cloud Sql/Google Cloud Build,我就可以通过构建步骤和Sql代理运行模式迁移/种子(非常困难)。老实说,这是一个完全球疼痛设置…但它的工作

    我的最新项目是使用MongoDb,如果我需要移动一些数据/为一些数据播种,我已经在迁移mongo中连接了它。不幸的是,没有这样的SQL代理将MongoDb(atlas)安全地连接到Cloud Build(或任何其他CI工具),因为它不在实例的VPC中运行。因此,在我看来,这是一条死胡同

    因此,我正在热身(并非有意使用双关语)热身脚本概念

    使用App Engine,在提供流量之前,在已经可以通过VPC访问的主机上调用预热脚本。warmup脚本旨在用于打开数据库连接以加快连接速度,但假设没有未完成的迁移,那么它正是这样做的——一个非常轻量级的select语句

    有人能想到这种方法有什么问题吗

    选项4也很合适(本质上是一样的)。不过,这些端点可能需要更多的保护—特别是如果存在“向下”迁移脚本(!)

    很难回答您,因为这是一个基于意见的问题

    这是我对你的主张的看法

  • 这对我来说是最好的解决办法。当然,您必须注意只添加字段,而不是删除或删除现有的模式字段。这样,您可以在构建阶段更新模式,然后部署。新部署将采用新架构,并且不再使用过时字段。在下一次架构更新时,您将能够删除这些过时字段并清理架构
  • 此解决方案将降低冷启动性能。这不是一个合适的解决方案
  • 和以前一样,除了对应用程序引擎基础设施和工作方式有粘性之外
  • 与解决方案1相比,没有真正的优势

  • 关于安全性,云构建将能够使用。仍然是alpha版本,但我预计下个月会发布alpha版本。

    Hi@prout.james我想与您确认一下,您计划如何在App Engine上实现启动脚本?应用程序引擎不支持启动脚本,即使您可以在预热请求中发送代码。你能澄清一下你打算怎么做吗?Hi@gso_gabriel,启动脚本可以通过代码添加,可以在启动NPM脚本中添加,也可以在应用程序本身中添加。我现在已经打折了这个选项,因为启动时间很短,尤其是使用无服务器技术;冷启动已经很慢了。谢谢你的回答-非常感谢你的意见!我同意逻辑位置应该在构建阶段,但是如果私有网络中没有构建服务器,无法连接是一个主要障碍。worker pool解决方案听起来像是这个谜题中缺失的一块,但是,它具有极好的未来洞察力。选项4的主要优点是能够在专用网络内运行,从而能够连接到数据库。它仍然可以通过云构建步骤调用,在将流量提升到实例之前需要200个响应。同意步骤4。但是,请注意不要在模式更新中创建bigbang,以确保在没有(或最小)服务不可用的情况下可以回滚!