Мне нужно использовать дерби с несколькими огромными столами в проекте. Чтобы повысить производительность, я выбираю идентификаторы документов из трех разных таблиц в одну огромную таблицу для поиска типа документа.
В основном очень простой запрос:
"INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 2 FROM TYPE_B_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 3 FROM TYPE_C_DOCUMENT"
Когда я запускаю это в «нормальном» режиме, когда дерби находится на моем жестком диске, обработка занимает около 1 минуты, и у меня получается около 6,5 миллионов строк в БД (огромно, я знаю ...)
Как бы то ни было, база данных все еще медленно работает на мой вкус, поэтому я пытался запустить все в памяти. К сожалению, даже при размере кучи 4 ГБ (полная БД на моем жестком диске никогда не превышает 1 ГБ), операция довольно быстро приводит к «java / lang / OutOfMemoryError».
Я не вижу альтернативы или обходных путей для решения этой проблемы. Derby не поддерживает материализованные представления и выполнение этого в Java (SELECT, interate resultset, INSERT) займет часы ...
Вы также не можете «упорядочить» оператор, поскольку Derby, похоже, не поддерживает LIMIT.
Есть предложения / идеи?
С уважением,
Michael