10
votes

Java Base de données intégrée avec la possibilité de stocker comme un fichier

Je dois créer un format de fichier de stockage pour certaines données simples dans un format tabulaire, essayait d'utiliser HDF5 mais d'avoir à peu près remis en raison de quelques problèmes, et je voudrais réexaminer l'utilisation de bases de données intégrées à voir S'ils sont assez rapides pour mon application.

Y a-t-il une base de données Java embarquée réputée qui a la possibilité de stocker des données dans un fichier? Le seul que je suis au courant est SQLite (Java Bindings disponible). J'ai essayé H2 et HSQLDB, mais hors de la boîte, ils semblent créer plusieurs fichiers, et il est hautement souhaitable pour moi d'avoir une base de données dans un fichier.

EDIT: La performance raisonnablement rapide est importante. Le stockage de l'objet n'est pas; Pour les préoccupations de performance, je n'ai besoin que de stocker des entiers et des blobs. (+ des cordes mais rien de performance critique)

edit 2: L'efficacité des données de stockage est importante pour les jeux de données plus importants, de sorte que XML est sorti.


3 commentaires

Avez-vous essayé Apache Derby / Javadb? Je ne sais pas comment cela stocke des données dans les coulisses, mais c'est une autre chose que vous pouvez regarder.


Firebird rencontre définitivement l'exigence raisonnablement rapide. :)


Essayez github.com/jankotek/mapdb


10 Réponses :


2
votes

Une fois que j'ai utilisé une base de données d'objet qui a enregistré ses données dans un fichier. Il a une interface Java et une interface .NET. Vous voudrez peut-être vérifier. C'est ce qu'on appelle DB4O .


1 commentaires

+1: Pour mentionner DB4O, puisque je l'aurais posté si vous n'aviez pas




0
votes

Depuis que vous avez mentionné SQLite, je suppose que cela ne vous dérange pas de DB natif (tant que de bonnes liaisons Java sont disponibles). Firebird fonctionne bien avec Java et enregistre un seul fichier de fichiers par défaut.

H2 et HSQLDB serait d'excellents choix, si vous n'aviez pas l'exigence de fichier unique.


1 commentaires

Utilisez-vous le pilote Jaybird?



1
votes

Ce n'est pas un moteur SQL, mais si vous utilisez Prevayler avec XStream , vous pouvez facilement créer un seul fichier XML avec toutes vos données. (Prevayler appelle cela un fichier instantané.)

Bien que ce ne soit pas basé sur SQL, et nécessite donc une petite graisse au coude, sa nature autonome rend le développement (et en particulier des tests particulièrement) beaucoup plus facilement. De plus, il est incroyablement rapide et fiable.


0 commentaires

3
votes

Si vous n'avez besoin que d'un accès en lecture, H2 est capable de Lire les fichiers de la base de données d'un Fichier zip .

De même si vous n'avez pas besoin de persévérance, il est possible d'avoir une version en mémoire en mémoire de H2.

Si vous avez besoin d'un accès en lecture / écriture et de persistance, vous risquez de perdre de la chance avec des bases de données standard SQL-Type, car elles gagnent tous uniformément les fichiers d'index et de données séparément.


0 commentaires

4
votes

H2 utilise un seul fichier, si vous utilisez la dernière version H2 avec l'option Page_Store. C'est une nouvelle fonctionnalité, donc cela pourrait ne pas être solide.


0 commentaires

0
votes

Je pense que pour l'instant je vais continuer à utiliser HDF5 pour le stockage de données persistantes, conjointement avec H2 ou une autre base de données pour l'indexation en mémoire. Je ne peux pas obtenir SQLite d'utiliser des blobs avec le pilote Java que j'ai, et je ne peux pas me procurer Firebird intégré et courir, et je ne fais pas confiance à H2 avec page_store.


0 commentaires

1
votes

Vous voudrez peut-être consulter JDBM - Nous l'utilisons sur plusieurs projets, et il est assez rapide . Il utilise 2 fichiers (un fichier de base de données et un fichier journal) si vous l'utilisez pour les applications de type acide, mais vous pouvez déposer directement sur l'accès à la base de données directe (sans fichier journal) si vous n'avez pas besoin d'acide solide.

JDBM prendra facilement en charge les entiers et les blobs (tout ce que vous voulez), et est assez rapide. Il n'est pas vraiment conçu pour la concurrence, vous devez donc gérer le verrouillage de vous-même si vous avez plusieurs threads, mais si vous recherchez une base de données intégrée simple et solide, c'est une bonne option.


1 commentaires

Un peu d'histoire amusante: Jan Kotek - L'un des derniers contributeurs JDBM, mais ce n'est certainement pas l'auteur original - a forcé le projet dans MAPDB et a fait un travail incroyable avec elle. MapDB n'est plus même à distance comme JDBM - il est préférable de tout concevable, et Jan continue d'impressionner. Mérite de vérifier.



2
votes

carte de chronique est une base de données pure java intégrée.

  • Il stocke des données dans un fichier, i. e. XXX

  • La carte de chronique est mature (aucun bogue de stockage sévère signalé depuis des mois maintenant, alors qu'il est actif).

  • Les repères idéatiques montrent que la carte chronique est le plus rapide et Le plus efficace de la mémoire magasin de valeur de clé pour Java.

    L'inconvénient majeur de votre cas d'utilisation est que la carte Chronicle ne prend en charge qu'un simple modèle de valeur de clé, mais une solution plus complexe pourrait être construite sur le dessus.

    Disclaimer: I ' m le développeur de la carte Chronicle.


0 commentaires