application - java in memory database



Comparaison de bases de données Java Embedded (12)

HSQLDB peut causer des problèmes pour de grandes applications, ce n'est pas tout à fait stable.

Le meilleur que j'ai entendu (pas d'expérience de première main cependant) est berkleyDB. Mais à moins que vous ne l'ouvriez, il vous en coûtera un bras et une jambe à utiliser en raison d'une licence ... voir http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html pour plus de détails.

ps. berkleyDB n'est pas une base de données relationnelle au cas où vous ne saviez pas.

J'ai l'intention de développer une petite application (Java) pour gérer mes finances. Je crois que j'ai besoin d'utiliser une base de données intégrée, mais je n'ai aucune expérience à ce sujet. J'ai essayé de regarder certains des produits disponibles , mais je ne peux pas décider lequel me conviendrait le mieux. H2 , HSQLDB , Derby et Berkeley DB semblent être de bons candidats, mais je ne vois toujours pas comment ils se comparent les uns aux autres. J'apprécie votre aide pour les comparer et m'aider à décider lequel utiliser.

J'ai l'intention d'utiliser Hibernate pour mon application (à moins que vous ne recommandiez d'utiliser l'API fournie par DBMS), mais je veux aussi pouvoir modifier facilement la base de données en utilisant un outil de navigation SQL (modification de schéma et changement de données).

Je vous remercie.


Answer #1

J'ai utilisé Derby et je déteste vraiment ses fonctions de conversion de type de données, en particulier les fonctions de date / heure. (Type de nombre) <-> Conversion Varchar c'est une douleur.

Ainsi, si vous prévoyez d'utiliser des conversions de type de données dans vos instructions DB, pensez à l'utilisation d'une base de données intégrée, je l'apprend trop tard.

Dernières conversions de type de données Derby Version



Answer #3

J'utilise Derby pour pratiquement tous mes besoins de bases de données embarquées. Vous pouvez également utiliser la base de données Java de Sun basée sur Derby, mais la dernière version de Derby est beaucoup plus récente. Il prend en charge un grand nombre d'options que les bases de données natives commerciales prennent en charge, mais elles sont beaucoup plus petites et plus faciles à intégrer. J'ai eu quelques tables de base de données avec plus d'un million d'enregistrements sans problèmes.

J'avais l'habitude d'utiliser HSQLDB et Hypersonic il y a environ 3 ans. Il y a des problèmes de performance majeurs à ce moment-là et je suis passé à Derby à cause de ces problèmes. Derby a été solide même lorsqu'il était dans un incubateur à Apache.


Answer #4

Je suis un grand fan de DB4O pour .Net et Java .

La performance est devenue bien meilleure depuis les premières versions. Le modèle de licence n'est pas trop mauvais non plus. J'aime particulièrement les options disponibles pour interroger vos objets. La requête par l'exemple est très puissante et facile à s'habituer.


Answer #5

Je suppose que je suis un peu en retard (beaucoup en retard ;-)) pour ce poste, mais j'aimerais ajouter Prest, une base de données embarquée orientée objet open source pour Java et .NET. pour votre considération. Prest est une base de données intégrée open source / double licence pour Java. La distribution est compatible avec la plate-forme Android de Google, et inclut également Prest Lite pour Java ME. Nous avons même construit un benchmark Android et produit un livre blanc sur le sujet ... vous pouvez jeter un oeil ici: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581&sectionid=133

Tout le meilleur, Chris


Answer #6

Non plus

  • HSQLDB - Utilisé par OpenOffice, testé et stable. C'est facile à utiliser. Si vous voulez éditer vos données db, vous pouvez simplement ouvrir le fichier et éditer les instructions d'insertion.

ou

  • H2 - Dit d'être plus rapide (par le développeur, qui a également conçu hsqldb)

Le choix dépend de la performance et de la stabilité dont vous avez besoin.

Le développeur de H2 a mis en place une belle évaluation des performances:
http://www.h2database.com/html/performance.html


Answer #7

Nous utilisons HSQLDB en production comme option "sans configuration" pour notre application. Il permet aux gens de tester sans avoir à créer une base de données réelle.

Cependant, nous ne le supportons pas pour un usage normal. Les raisons sont multiples:

  1. Ralentit proportionnellement à la taille des données.
  2. Difficulté d'accès en dehors de notre application (par exemple pour les rapports personnalisés).
  3. Transactions / disk-sync est difficile à obtenir, il est donc facile de perdre des données.

Pour au moins (2) et (3), il existe des moyens de contourner cela, mais c'est difficile; il est beaucoup plus facile d'installer par exemple MySQL.


Answer #8

Quels critères utiliserez-vous pour les évaluer? Si vous ne savez pas encore, alors vous n'avez pas besoin de décider maintenant. Essayez de rendre votre application aussi agnostique que possible - en fournissant les wrappers appropriés, les objets d'accès aux données, etc., et prenez cette décision lorsque vous avez tous les faits à portée de main et que vous devez décider.

Si vous utilisez des bases de données relationnelles et SQL, alors ce qui précède ne devrait pas être trop dur (en utilisant JDBC etc). Assurez-vous d'avoir beaucoup de tests environnants afin que lorsque vous souhaitez basculer entre les bases de données, vous pouvez déterminer que la fonctionnalité de votre application reste la même.

J'ai rencontré le même problème il y a quelque temps. Je ne savais pas quelle base de données choisir, donc ma première solution utilisait Derby (ou HSQLDB?), Et plus tard je pouvais passer à HSQLDB (ou Derby? Je ne sais plus quelle solution fonctionnait) une fois que j'avais déterminé où J'ai eu des problèmes (liés à la performance) et quelle solution fonctionnerait vraiment pour moi.


Answer #9

Si je suis correct, H2 est issu des mêmes personnes qui ont écrit HSQLDB. C'est beaucoup mieux si vous faites confiance aux repères sur leur site. En outre, il y a une notion que la communauté du soleil a sauté trop rapidement dans Derby.


Answer #10

HSQLDB est un bon candidat (le fait qu'il soit utilisé dans OpenOffice peut convaincre certains d'entre vous), mais pour une si petite application personnelle, pourquoi ne pas utiliser une base de données objet (au lieu d'une base de données relationnelle classique)?

J'ai utilisé DB4O dans l'un de mes projets et j'en suis très satisfait. Étant orienté objet, vous n'avez pas besoin de toute la couche Hibernate, et pouvez directement insérer / mettre à jour / supprimer / interroger des objets! De plus, vous n'avez pas besoin de vous soucier du schéma, vous travaillez directement avec les objets et DB4O fait le reste!

Je suis d'accord que cela peut prendre un certain temps pour s'habituer à ce nouveau type de base de données, mais vérifiez le tutoriel DB40 pour voir comme il est facile de travailler avec la base de données!

EDIT: Comme indiqué dans les commentaires, DB4O gère automatiquement les versions les plus récentes des classes. De plus, un outil de navigation et de mise à jour de la base de données en dehors de l'application est disponible ici: http://code.google.com/p/db4o-om/


Answer #11

neo4j c'est:

un moteur de persistance Java intégré, basé sur disque et entièrement transactionnel qui stocke des données structurées dans des graphiques plutôt que dans des tables

Je n'ai pas encore eu l'occasion de l'essayer, mais cela semble très prometteur. Notez que ce n'est pas une base de données SQL - votre graphe d'objets est persistant pour vous - donc il pourrait ne pas être approprié pour votre application existante.





comparison