2

Je cherche une base de données relationnelle (SQL) en Java (quelque chose comme HSQLDB), dont je peux sérialiser l'état complet.Base de données Java en mémoire que je peux conserver (comme une seule grosse goutte de mémoire)

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

Ou peut-être la DB utilise seulement un octet [] que je donne sur l'initialisation:

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

La base de données ne sera pas trop énorme, des dizaines bas de MB, mais je ne peux pas écrire des fichiers, J'ai donc besoin de tout diffuser depuis la machine avant de fermer la VM (et périodiquement pour la sauvegarde).

Je pourrais utiliser des structures de données Java simples (et facilement sérialisables) comme des tableaux ou des cartes au lieu d'une base de données, mais je veux être capable d'utiliser SQL.

+0

J'ai l'impression que l'écriture à un disque virtuel et ayant le système d'exploitation en arrière « qui » up pourrait être un peu plus réaliste, plutôt que d'essayer de le faire tout dans votre application. – Cogsy

+0

http://www.h2database.com a beaucoup de caractéristiques. Peut-être vaut-il la peine d'envoyer un e-mail à l'auteur ... – basszero

Répondre

6

HSQLDB a une option en mémoire:

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

Vous avez juste besoin de vider et de restaurer le contenu. Pour vider la structure, vous pouvez utiliser la commande SQL SCRIPT. Que vous pouvez vider chaque table en sélectionnant. Il peut y avoir une meilleure API utilisée par le gestionnaire et/ou le serveur en interne, mais vous devez regarder les sources (ouvertes) pour cela, je pense.

Questions connexes