2012-03-07 68 views
14

Как сохранить/загрузить полную встроенную базу данных h2 в память в какой-либо файл или каталог в двоичном режиме для более быстрой загрузки.Сохранение базы данных H2 в памяти на диске

Я хочу использовать это для кэширования данных, поэтому мне не нужно каждый раз запускать все строки создания таблиц/вставок.

+1

Можете ли вы просто использовать файл DB по сравнению с версией в памяти? Я предполагаю, что вы выполняете индивидуальную разработку с использованием фреймворка (например, Grails), о котором вы не упомянули. – Marc

+0

Это настраиваемый проект без каких-либо фреймворков. Честно говоря, я не уверен, каковы последствия производительности файла db, я хочу, чтобы скорость и данные всегда соответствовали памяти, поэтому я предположил, что бит памяти в оперативной памяти будет самым быстрым. Данные будут запросом только для того, чтобы я не делал ненужных проверок сохранения. – mikkom

+0

@marc Использование «файла DB» - это другое дело. Было бы очень полезно в модульном тесте, если бы можно было установить тестовый набор данных в памяти с помощью java или любого другого языка, затем сделать резервную копию набора данных и использовать его для восстановления в начальное состояние после каждого теста. –

ответ

8

Вместо использования базы данных в памяти вы можете использовать обычную (сохраненную) базу данных. Вы по-прежнему можете использовать таблицы памяти в памяти (тогда создайте таблицу памяти).

Самый простой способ сохранить полностью память в памяти на диске - использовать инструкцию SQL SCRIPT TO 'fileName'. Это создаст скрипт SQL. Данные хранятся в текстовой форме, что не похоже на наиболее эффективное решение. Однако, как правило, узким местом является диск в любом случае, а не форматирование/разбор текста.

Другой вариант - создать другую базу данных, связать таблицы с базой данных в памяти (используя create linked table или функцию link_schema), а затем использовать create table as select для сохранения таблиц.

+0

Вставка разделов - это то, что я сейчас делаю, и для 1 гига текста требуется некоторое время, и это не io. извините, но я хочу бинарный вариант. – mikkom

+0

Обновлен мой ответ. Для SCRIPT: если это не IO, что тогда? Вы использовали инструмент профилирования, например встроенный профилировщик? –