web-dev-qa-db-fra.com

Java Comparaison de bases de données intégrées

J'ai l'intention de développer une petite application (Java) pour gérer mes finances. Je pense que je dois utiliser une base de données intégrée, mais je n'ai aucune expérience de ce problème. 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 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 l'utilisation d'une API fournie par un SGBD), mais je souhaite également pouvoir modifier facilement la base de données à l'aide d'un outil de navigation SQL (modification du schéma et des données).

Merci.

97
Hosam Aly

Non plus

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

ou

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

Celui que vous utilisez est à vous, en fonction de vos performances et de la stabilité dont vous avez besoin.

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

56
Sven Lilienthal

J'utilise Apache Derby pour à peu près tous les besoins de ma base de données intégrée. Vous pouvez également utiliser la base de données Java de Sun basée sur Derby, mais la dernière version de Derby est bien plus récente. Elle prend en charge de nombreuses options prises en charge par les bases de données natives commerciales, mais elle est beaucoup plus petite et plus facile à utiliser. J'ai eu quelques tables de base de données avec plus d'un million d'enregistrements sans aucun problème.

J'avais l'habitude d'utiliser HSQLDB et Hypersonic il y a environ 3 ans. Il y avait des problèmes de performances majeurs à l'époque et je passe de Derby à cause de ces problèmes. Derby a été solide même quand il était en incubateur à Apache.

34
Chris Dail

J'avais besoin d'utiliser Java intégrée dans l'un de mes projets et j'ai fait beaucoup de recherches pour comprendre les avantages et les inconvénients de chaque base de données. J'ai écrit un blog qui répertorie les avantages et les inconvénients du populaire Java bases de données (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), vous pouvez le consulter. J'ai choisi H2 car je pensais que cela répondait le mieux à mes besoins. Lien pour le blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-Java-database.html J'espère que ça aide!

28
Rohan Karwa

J'irais avec H2, la performance est censée être beaucoup mieux que Derby. Lire http://www.h2database.com/html/performance.html pour plus d'informations.

21
K2J

HSQLDB est un bon candidat (son utilisation dans OpenOffice peut en convaincre certains), mais pour une application aussi petite, pourquoi ne pas utiliser un base de données d'objets (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 l'intégralité de la couche Hibernate et pouvez directement insérer/mettre à jour/supprimer/interroger des objets! De plus, vous n'avez pas à vous soucier du schéma, vous travaillez directement avec les objets et DB4O fait le reste!

Je conviens que l’habitude de ce nouveau type de base de données peut prendre un peu de temps, mais vérifiez le tutoriel DB4 pour voir à quel point 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/

14
Wookai

Java DB (la distribution d'Apache Derby par Sun) est maintenant livré dans JDK 6!

Je voulais faire quelque chose comme Jason Cohen et je pensais que cela semblait être le moyen le plus simple de figurer dans la distribution JDK (ce qui est maintenant une exigence de mon application). Ou peut-être que je suis juste paresseux de cette façon.

12
Stu Thompson

Nous utilisons HSQLDB en production comme option "sans configuration" pour notre application. Il permet aux utilisateurs de faire des essais sans avoir à configurer une véritable base de données.

Cependant nous ne le prenons pas en charge pour une utilisation normale. Les raisons sont multiples:

  1. Ralentit proportionnellement à la taille des données.
  2. Difficile d'accéder en dehors de notre application (par exemple, pour des rapports personnalisés).
  3. Les transactions/synchronisation de disque sont difficiles à obtenir, il est donc facile de perdre des données.

Pour au moins (2) et (3), il y a des façons de le contourner mais c'est difficile; c'est beaucoup plus facile, par exemple installez MySQL.

7
Jason Cohen

neo4j est:

un moteur de transaction persistant Java) intégré, basé sur disque, qui stocke les données structurées dans des graphiques plutôt que dans des tableaux

Je n'ai pas encore eu l'occasion de l'essayer - mais cela semble très prometteur. Notez qu'il ne s'agit pas d'une base de données SQL (votre graphe d'objets est conservé pour vous). Il est donc possible qu'il ne convienne pas pour votre application existante.

7
devstopfix

Un bon outil de comparaison peut être trouvé ici: http://www.jpab.org/All/All/All.html

Remarquez également les comparaisons tête à tête des SGBD/JPA

6
Uros Majeric

HSQLDB peut causer des problèmes pour les grandes applications, ce n’est pas aussi stable.

Le meilleur que j'ai entendu (mais pas l'expérience de première main) est berkleyDB. Mais à moins que vous ne l'utilisiez en open source, cela vous coûtera un bras et une jambe à utiliser en raison de la licence ... voyez ceci 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 le sauriez pas.

4
Chii

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

Si vous utilisez des bases de données relationnelles et SQL, la procédure ci-dessus ne devrait pas être trop difficile (utilisation de JDBC, etc.). Assurez-vous de disposer de nombreux tests afin que, lorsque vous souhaitez basculer entre des bases de données, vous puissiez déterminer que les fonctionnalités de votre application restent les mêmes.

J'ai rencontré le même problème il y a quelque temps. Je ne savais pas quelle base de données choisir, ma première solution utilisait donc Derby (ou HSQLDB?), Et j'ai ensuite été en mesure de passer à HSQLDB (ou Derby? Je ne me souviens plus de la solution qui 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.

4
Brian Agnew

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

Les performances sont bien meilleures depuis les premières versions. Le modèle de licence n'est pas trop mal non plus. J'aime particulièrement les options disponibles pour interroger vos objets. Les requêtes par exemple sont très puissantes et faciles à utiliser.

4
Kilhoffer

La plupart des choses ont déjà été dites, mais je peux simplement ajouter que j'ai utilisé HSQL, Derby et Berkely DB dans quelques-uns de mes projets pour animaux de compagnie et qu'ils ont tous bien fonctionné. Donc, je ne pense pas que cela soit vraiment important pour être honnête. Une chose à noter est que HSQL se conserve comme un fichier texte avec des instructions SQL, ce qui est très bon. Il est très facile pour les développeurs de faire rapidement des tests et des données de configuration. Peut également faire des modifications rapides si nécessaire. Je suppose que vous pourriez facilement transférer tout cela dans n’importe quelle base de données si vous avez besoin de changer aussi :)

4
willcodejavaforfood

Si je ne me trompe pas, H2 appartient aux mêmes auteurs de HSQLDB. C'est beaucoup mieux si vous faites confiance aux tests de performance sur leur site. De plus, certains pensent que la communauté Sun est entrée trop rapidement dans Derby.

3
smartnut007

Personnellement, je préfère HSQLDB, mais surtout parce que c’est le premier que j’ai essayé.

H2 est dit plus rapide et fournit une interface graphique plus agréable (générique et qui fonctionne avec n’importe quel pilote JDBC, en passant).

HSQLDB, H2 et Derby au moins fournissent des modes serveur, ce qui est excellent pour le développement, car vous pouvez accéder à la base de données avec votre application et un outil en même temps (ce mode intégré ne le permet généralement pas).

3
Joachim Sauer

Je suppose que je suis un peu en retard (beaucoup en retard ;-)), mais j'aimerais ajouter Prest, une base de données intégrée open source orientée objet pour Java & .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 comprend également Prest Lite pour Java ME. Nous avons même créé une référence Android et produit un livre blanc sur le sujet. Vous pouvez y jeter un coup d'œil ici: http://www.mcobject.com/index.cfm?fuseaction = télécharger & pageid = 581 & sectionid = 1

Tout le meilleur, Chris

3
Chris Mureen

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 numéro) <-> Conversion Varchar c'est une douleur.

Ainsi, si vous envisagez d'utiliser des conversions de types de données dans vos instructions de base de données, envisagez l'utilisation de la base de données intégrée, je l'apprends trop tard.

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

3
Telcontar

Je me rends compte que vous avez parlé de la navigation SQL, mais tout le reste de votre question me donne envie de vous suggérer de considérer également DB4O , qui est n excellent et simple DB .

2
Fabian Steeg