0

情况:我正在做一个大型的启动网络项目,该项目经常投入生产,所以所有的开发都非常快。我们有几个环境——开发(本地)、QA、阶段和生产,当然数据库中有不同的数据(我们使用 postgres)。我的日常工作是,在我开发一些新功能时,一些 QA 人员可以在其中一个环境中发现一个严重的错误,所以我必须修复它,或者至少看看哪里出了问题。

问题:为了从本地上下文切换到生产/qa/stage,我通常在本地从这些环境中转储数据库,然后进行调试。问题是,起初,转储非常繁重,有时需要长达 30 分钟才能下载和应用它,其次 - 当我将其转储到本地数据库时,我失去了本地开发环境。

希望:能够在本地快速切换上下文

示例:假设我们有用于 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
   ...

让我们假设这个 Web 服务器真的很重,因此有多个运行的容器在内存使用和可读性方面将是一个大问题。

问题:是否有任何优雅(或不)的方法可以在不同的数据库数据集之间进行快速切换?可能有不同的 pgdata 文件夹,或者以某种方式链接多个 postgres 容器(尽管我不确定是否可能)

4

1 回答 1

1

它永远不会很快,因为事实上备份、下载和恢复大型数据库需要时间。您真正可以控制的足以优化的只是频率你必须做这三件事中的任何一件。您的选择归结为使用 RDS 或 Google Cloud SQL 之类的服务,它可以让您按需将数据库备份和恢复到云中,并完全消除下载;或自动生成备份,下载(使用编排系统,您可以“下载”到主机服务器并启动一个新的数据库容器以通过一些脚本来恢复备份,这比通过网络发送备份要快得多),并恢复进程并在计时器上运行它们以设置可用于测试的安全沙箱数据库。后者从实时延迟确实意味着如果全新的数据揭示了一个缺陷,您仍然需要等待更新您的沙箱,但这仍然是值得的。

于 2017-09-23T02:47:02.940 回答