Comparaison des bases de données Java Embedded [fermé]

99

J'ai l'intention de développer une petite application (Java) pour gérer mes finances. Je pense que j'ai besoin d'utiliser une base de données intégrée, mais je n'ai aucune expérience concernant ce problème. J'ai essayé de regarder certains des produits disponibles , mais je n'arrive 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. 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 le SGBD), mais je souhaite également avoir la possibilité de modifier facilement la base de données à l'aide d'un outil de navigation SQL (modification du schéma et modification des données).

Je vous remercie.

Hosam Aly
la source
Sans savoir ce que vous essayez de faire, il n'est pas possible de répondre à cette question. Je suggère de mettre à jour la question avec des informations sur la taille de votre projet, le nombre de tables que vous pensez avoir, le nombre d'enregistrements, etc.
Outlaw Programmer
3
duplication possible des bases de données java intégrées
Hosam Aly
5
Il est ennuyeux que de si bonnes questions soient fermées par les nazis. Bien sûr, certaines questions vagues ne conviennent pas, mais celle-ci l'est certainement. Où «convenable» signifie utile pour la communauté, plutôt que par certaines définitions légalistes.
Tuntable

Réponses:

60

Soit

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

ou

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

Celui que vous utilisez dépend de vous, en fonction des performances 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

Sven Lilienthal
la source
35

J'utilise Apache Derby pour à peu près tous mes besoins en bases de données intégré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 de nombreuses options prises en charge par les bases de données commerciales natives, mais il est beaucoup plus petit et plus facile à intégrer. J'ai eu des tables de base de données avec plus d'un million d'enregistrements sans problème.

J'utilisais HSQLDB et Hypersonic il y a environ 3 ans. Il a quelques problèmes de performances majeurs à l'époque et je passe à Derby à cause de ces problèmes. Derby a été solide même lorsqu'il était en incubateur chez Apache.

Chris Dail
la source
Derby serait génial s'il n'y avait pas eu tant de bugs et que la dernière mise à jour remonte à plusieurs années.
Hooli
2
@Hooli Je ne peux pas attester des bogues, mais "... la dernière mise à jour remonte à plusieurs années" est incorrect. Par rapport au moment où vous avez publié votre commentaire ( août 2016 ): il y a eu une version moins d'un an avant ( octobre 2015 ), une version deux mois après ( octobre 2016 ) et une version un peu plus d'un an après ( octobre 2017 - Dernière ).
Slaw
Mettre à jour ce commentaire au cas où quelqu'un d'autre rencontrerait ce sujet lors d'une recherche. La dernière version de Derby date de mars / 2019. Voici les informations de leur site: db.apache.org/derby
JavaJd
@Chris Dail Avez-vous utilisé derby pour des millions d'enregistrements comme base de données normale ou en mémoire ou pour une certaine mise en cache?
Shreyans jain
30

J'avais besoin d'utiliser une base de données intégrée Java dans l'un de mes projets et j'ai fait de nombreuses recherches pour comprendre les avantages et les inconvénients de chaque base de données. J'ai écrit un blog répertoriant les avantages et les inconvénients des bases de données Java intégrées populaires (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), vous pouvez y jeter un coup d'œil. J'ai choisi H2 car je pensais qu'il correspondait le mieux à mes besoins. Lien pour le blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html J'espère que cela aide!

Rohan Karwa
la source
14

HSQLDB est un bon candidat (le fait qu'il soit utilisé dans OpenOffice peut en convaincre certains d'entre vous), mais pour une si petite application personnelle, pourquoi ne pas utiliser une 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 toute 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 cela peut prendre un certain temps pour s'habituer à ce nouveau type de base de données, mais consultez le didacticiel DB40 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 nouvelles versions 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/

Wookai
la source
2
Merci. DB4O a l'air bien pour un si petit projet, mais je pense que la possibilité de parcourir et d'éditer des données en dehors de l'application est très importante. Serait-il également facile de gérer les nouvelles versions des classes? (par exemple, champs ajoutés / supprimés)
Hosam Aly
Comme dit dans mon édition, il existe un outil pour parcourir et éditer la base de données en dehors de l'application. Et comme Fabian l'a dit, les nouvelles versions des classes sont automatiquement gérées.
Wookai
Merci pour la mise à jour. Avoir un outil de navigation était très important pour moi, alors merci beaucoup.
Hosam Aly le
12

Java DB (la distribution Sun d'Apache Derby) est désormais disponible dans le JDK 6!

J'avais envie de faire quelque chose comme Jason Cohen et j'ai pensé que cela semble être le moyen le plus simple d'être dans la distribution JDK (qui de la semaine dernière est maintenant une exigence pour mon application). Ou peut-être que je suis juste paresseux de cette façon.

Stu Thompson
la source
Tu as probablement raison! Nous devons également fonctionner sous Java 1.5, ce n'est donc pas une option pour nous.
Jason Cohen le
... Je voulais dire que vous aviez raison sur le fait que c'était le moyen le plus simple, pas juste d'être paresseux. :-P
Jason Cohen
Java DB est livré uniquement avec les implémentations Sun / Oracle du JDK. Pas une partie standard de Java.
Basil Bourque
7

Nous utilisons HSQLDB en production comme une option «sans configuration» pour notre application. Il permet aux utilisateurs de tester sans avoir à mettre en place 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ès en dehors de notre application (par exemple pour les 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 existe des moyens de contourner le problème, mais c'est difficile; c'est beaucoup plus facile par exemple d'installer MySQL.

Jason Cohen
la source
7

neo4j est:

un moteur de persistance Java intégré, basé sur disque et entièrement transactionnel 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 graphique d'objet est conservé pour vous - il peut donc ne pas convenir à votre application existante.

devstopfix
la source
5

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 familiers et qu'ils ont tous très bien fonctionné. Donc je ne pense pas que ce soit vraiment important pour être honnête. Une chose à mentionner est que HSQL s'enregistre en tant que fichier texte avec des instructions SQL, ce qui est plutôt bien. Facilite grandement le développement de tests et de configuration rapide des données. Peut également faire des modifications rapides si nécessaire. Je suppose que vous pouvez facilement transférer tout cela dans n'importe quelle base de données si vous avez besoin de changer également :)

willcodejavaforfood
la source
5

HSQLDB peut poser des problèmes pour les applications volumineuses, ce n'est pas tout à fait stable.

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

Chii
la source
Oh, je ne savais pas que Berkeley n'était pas une base de données relationnelle! Merci beaucoup!
Hosam Aly le
ne veut pas dire que ce n'est pas bon. mais je soupçonne que c'est probablement trop bon pour votre utilisation compte tenu de son caractère personnel. jetez également un œil à sqlite. Je pense qu'il a des liaisons java, mais je ne peux pas le trouver atm.
Chii
4

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

Les performances sont devenues 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. La requête par exemple est très puissante et facile à utiliser.

Kilhoffer
la source
4

Quels critères utiliserez-vous pour les évaluer? Si vous ne le savez pas encore, vous n'avez pas besoin de vous décider maintenant. Essayez de rendre votre application aussi indépendante que possible de l'implémentation de la base de données - 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 sous la main et que vous devez décider.

Si vous utilisez des bases de données relationnelles et SQL, ce qui précède ne devrait pas être trop difficile (en utilisant JDBC, etc.). Assurez-vous de disposer de nombreux tests environnants afin que, lorsque vous souhaitez basculer entre les 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 utiliser, donc ma première solution a utilisé Derby (ou HSQLDB?), Et j'ai pu plus tard passer à HSQLDB (ou Derby? Je ne me souviens pas quelle solution fonctionnait) une fois que j'avais déterminé où J'avais des problèmes (liés aux performances) et quelle solution fonctionnerait vraiment pour moi.

Brian Agnew
la source
3

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

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

Dernières conversions du type de données de la version Derby

Telcontar
la source
3

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

On dit que H2 est plus rapide et fournit une interface graphique plus agréable (qui est générique et fonctionne avec n'importe quel pilote JDBC, d'ailleurs).

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

Joachim Sauer
la source
3

Je suppose que je suis un peu en retard (beaucoup en retard ;-)) pour ce post, mais j'aimerais ajouter Prest, une base de données embarquée open source orientée objet 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 comprend é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 œil ici: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Tout le meilleur, Chris


la source
3

Si j'ai raison, H2 est des mêmes gars qui ont écrit HSQLDB. C'est beaucoup mieux si vous faites confiance aux benchmarks sur leur site. En outre, il y a une certaine idée que la communauté du soleil a sauté trop rapidement dans Derby.

smartnut007
la source
2
Quelles sont les notions de derby prématuré concernées par DerbyDB? Maturité?
simgineer
2

Je me rends compte que vous avez mentionné la navigation SQL, mais tout le reste dans votre question me donne envie de vous suggérer de considérer également DB4O , qui est une base de données d'objets très simple .

Fabian Steeg
la source
Merci. DB4O a l'air bien pour un si petit projet, mais je pense que la possibilité de parcourir et d'éditer des données en dehors de l'application est très importante. Serait-il également facile de gérer les nouvelles versions des classes? (par exemple, champs ajoutés / supprimés)
Hosam Aly
Oui, il prend en charge certaines refactorisations automatiquement, vous pouvez en savoir plus ici: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg