首页 > 解决方案 > 为什么在 PostgreSQL 数据库中插入数据似乎比在 Oracle 数据库中花费更多的时间?

问题描述

我有一个带有流、步骤、读取器、处理器、写入器的春季批处理,它们将数据从一个数据库源复制到另一个数据库源(作为 Oracle 数据库)。该批次在处理数百万条数据时运行良好且快速。我现在想重用下面这个完全相同的方法在 PostgreSQL 数据库中写入相同的数据,因此getSessionFactory()方法调用根据我的需要返回适当的会话工厂。但问题是似乎什么都没有发生,或者它只是异常地很长。

我想知道为什么会有这样的差异。我们可以与 PostgreSQL 并行执行的插入数量是否有某种限制?或者这段代码有什么问题吗?

public void myMethod(List<MyObject> list) {
    SessionFactory sessionFactory = getSessionFactory();
    sessionFactory.getCurrentSession().doWork(connection -> {
        StringBuilder stringBuilder = new StringBuilder("INSERT INTO \"SOME_TABLE\" (\"ID\", \"SOME_COLUMN\", \"UPDATED_AT\") VALUES (?, ?, ?)");
        try (PreparedStatement preparedStatement = connection.prepareStatement(stringBuilder.toString())) {
            int i = 0;
            for (MyObject myObject : list) {
                preparedStatement.setBigDecimal(1, new BigDecimal(myObject.getId()));
                preparedStatement.setBigDecimal(2, new BigDecimal(myObject.getSomeColumnValue()));
                preparedStatement.setDate(3, new Date(System.currentTimeMillis()));
                preparedStatement.addBatch();
                if (++i % 500000 == 0 || i == list.size()) {
                    preparedStatement.executeBatch();
                }
            }
        }
    });
}

标签: javaspringoraclepostgresqlspring-batch

解决方案


推荐阅读