情况:我正在研究一个大型启动Web项目,该项目经常进行生产,因此所有开发都非常快。我们有几种环境 - 当然是数据库中的DEV(本地),QA,阶段和生产,并在数据库中使用不同的数据(我们使用Postgres)。我的日常工作是,当我从事一些新功能时,一些质量检查人员可以在其中一个环境上找到一个关键的错误,因此我必须修复它,或者至少看看有什么问题。
问题:要从本地上下文转换为生产/QA/阶段,我通常会在本地将数据库转移到本地,然后进行调试。问题是,起初,转储非常重,有时需要长达30分钟才能下载并应用于第二个 - 当我将其转储到本地数据库中时,我正在失去本地开发环境。
wish :能够在本地切换上下文快速
示例:假设我们有用于Web服务器的Docker容器,该容器链接到Postgres容器,如此示例docker-compose.yml
文件
version: '3'
services:
pg:
image: "mdillon/postgis"
hostname: pghost
ports:
- "5433:5432"
volumes:
- "~/pgdata:/var/lib/postgresql/data"
...
webserver:
image: "some_app_image"
links:
- pg:postgres
...
并假装这个网络服务器确实很重,因此在内存使用和可读性方面,拥有多个运行的容器将是一个很大的问题。
问题:是否有任何优雅(或不)在不同的数据库数据集之间快速切换?也许有不同的PGDATA文件夹,或以某种方式链接几个Postgres容器(尽管我不确定是否可能)
永远不会是 fast ,因为事实是备份,下载和还原大数据库需要时间。您真正能够真正控制的是要优化的只是您必须如何做这三件事中的任何一个。您的选项归结为使用RDS或Google Cloud SQL之类的服务,该服务可让您按需备份并将数据库还原到云中,并完全消除下载;或自动化备份生成,下载(使用编排系统,您可以"下载"到主机服务器并旋转新的数据库容器以用少量脚本恢复备份,这要比在电线上发送备份要快得多),并还原过程并在计时器上运行它们,以设置可用于测试的安全沙盒数据库。后者从实时延迟的确意味着,如果全新的数据显示出缺陷,您仍然必须等待更新沙箱,但仍然值得。