Почему вставка данных в базу данных PostgreSQL занимает больше времени, чем в базе данных Oracle? - PullRequest
0 голосов
/ 16 января 2019

У меня есть подпружиненный пакет с потоками, шагами, считывателями, процессорами, записывающими устройствами, который копирует данные из одного источника БД в другой (являющийся БД 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();
                }
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...