Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
并行运行多个flyway迁移的最佳策略_Flyway - Fatal编程技术网

并行运行多个flyway迁移的最佳策略

并行运行多个flyway迁移的最佳策略,flyway,Flyway,我想在一个mysql实例上运行的遗留系统上升级多个模式 在开发中我有大约10个模式,而在生产中我有大约100个模式 在开发过程中,我使用一个简单的bash循环为每个模式启动一个flyway migrate: schemas=$(echo "SET SESSION group_concat_max_len=8192; select GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') from information_schema.SCHEMATA where SCHEM

我想在一个mysql实例上运行的遗留系统上升级多个模式

在开发中我有大约10个模式,而在生产中我有大约100个模式

在开发过程中,我使用一个简单的bash循环为每个模式启动一个
flyway migrate

schemas=$(echo "SET SESSION group_concat_max_len=8192; select GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') from information_schema.SCHEMATA where SCHEMA_NAME like 'FOO_%'" | mysql -h$DB_URL -P$DB_PORT -u$DB_USER -p$DB_PASSWORD -sN)
for schema in $schemas; do
    echo "Starting Migration for :  $schema"
    flyway -configFile=src/flyway.conf -user=$DB_USER -password=$DB_PASSWORD -url="jdbc:mysql://$DB_URL:$DB_PORT" -schemas=$schema -locations=filesystem:src/schema/ migrate 2>&1 | tee $schema.log &
done
这个策略在开发中运行得很好。在生产中,我很快将运行
flyway migrate
的gitlab runner的ram最大化


在您看来,在不耗尽ram的情况下尽可能快地实现数据库迁移的最佳方法是什么?

看起来您需要限制并行运行的进程数。目前,您将运行与模式一样多的进程,在prod中,您有100个进程,这样就耗尽了所有ram。实现这一点的方法有很多,包括
pexec
parallel
甚至
xargs
。我假设您可以访问
xargs
其他人需要安装软件

编写了一个示例,介绍如何将xargs与-p选项结合使用:

    -P, --max-procs=MAX-PROCS    Run up to max-procs processes at a time
编辑:在使用-p进行实验后使用示例进行更新

此命令演示-p:

echo -e "a\nb\nc\nd\n" | xargs -i -P 2 sh -c 'touch {}.log; sleep 3;'
ls --full-time
使用flyway尝试此命令:

$(echo "SET SESSION group_concat_max_len=8192; select GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') from information_schema.SCHEMATA where SCHEMA_NAME like 'FOO_%'" | mysql -h$DB_URL -P$DB_PORT -u$DB_USER -p$DB_PASSWORD -sN) | xargs -i -P 10 sh -c 'echo "Starting Migration for :  {}"; flyway -configFile=src/flyway.conf -user=$DB_USER -password=$DB_PASSWORD -url="jdbc:mysql://$DB_URL:$DB_PORT" -schemas={} -locations=filesystem:src/schema/ migrate 2>&1 | tee {}.log'