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

我可以持久化的内存中Java数据库(作为一个巨大的内存块),java,database,memory-management,hsqldb,in-memory-database,Java,Database,Memory Management,Hsqldb,In Memory Database,我正在寻找一个用于Java的内存中关系(SQL)数据库(类似于HSQLDB),我可以序列化它的整个状态 wholeDatabase.serialize(outputStream); newCopyOftheDatabase.loadFrom(inputStream); 或者DB可能只使用我在初始化时给它的字节[]: byte[] memory = new byte[10 *1024*1024]; new InMemoryDatabase(memory); 数据库不会太大,只有几十MB,但我无

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

wholeDatabase.serialize(outputStream);
newCopyOftheDatabase.loadFrom(inputStream);
或者DB可能只使用我在初始化时给它的字节[]:

byte[] memory = new byte[10 *1024*1024];
new InMemoryDatabase(memory);
数据库不会太大,只有几十MB,但我无法写入文件,因此我需要在关闭VM之前(并定期进行备份)将所有内容从机器中流出来


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

您想过修补HSQLDB吗


HSQLDB有一个内存选项:

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

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

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


我觉得写一个ramdisk并让操作系统恢复“那”可能比在应用程序中完成这一切更可行。有很多特点。可能值得向作者发送一封电子邮件……这篇博客文章并没有确切地演示如何将数据库内容传输到单个流。