Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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/1/hibernate/5.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
Postgresql 是否可以将Hibernate配置为仅刷新而不提交(一种提交模拟)_Postgresql_Hibernate_Spring Data Jpa_Spring Batch - Fatal编程技术网

Postgresql 是否可以将Hibernate配置为仅刷新而不提交(一种提交模拟)

Postgresql 是否可以将Hibernate配置为仅刷新而不提交(一种提交模拟),postgresql,hibernate,spring-data-jpa,spring-batch,Postgresql,Hibernate,Spring Data Jpa,Spring Batch,我需要从具有旧模式(58个表)的旧postgreSql数据库迁移到具有新模式(40个表)的新数据库。模式完全不同。 这不是一个简单的迁移(复制和粘贴)。而是复制变换粘贴 我决定编写一个批处理并使用spring批处理、spring数据和jpa。所以我有两个数据源和一个链式传输。我的配置spring主要由chunck任务和一个JpaPagingItemReader和一个ItemWriterAdapter组成 为了满足性能需求,我还配置了Partitioner,它允许我将源表划分为几个子表,并且chu

我需要从具有旧模式(58个表)的旧postgreSql数据库迁移到具有新模式(40个表)的新数据库。模式完全不同。 这不是一个简单的迁移(复制和粘贴)。而是复制变换粘贴

我决定编写一个批处理并使用spring批处理、spring数据和jpa。所以我有两个数据源和一个链式传输。我的配置spring主要由chunck任务和一个JpaPagingItemReader和一个ItemWriterAdapter组成

为了满足性能需求,我还配置了Partitioner,它允许我将源表划分为几个子表,并且chunckSize=500000

一切顺利。但是考虑到我的旧表的大小,迁移所有数据需要一周的时间

我想做一个测试,它将包括运行我的批而不提交。只是hibernate在一个“.sql”文件中生成所有sql请求,但不将数据提交到数据库

这将允许我查看提交在执行时间上是否代价高昂

是否可以将hibernate配置为仅刷新而从不提交?一种提交模拟


Thank’s

通常,代价高昂的部分是外键和唯一键检查以及索引维护,但由于您没有编写如何获取数据,很可能是您以低效的方式访问数据


一般来说,我建议您使用pg_dump创建一个转储,恢复该转储,然后尝试以仅SQL的方式进行迁移。这边没有数据需要流动,但可以留在机器上,这通常效率更高。

我想做一个测试,包括运行批处理而不提交。
:您是否尝试过使用
ResourcelessTransactionManager
?我看到ResourcelessTransactionManager用于没有提交的批处理作业存储库中的记忆。我会看看是否可以在这个案例中使用它,然后再与您联系。因为我使用Hibernate作为JPA实现,所以我所有的数据都是延迟加载的。我只在需要的时候收集它们。那么,我不知道如何只在SQL中实现它。有很多数据转换操作(删除、合并、条件转换、重命名等)。它不是简单的复制和粘贴,而是数据的转换,因为旧基和新基之间的模式更为相同。旧格式的旧数据必须通过转换以新格式传输到新数据库。当然,但是猜猜看,SQL非常强大,可以为您完成这些转换。没有必要定制工作,尤其是我认为这将是一次性的事情?使用我建议的方法,您可以像这样做
插入到新的_模式中。。。从old_schema.table1
,这样您就可以在选择项中转换来自源架构的数据。