我可以坚持的内存中Java数据库(作为一个巨大的内存块)

时间:2009-05-16 11:25:50

标签: java database memory-management hsqldb in-memory-database

我正在寻找一个用于Java的内存关系(SQL)数据库(类似于HSQLDB),我可以将其整个状态序列化。

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

或者DB可能只使用我在初始化时给出的byte []:

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

数据库不会太大,低几十MB,但是我无法写文件,所以我需要在关闭VM之前将所有内容流出机器(并定期备份)。

我可以使用普通(且易于序列化)的Java数据结构,如数组或映射而不是数据库,但我希望能够使用SQL。

3 个答案:

答案 0 :(得分:6)

HSQLDB有一个内存选项:

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

您只需要转储和恢复内容。要转储结构,可以使用SCRIPT SQL命令。比你可以通过选择转储每个表。管理员和/或服务器内部可能使用了更好的API,但我认为你需要查看(开放)源代码。

答案 1 :(得分:0)

您是否想过修补HSQLDB?

http://hsqldb.svn.sourceforge.net

答案 2 :(得分:0)

看起来JavaDB很快会支持这一点:

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