In-memory Java database that I can persist (as a s

2019-07-18 16:29发布

问题:

I am looking for an in-memory relational (SQL) database for Java (something like HSQLDB), whose whole state I can serialise.

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

Or maybe the DB only uses a byte[] that I give it on initialization:

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

The database will not be too huge, low tens of MB, but I cannot write files, so I need to stream everything off the machine before I shut the VM down (and periodically for backup).

I could use plain (and easily serializable) Java data structures like arrays or maps instead of a DB, but I want to be able to use SQL.

回答1:

HSQLDB has an in-memory option:

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

You just need to dump and restore the contents. To dump the structure, you may use the SCRIPT SQL command. Than you can dump every table by select. There may be a better API used by the manager and/or server internally, but you need to have a look at the (open) sources for this, i think.



回答2:

Have you thought of patching HSQLDB?

http://hsqldb.svn.sourceforge.net



回答3:

Looks like JavaDB will support this soon:

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