Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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/joomla/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
Java 异步执行长时间运行的liquibase数据库更新_Java_Postgresql_Asynchronous_Liquibase - Fatal编程技术网

Java 异步执行长时间运行的liquibase数据库更新

Java 异步执行长时间运行的liquibase数据库更新,java,postgresql,asynchronous,liquibase,Java,Postgresql,Asynchronous,Liquibase,我们使用liquibase来管理应用程序底层关系数据库结构中的更改。作为数据库后端,我们使用PostgreSQL 现在有了包含数百万条目的表,我们需要为其中一些大型表添加索引。由于表的大小,创建索引需要相当长的时间。这会阻止应用程序启动,因为liquibase变更集是在应用程序的启动阶段执行的,以确保在应用程序实际运行之前有一个适当的持久性后端可用 由于明显的原因,在启动应用程序之前需要进行结构更改,但是可以在应用程序已经运行时添加索引。因此,我的问题是: 有没有办法用liquibase异步创建

我们使用liquibase来管理应用程序底层关系数据库结构中的更改。作为数据库后端,我们使用PostgreSQL

现在有了包含数百万条目的表,我们需要为其中一些大型表添加索引。由于表的大小,创建索引需要相当长的时间。这会阻止应用程序启动,因为liquibase变更集是在应用程序的启动阶段执行的,以确保在应用程序实际运行之前有一个适当的持久性后端可用

由于明显的原因,在启动应用程序之前需要进行结构更改,但是可以在应用程序已经运行时添加索引。因此,我的问题是:

有没有办法用liquibase异步创建索引


我们已经试着使用了。这有助于在应用程序运行时创建索引,因为索引创建不会锁定相应的表。但相应的liquibase变更集仍将等待索引创建完成,然后再执行下一个变更集。

这不是直接可行的,但您可以解决此问题:

在运行liquibase之前,需要手动运行索引创建。(这将允许您使用“并发”选项)

为了保存更改的记录,您可以添加索引创建脚本(不带“concurrent”选项),并使用onFail=“MARK_RAN”作为先决条件来液化


当liquibase下次运行时,它会将变更集标记为run。

我认为liquibase中没有这种机制。异步运行任何东西都意味着在以后的某个时间点以某种方式对其进行同步(比如在创建索引时进行回调)。Liquibase正在跟踪所有更改和日志,如果这些更改和日志已成功应用于数据库。还可以使用结果来控制进一步的执行,如“在变更集x未成功时停止整个更新”。如果某些东西异步运行,这将是不可能的。我并不是说这根本不可能,我只是认为这目前还没有在liquibase中实现。。。