2016-04-19 2 views
1

В настоящее время я использую Apache Derby в качестве временной локальной базы данных для своего приложения, и мне бы хотелось получить некоторые советы о том, как я могу оптимизировать производительность INSERT.Apache Derby & Java - Оптимизация вложений

Когда приложение запускается, оно считывается в записях из файла CSV - это могут быть миллионы, но более вероятно сотни тысяч. Как только они обрабатываются, запрос SELECT в конце суммирует информацию.

В настоящее время требуется около 1 минуты для вставки 6000 записей. Есть 3 таблицы, 2 из них хранят уникальные данные, и один является таблицей перекодировки между ними - это выглядит следующим образом:

CREATE TABLE table1 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(40)) 

CREATE TABLE table2 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(100), 
field2 INT, 
field3 VARCHAR(40)) 

CREATE TABLE table1table2lookup 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 INT NOT NULL, 
field2 INT NOT NULL) 

я в настоящее время использую параметризацию PreparedStatements и дозаторных, чтобы попытаться увеличить скорости.

Я также выключил auto commit режим, чтобы я только фиксировал навальную вставку.

+0

Вы пытались использовать инструменты импорта файлов CSV Derby? См. Http://stackoverflow.com/a/2339690/193453 –

ответ

3

Из «Tuning Дерби» doc:

Избегайте вставки в режиме автоматической фиксации, если возможно, Вставка может быть болезненно медленна в режиме автоматической фиксации, поскольку при каждой фиксации включает в себя обновление журнала на диске для каждой вставки заявление. Конец не будет возвращать , пока не будет выполнена запись физического диска. Чтобы ускорить работу: запустите в autocommit false mode, выполните несколько вставок в одной транзакции, и затем явным образом выполните фиксацию.

Но для первоначального импорта вы должны рассмотреть возможность использования процедур импорта для непосредственной загрузки данных из файла:

Если ваше приложение позволяет начальную загрузку в таблицу, вы можете использовать импорт процедуры вставки данных в таблицу. Derby не будет записывать отдельные вставки при загрузке в пустую таблицу с использованием этих интерфейсов. See Руководство по средствам и утилитам Derby для Дополнительная информация о процедурах импорта.

Смежные вопросы