Tengo la intención de desarrollar una pequeña aplicación (Java) para administrar mis finanzas. Creo que necesito usar una base de datos incorporada, pero no tengo experiencia en este tema. Traté de ver algunos de los productos disponibles , pero no puedo decidir cuál sería más adecuado para mí. H2 , HSQLDB , Derby y Berkeley DB parecen ser buenos candidatos, pero todavía no veo cómo se comparan entre sí. Agradezco su ayuda comparándolos y ayudándome a decidir cuál usar.
Tengo la intención de usar Hibernate para mi aplicación (a menos que recomiende usar la API proporcionada por DBMS), pero también quiero tener la capacidad de editar la base de datos fácilmente usando una herramienta de navegación SQL (modificando el esquema y cambiando los datos).
Gracias.
fuente
Respuestas:
Ya sea
o
El que uses depende de ti, dependiendo de cuánto rendimiento y cuánta estabilidad necesites.
El desarrollador de H2 ha realizado una buena evaluación de rendimiento:
http://www.h2database.com/html/performance.html
fuente
Utilizo Apache Derby para casi todas mis necesidades de bases de datos integradas. También puede usar Java DB de Sun que se basa en Derby, pero la última versión de Derby es mucho más nueva. Admite muchas opciones que admiten bases de datos nativas comerciales, pero es mucho más pequeño y más fácil de integrar. He tenido algunas tablas de bases de datos con más de un millón de registros sin problemas.
Solía usar HSQLDB e Hypersonic hace unos 3 años. Tiene algunos problemas importantes de rendimiento en ese momento y me cambié a Derby debido a esos problemas. Derby ha sido sólido incluso cuando estaba en incubadora en Apache.
fuente
Necesitaba usar la base de datos integrada de Java en uno de mis proyectos e investigué mucho para comprender los pros y los contras de cada base de datos. Escribí un blog que enumeraba los pros y los contras de las bases de datos Java integradas populares (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), puedes echarle un vistazo. Elegí H2 porque pensé que se adaptaba mejor a mis necesidades. Enlace para el blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html ¡ Espero que te ayude!
fuente
Yo iría con H2, el rendimiento está destinado a ser mucho mejor que el del Derby. Lea http://www.h2database.com/html/performance.html para obtener más información.
fuente
HSQLDB es un buen candidato (el hecho de que se use en OpenOffice puede convencer a algunos de ustedes), pero para una aplicación personal tan pequeña, ¿por qué no usar una base de datos de objetos (en lugar de una base de datos relacional clásica)?
Solía DB4O en uno de mis proyectos, y estoy muy satisfecho con ella. Al estar orientado a objetos, no necesita toda la capa Hibernate y puede insertar / actualizar / eliminar / consultar objetos directamente. Además, no necesita preocuparse por el esquema, ¡trabaja directamente con los objetos y DB4O hace el resto!
Estoy de acuerdo en que puede llevar algún tiempo acostumbrarse a este nuevo tipo de base de datos, ¡pero consulte el tutorial de DB40 para ver qué tan fácil es trabajar con la base de datos!
EDITAR: Como se dijo en los comentarios, DB4O maneja automáticamente las versiones más nuevas de las clases. Además, una herramienta para navegar y actualizar la base de datos fuera de la aplicación está disponible aquí: http://code.google.com/p/db4o-om/
fuente
Java DB (distribución de Apache Derby de Sun) ahora se incluye en JDK 6.
Quería hacer algo como Jason Cohen y he estado pensando que esta parece la forma más fácil de estar en la distribución JDK (que la semana pasada ahora es un requisito para mi aplicación). O tal vez soy un vago de esa manera.
fuente
Usamos HSQLDB en producción como una opción "sin configuración" para nuestra aplicación. Permite que las personas prueben sin la molestia de configurar una base de datos real.
Sin embargo, no lo admitimos para un uso normal. Las razones son varias:
Para al menos (2) y (3), hay formas de evitarlo, pero es difícil; es mucho más fácil, por ejemplo, instalar MySQL.
fuente
neo4j es:
Todavía no he tenido la oportunidad de probarlo, pero parece muy prometedor. Tenga en cuenta que esta no es una base de datos SQL, su gráfico de objetos se conserva para usted, por lo que puede que no sea apropiado para su aplicación existente.
fuente
Puede encontrar una buena herramienta de comparación aquí: http://www.jpab.org/All/All/All.html
Observe también las comparaciones cabeza a cabeza DBMS / JPA
fuente
La mayoría de las cosas ya se han dicho, pero puedo agregar que he usado HSQL, Derby y Berkely DB en algunos de mis proyectos favoritos y todos funcionaron bien. Entonces no creo que realmente importe mucho para ser honesto. Una cosa que vale la pena mencionar es que HSQL se guarda a sí mismo como un archivo de texto con declaraciones SQL, lo cual es bastante bueno. Hace que sea realmente fácil para cuando está desarrollando realizar pruebas y configurar datos rápidamente. También puede realizar ediciones rápidas si es necesario. Supongo que podría transferir fácilmente todo eso a cualquier base de datos si alguna vez necesita cambiar también :)
fuente
HSQLDB puede causar problemas para aplicaciones grandes, no es tan estable.
Lo mejor que he escuchado (aunque no una experiencia de primera mano) es berkleyDB. Pero a menos que lo abra, le costará un brazo y una pierna usarlo debido a la licencia ... vea esto http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html para detalles.
PD. berkleyDB no es una base de datos relacional en caso de que no lo supiera.
fuente
Soy un gran fan de DB4O tanto para .Net como para Java .
El rendimiento ha mejorado mucho desde los primeros lanzamientos. El modelo de licencia tampoco es tan malo. Particularmente me gustan las opciones disponibles para consultar sus objetos. La consulta por ejemplo es muy poderosa y fácil de acostumbrar.
fuente
¿Qué criterios utilizará para evaluarlos? Si aún no lo sabe, no es necesario que lo decida ahora. Intente hacer que su aplicación sea lo más independiente posible de la implementación de la base de datos, proporcionando los contenedores adecuados, los objetos de acceso a los datos, etc., y tome esta decisión cuando tenga todos los hechos a mano y tenga que decidir.
Si está utilizando bases de datos relacionales y SQL, lo anterior no debería ser demasiado difícil (utilizando JDBC, etc.). Asegúrese de tener muchas pruebas circundantes para que cuando desee cambiar entre bases de datos, pueda determinar que la funcionalidad de su aplicación sigue siendo la misma.
Me encontré con el mismo problema hace algún tiempo. No sabía qué base de datos buscar, por lo que mi primera solución usó Derby (¿o HSQLDB?), Y luego pude cambiar a HSQLDB (o Derby? No recuerdo qué solución funcionó) una vez que determiné dónde Tenía problemas (relacionados con el rendimiento) y qué solución realmente funcionaría para mí.
fuente
He usado Derby y realmente odio sus funciones de conversión de tipo de datos, especialmente las funciones de fecha / hora. (Tipo de número) <--> La conversión a varchar es una molestia.
Entonces, si planea usar conversiones de tipos de datos en sus declaraciones de base de datos, considere el uso de otra base de datos integrada, lo aprendí demasiado tarde.
Conversiones de tipo de datos de la última versión de Derby
fuente
Personalmente estoy a favor de HSQLDB, pero sobre todo porque fue el primero que probé.
Se dice que H2 es más rápido y proporciona una interfaz GUI más agradable (que es genérica y funciona con cualquier controlador JDBC, por cierto).
Al menos HSQLDB, H2 y Derby proporcionan modos de servidor que son excelentes para el desarrollo, porque puede acceder a la base de datos con su aplicación y alguna herramienta al mismo tiempo (que el modo integrado generalmente no permite).
fuente
Supongo que llego un poco tarde (mucho tarde ;-)) a esta publicación, pero me gustaría agregar Prest, una base de datos incrustada orientada a objetos de código abierto para Java y .NET. por tu consideración. Prest es una base de datos integrada de código abierto / licencia dual para Java. La distribución es compatible con la plataforma Android de Google y también incluye Perst Lite para Java ME. Incluso hemos creado un punto de referencia de Android y hemos elaborado un documento técnico sobre el tema ... puedes echar un vistazo aquí: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133
Todo lo mejor, Chris
fuente
Si estoy en lo cierto, H2 es de los mismos chicos que escribieron HSQLDB. Es mucho mejor si confía en los puntos de referencia de su sitio. Además, existe la idea de que la comunidad del sol saltó demasiado rápido al Derby.
fuente
Me doy cuenta de que mencionó la exploración de SQL, pero todo lo demás en su pregunta me hace querer sugerir que también considere DB4O , que es una gran base de datos de objetos simple .
fuente