2013-02-15 3 views
2

Я использую базу данных H2 - работает во встроенном режиме - и когда мое приложение запускается, я загружаю базу данных H2 с данными из базы данных mySQL. Я использую связанные таблицы, чтобы указать на таблицы mySQL.База данных H2 - Создание индексов

Моя проблема заключается в том, что я пытаюсь ускорить время, которое занимает H2 для создания индексов на таблицах, особенно для больших таблиц (5 миллионов +).

Кто-нибудь знает, можно ли запускать команды CREATE INDEX в отдельном потоке, пока я загружаю данные следующей таблицы в H2? Например: Тема 1: Таблица 1 Нагрузка -> говорит тема 2, чтобы начать создавать индексы, а затем поток 1 загружает таблицу 2 и т.д.

я не могу использовать режим MVCC при загрузке таблиц, потому что позже я нужно использовать режим MULTI_THREADED, когда я выбираю. Когда я пытаюсь использовать режим MULTI_THREADED, я получил ошибки блокировки, даже если я загружал данные в дискретные таблицы.

Большое спасибо!

+0

почему бы не загружать данные и создать индекс после, как «обычно»? – twillouer

+0

для создания индексов требуется много времени, поэтому я ищу способ распределения времени по потокам. В настоящее время я делаю все последовательно из-за проблемы с блокировкой, но я попробую предложение Томаса ниже. – joechip

+0

Я понимаю, но я не уверен, что многие темы улучшатся. Если у вас есть статистика, меня оспаривают .. – twillouer

ответ

2

Что может работать (но я не уверен, что это быстрее) - сначала создать таблицы и индексы, а затем параллельно загрузить таблицы. Это должно избегать проблем с блокировкой в ​​системной таблице.

+0

Большое спасибо - я попробую! Кроме того, спасибо за создание такого удивительного программного обеспечения :) – joechip

0

Я также хотел бы добавить метод rst.findColumn ("columnName"), чтобы найти индексы ПОСЛЕ получения набора результатов таблицы. rst - объект ResultSet. Это то, что я использовал.

0

Еще один способ: Резко улучшить загрузку H2 и, в особенности, индексировать производительность, чтобы установить начальную память, близкую к ожидаемой потребности в памяти. В качестве одного примера это одно изменение позволило использовать приложение с требованием 1,5 ГБ к запуску за 47 секунд вместо отказа через 15-20 минут. До этого мы видели превышение верхнего предела GC и ошибки JVMTI.

Добавьте следующие ваши аргументы VM (в качестве примера):

-Xms2g 
-Xmx4g 
Смежные вопросы