База данных Java в памяти, которую я могу сохранить (как один большой блок памяти) - PullRequest
2 голосов
/ 16 мая 2009

Я ищу реляционную (SQL) базу данных в памяти для Java (что-то вроде HSQLDB), все состояние которой я могу сериализовать.

wholeDatabase.serialize(outputStream);
newCopyOftheDatabase.loadFrom(inputStream);

Или, возможно, БД использует только байт [], который я даю при инициализации:

byte[] memory = new byte[10 *1024*1024];
new InMemoryDatabase(memory);

База данных не будет слишком большой, всего несколько десятков МБ, но я не могу записывать файлы, поэтому мне нужно вывести все данные с машины перед тем, как выключить ВМ (и периодически для резервного копирования).

Я мог бы использовать простые (и легко сериализуемые) структуры данных Java, такие как массивы или карты, вместо БД, но я хочу иметь возможность использовать SQL.

Ответы [ 3 ]

6 голосов
/ 16 мая 2009

HSQLDB имеет опцию в памяти:

Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

Вам просто нужно сбросить и восстановить содержимое. Чтобы вывести структуру, вы можете использовать команду SCRIPT SQL. Чем вы можете сбросить каждую таблицу, выбрав. Может быть лучше API, используемый менеджером и / или сервером внутри, но я думаю, вам нужно взглянуть на (открытые) источники для этого.

0 голосов
/ 16 мая 2009

Похоже, JavaDB скоро это поддержит:

http://blogs.oracle.com/kah/entry/derby_10_5_preview_in

0 голосов
/ 16 мая 2009

Думали ли вы о исправлении HSQLDB?

http://hsqldb.svn.sourceforge.net

...