我需要以编程方式将10百万条记录插入到postgres数据库中.目前我在一个"查询"中执行1000个插入语句.
有没有更好的方法来做到这一点,我不知道一些批量插入语句?
在我的应用程序中,我需要做很多插入.它是一个Java应用程序,我使用普通的JDBC来执行查询.数据库是Oracle.我已启用批处理,因此它可以节省执行查询的网络延迟.但是查询作为单独的INSERT串行执行:
insert into some_table (col1, col2) values (val1, val2)
insert into some_table (col1, col2) values (val3, val4)
insert into some_table (col1, col2) values (val5, val6)
Run Code Online (Sandbox Code Playgroud)
我想知道以下形式的INSERT是否可能更有效:
insert into some_table (col1, col2) values (val1, val2), (val3, val4), (val5, val6)
Run Code Online (Sandbox Code Playgroud)
即将多个INSERT折叠成一个.
使批量INSERT更快的任何其他技巧?
是否可以在另一个线程中使用事务?
就像传递在线程A中创建的事务然后在同一事务中的线程B中执行一些逻辑一样?
我有两个队列和单独的执行器来处理某些实体类型的填充.
但是,批处理作业正在管理两个人口并等待每个人员完成.这将是不必要的创建两个交易.如果一个失败,理想情况下我希望回滚所有数据,这样就可以将它们作为一个事务运行,并且它可以提供更好的性能.
那么,是否可以创建一个事务,将其传递给另一个线程,在第一个事务的边界内执行一些事情?
我正在使用Spring和Hibernate并且目前正在使用
TransactionTemplate template = new TransactionTemplate( getTransactionManager() );
template.setPropagationBehavior(propagationBehavior);
template.setReadOnly(readOnly);
TransactionStatus status = getTransactionManager().getTransaction(template);
Run Code Online (Sandbox Code Playgroud)
创建一个事务,根本不使用注释,也没有计划这样做.
bulkinsert ×1
hibernate ×1
java ×1
java-ee ×1
jdbc ×1
jta ×1
performance ×1
postgresql ×1
spring ×1
sql ×1
transactions ×1