Wil*_*ass 15 java sql oracle performance bulk-operations
我需要在Oracle中快速插入许多小行.(5个领域).
使用MySQL,我将插入分成100个组,然后对每组100个插入使用一个insert语句.
但是对于Oracle,用户反馈是质量插入(1000-30000之间)太慢.
是否有类似的技巧可以用来加速从Java到Oracle的程序化插入?
Esp*_*pen 10
您可以使用Spring的DAO模块批量插入许多行.
在一次更新中将Order对象集合插入数据库的示例:
public class OrderRepositoryImpl extends SimpleJdbcDaoSupport implements
OrderRepository {
private final String saveSql = "INSERT INTO orders(userid, username, coffee, coffeename, amount) "
+ "VALUES(?, ?, ?, ?, ?)";
public void saveOrders(final Collection<Order> orders) {
List<Object[]> ordersArgumentList = new ArrayList<Object[]>(orders
.size());
Object[] orderArguments;
for (Order order : orders) {
orderArguments = new Object[] { order.getUserId(),
order.getUserName(), order.getCoffe(),
order.getCoffeeName(), order.getAmount() };
ordersArgumentList.add(orderArguments);
}
getSimpleJdbcTemplate().batchUpdate(saveSql, ordersArgumentList);
}
}
Run Code Online (Sandbox Code Playgroud)
如今 MySQL 就是 Oracle,所以也许更简单的解决方案是保留 MySQL...
如果没有,那么您应该确保在开始插入组之前启动事务,一旦该组完成,则提交事务并为下一组插入启动新事务。
还要检查是否有不必要的索引定义,这些定义可能会减慢插入时间。
更新...
批量插入是指ETL(Extract Transform Load)的最后一步,所以您是否考虑过使用基于java的ETL工具,例如pentaho Kettle或talend-studio。
Pentaho在此描述了他们的 Oracle Bulk 加载工具。
快速谷歌一下还显示了一些初步证据,表明 Talend 也对 Oracle 批量加载有一些支持。