从Java批量插入Oracle

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)


cro*_*wne 0

如今 MySQL 就是 Oracle,所以也许更简单的解决方案是保留 MySQL...

如果没有,那么您应该确保在开始插入组之前启动事务,一旦该组完成,则提交事务并为下一组插入启动新事务。

还要检查是否有不必要的索引定义,这些定义可能会减慢插入时间。

更新...
批量插入是指ETL(Extract Transform Load)的最后一步,所以您是否考虑过使用基于java的ETL工具,例如pentaho Kettletalend-studio

Pentaho在此描述了他们的 Oracle Bulk 加载工具。

快速谷歌一下还显示了一些初步证据,表明 Talend 也对 Oracle 批量加载有一些支持。

  • MySQL显然不是Oracle。公司是,但软件不是。此外——这是客户的选择。我更喜欢 MySQL,但我们需要两者都支持。 (5认同)