Comparação de bases de dados embutidas em Java [fechado]

pretendo desenvolver uma pequena aplicação (Java) para gerir as minhas finanças. Acho que preciso de usar uma base de dados embutida, mas não tenho experiência sobre este assunto. Tentei ver alguns dos produtos disponíveis, mas não consigo decidir qual deles seria mais adequado para mim. H2, HSQLDB, Derby e Berkeley DB parecem ser bons candidatos, mas ainda não vejo como se comparam. Agradeço a tua ajuda a compará-los. e ajudar-me a decidir qual usar.

pretendo usar o Hibernate para a minha aplicação (a menos que recomende usar a API fornecida pelo DBMS), mas também quero ter a capacidade de editar a base de dados facilmente usando uma ferramenta de navegação SQL (modificando o esquema e alterando os dados).

Obrigado.

Author: Hosam Aly, 2009-01-20

18 answers

Quer

  • HSQLDB - usado pelo OpenOffice, testado e estável. É fácil de usar. Se você quiser editar seus dados db, você pode apenas abrir o arquivo e editar as declarações de inserção.

Ou

  • H2 - Disse ser mais rápido (pelo desenvolvedor, que originalmente desenhou o hsqldb, também)

Qual dos dois é contigo, dependendo da performance e da estabilidade de que precisas.

O desenvolvedor do H2 colocou um bom avaliação do desempenho:
http://www.h2database.com/html/performance.html

 55
Author: Sven Lilienthal, 2009-01-20 22:12:47

USO o Apache Derby para praticamente todas as minhas necessidades de base de dados incorporadas. Você também pode usar o DB Java da Sun que é baseado em Derby, mas a última versão do Derby é muito mais recente. Ele suporta um monte de opções que suporte bancos de dados comerciais, nativos, mas é muito menor e mais fácil de incorporar. Já tive algumas mesas de banco de dados com mais de um milhão de registos sem problemas.

Eu costumava usar HSQLDB e Hipersónico há cerca de 3 anos. Tem alguns problemas de desempenho importantes na época e eu mudo para Derby por causa desses problemas. Derby tem sido sólido mesmo quando estava na incubadora em Apache.

 33
Author: Chris Dail, 2008-09-11 19:03:59
Precisava de usar o Java embedded database num dos meus projectos e fiz muitas pesquisas sobre prós e contras de cada base de dados. Eu escrevi um blog listando prós e contras de bases de dados java embutidas populares (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), você pode dar uma olhada nele. Escolhi o H2 como achei que era melhor para as minhas necessidades. Link para o blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Espero que ajude!
 25
Author: Rohan Karwa, 2013-02-03 22:57:52
Eu diria H2, o desempenho é muito melhor do que o Derby. Deve ler-se http://www.h2database.com/html/performance.html para mais informações.
 20
Author: K2J, 2009-02-25 15:57:33

HSQLDB é um bom candidato (o fato de que ele é usado no OpenOffice pode convencer alguns de vocês), mas para uma aplicação pessoal tão pequena, por que não usar um banco de dados de objetos (em vez de um banco de dados relacionado clássico) ?

Usei DB4O num dos meus projectos, e estou muito satisfeito com isso. Sendo orientado a objetos, Você não precisa de toda a camada Hibernada, e pode inserir diretamente/atualizar/excluir/consultar objetos ! Além disso, você não precisa se preocupar com o esquema, você trabalha diretamente com os objetos e DB4O faz o resto !

Concordo que pode demorar algum tempo a habituar-se a este novo tipo de base de dados, mas verifique o tutorial DB40 para ver como é fácil trabalhar com o DB !

Editar: como dito nos comentários, o DB4O lida automaticamente com as versões mais recentes das classes. Além disso, uma ferramenta para navegar e atualizar a base de dados fora da aplicação está disponível aqui: http://code.google.com/p/db4o-om/

 14
Author: Wookai, 2009-01-20 22:03:11

Java DB (Sun's distribution of Apache Derby) now ships in JDK 6!

Tenho sido desejado fazer algo como Jason Cohen e tenho pensado que esta parece ser a maneira mais fácil de estar na distribuição JDK (que na semana passada é agora um requisito para a minha aplicação). Ou talvez eu seja preguiçoso assim.

 11
Author: Stu Thompson, 2013-02-06 19:46:58

Usamos o HSQLDB em produção como uma opção de" nenhuma configuração " para a nossa aplicação. Ele permite que as pessoas experimentem sem o incómodo de criar um banco de dados real.

No entanto, não o suportamos para uso normal. As razões são várias:

  1. diminui proporcionalmente ao tamanho dos dados.
  2. difícil acesso fora do nosso aplicativo (por exemplo, para relatórios personalizados).
  3. As transacções / sincronização de discos são difíceis de acertar, por isso é fácil perder dado.

Pelo menos para (2) e (3), Existem maneiras em torno dele, mas é difícil; é muito mais fácil, por exemplo, instalar MySQL.

 7
Author: Jason Cohen, 2008-09-11 17:26:52

O Neo4j é:

Um motor de persistência Java embutido, baseado em disco e totalmente transacional, que armazena dados estruturados em gráficos e não em tabelas

Ainda não tive oportunidade de experimentar, mas parece muito promissor. Note que isto não é uma base de dados SQL - o seu gráfico de objectos persiste para si - por isso pode não ser apropriado para a sua aplicação existente.
 7
Author: devstopfix, 2008-09-12 11:03:14

Uma boa ferramenta de comparação pode ser encontrada aqui: http://www.jpab.org/All/All/All.html

Note - se também as comparações Head to Head DBMS/JPA

 5
Author: Uros Majeric, 2013-11-13 22:16:10

Sou um grande fã de DB4O para ambos.Net e Java.

O desempenho tornou-se muito melhor desde os primeiros lançamentos. O modelo de licenciamento também não é mau. Eu particularmente gosto das opções disponíveis para questionar seus objetos. Query by example is very powerful and easy to get used to.

 4
Author: Kilhoffer, 2008-09-11 17:26:43

Que critérios irá utilizar para avaliar estes ? Se ainda não sabes, não precisas de decidir agora. Tente fazer a sua aplicação como banco de dados-implementação-agnóstico como você pode - fornecendo as embalagens adequadas, objetos de acesso a dados, etc., e tomar esta decisão quando tiver todos os factos à mão e tiver de decidir.

Se está a usar bases de dados relacionais e SQL, então o acima não deve ser muito difícil (usando JDBC etc). Certifique-se de que tem muitos arredores testes para que quando você quiser mudar entre bases de dados, você pode determinar que a funcionalidade da sua aplicação permanece a mesma.

Encontrei o mesmo problema há algum tempo. Eu não sabia para que banco de dados ir, então minha primeira solução usado Derby (ou HSQLDB?), e eu mais tarde foi capaz de mudar para HSQLDB (ou Derby ? Não me lembro qual solução funcionou) uma vez que eu tinha determinado onde eu tinha problemas (relacionados com o desempenho) e que solução realmente funcionaria para mim.
 4
Author: Brian Agnew, 2009-01-20 22:23:33
A maioria das coisas já foram ditas, mas posso acrescentar que usei o HSQL, o Derby e o Berkely DB em alguns dos meus projectos e todos eles funcionaram muito bem. Acho que não importa muito ser honesto. Uma coisa que vale a pena mencionar é que HSQL salva-se como um arquivo de texto com declarações SQL que é muito bom. Torna muito fácil para quando você está se desenvolvendo para fazer testes e configurar os dados rapidamente. Também pode fazer edições rápidas, se necessário. Acho que podes facilmente transferir tudo isso para qualquer um. banco de dados se alguma vez precisar de mudar também:)
 4
Author: willcodejavaforfood, 2009-01-20 22:41:32

O HSQLDB pode causar problemas para grandes aplicações, não é assim tão estável.

O melhor que ouvi (mas não a experiência em primeira mão) é berkleyDB. Mas a menos que você opensource-lo, vai custar-lhe um braço e uma perna para usar devido ao licenciamento...veja isto http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html {[5] } para mais pormenores.

Ps. berkleyDB não é uma base de dados relacional, caso não saiba.

 4
Author: Chii, 2009-01-21 10:00:50
Usei o Derby e odeio as funções de conversão do tipo de dados, especialmente as funções de data / hora. (Tipo de número) conversão Varchar é uma dor.

De modo que se você planeja usar conversões de tipo de dados em suas declarações DB considerar o uso de outro DB incorporado, eu aprendo-o Tarde demais.

Conversões dos últimos tipos de dados de Derby

 3
Author: Telcontar, 2008-09-12 10:19:01
Se estou correcto, o H2 é dos mesmos tipos que escreveram o HSQLDB. É muito melhor se você confiar nos benchmarks em seu site. Além disso, há alguma noção de que a comunidade do sol pulou muito rapidamente em Derby.
 3
Author: smartnut007, 2010-11-02 03:43:18
Pessoalmente, sou a favor do HSQLDB, mas principalmente porque foi o primeiro que tentei.

Diz-se que o H2 é mais rápido e oferece uma interface gráfica mais agradável (que é genérica e funciona com qualquer driver JDBC, a propósito).

Pelo menos o HSQLDB, o H2 e o Derby fornecem modos de servidor que são óptimos para o desenvolvimento, porque você pode aceder ao DB com a sua aplicação e alguma ferramenta ao mesmo tempo (que o modo incorporado normalmente não permite).

 2
Author: Joachim Sauer, 2009-01-20 20:39:47

Eu sei que mencionaste navegação SQL, mas tudo o resto na tua pergunta Faz-me querer sugerir que também consideres DB4O, que é um grande e simples objecto DB.

 2
Author: Fabian Steeg, 2009-01-20 21:42:42

Acho que estou um pouco atrasado (muito atrasado;-)) para este post, mas gostaria de adicionar Perst, uma base de dados incorporada de código aberto, orientada a objectos para Java &.NET. para sua consideração. Perst é um banco de dados embutido de código aberto / licença dual para Java. A distribuição é compatível com a plataforma Android do Google, e também inclui Perst Lite para Java ME. Até construímos uma benchmark Android e produzimos um papel branco sobre o assunto...podes dar uma vista de olhos aqui.: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581&sectionid=133

Tudo de bom, Chris

 2
Author: , 2009-09-15 14:05:23