Comparação de bancos de dados incorporados Java [fechado]


99

Pretendo desenvolver um pequeno aplicativo (Java) para gerenciar minhas finanças. Acredito que preciso usar um banco de dados embutido, mas não tenho experiência com relação a esse problema. Tentei ver alguns dos produtos disponíveis , mas não consigo decidir qual seria o mais adequado para mim. H2 , HSQLDB , Derby e Berkeley DB parecem ser bons candidatos, mas ainda não vejo como eles se comparam. Agradeço sua ajuda em compará-los e me ajudar a decidir qual usar.

Pretendo usar o Hibernate para meu aplicativo (a menos que você recomende usar a API fornecida pelo DBMS), mas também quero ter a capacidade de editar o banco de dados facilmente usando uma ferramenta de navegação SQL (modificando o esquema e alterando os dados).

Obrigado.


Sem saber o que está tentando fazer, não é possível responder a essa pergunta. Sugiro atualizar a questão com informações sobre o tamanho do seu projeto, quantas tabelas você acha que terá, quantos registros, etc.
Outlaw Programmer

3
possível duplicata de bancos de dados Java incorporados
Hosam Aly


5
É irritante que perguntas tão boas sejam fechadas pelos nazistas. Claro, algumas perguntas vagas não são adequadas, mas esta certamente é. Onde "Adequado" significa útil para a comunidade, ao invés de por algumas definições legalistas.
Tuntable

Respostas:


60

Ou

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

ou

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

O que você usar é com você, dependendo de quanto desempenho e quanta estabilidade você precisa.

O desenvolvedor do H2 fez uma boa avaliação de desempenho:
http://www.h2database.com/html/performance.html


35

Eu uso o Apache Derby para praticamente todas as minhas necessidades de banco de dados embutido. Você também pode usar o Java DB da Sun que é baseado no Derby, mas a versão mais recente do Derby é muito mais recente. Ele oferece suporte a várias opções de bancos de dados nativos comerciais, mas é muito menor e mais fácil de incorporar. Tive algumas tabelas de banco de dados com mais de um milhão de registros sem problemas.

Eu costumava usar HSQLDB e Hypersonic cerca de 3 anos atrás. Ele tem alguns problemas importantes de desempenho no momento e eu mudo para o Derby a partir dele por causa desses problemas. O Derby foi sólido mesmo quando estava na incubadora da Apache.


Derby seria ótimo se não fosse pelo fato de que existem tantos bugs e a última atualização foi há vários anos.
Hooli

2
@Hooli Não posso atestar os bugs, mas "... a última atualização foi há vários anos" está incorreto. Em relação à época em que você postou seu comentário ( agosto de 2016 ): houve um lançamento menos de um ano antes ( outubro de 2015 ), um lançamento dois meses depois ( outubro de 2016 ) e um lançamento pouco mais de um ano depois ( outubro de 2017 - O mais recente )
Slaw

Atualizar este comentário caso outra pessoa se depare com o assunto em uma pesquisa. O lançamento mais recente do Derby foi em março / 2019. Aqui estão as informações do site: db.apache.org/derby
JavaJd

@Chris Dail Você usou o derby para milhões de registros como banco de dados normal ou na memória ou para algum cache?
Shreyans jain

30

Eu precisava usar o banco de dados Java embarcado em um de meus projetos e fiz muitas pesquisas para entender os prós e contras de cada banco de dados. Eu escrevi um blog listando prós e contras de bancos de dados Java embutidos populares (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), você pode dar uma olhada. Escolhi H2 porque achei que fosse mais adequado aos meus requisitos. Link para o blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Espero que ajude!



14

HSQLDB é um bom candidato (o fato de ser usado no OpenOffice pode convencer alguns de vocês), mas para um aplicativo pessoal tão pequeno, por que não usar um banco de dados de objetos (em vez de um banco de dados relacionais clássico)?

Usei DB4O em um de meus projetos e estou muito satisfeito com ele. Sendo orientado a objetos, você não precisa de toda a camada do Hibernate e pode inserir / atualizar / excluir / consultar objetos diretamente! Além disso, você não precisa se preocupar com o esquema, você trabalha diretamente com os objetos e o DB4O faz o resto!

Concordo que pode demorar um pouco para se acostumar com esse novo tipo de banco de dados, mas verifique o tutorial do DB40 para ver como é fácil trabalhar com o DB!

EDIT: Como dito nos comentários, DB4O lida automaticamente com as versões mais recentes das classes. Além disso, uma ferramenta para navegar e atualizar o banco de dados fora do aplicativo está disponível aqui: http://code.google.com/p/db4o-om/


2
Obrigado. DB4O parece bom para um projeto tão pequeno, mas acredito que a capacidade de navegar e editar dados fora do aplicativo é muito importante. Também seria fácil lidar com versões mais recentes de classes? (por exemplo, campos adicionados / removidos)
Hosam Aly

Como disse na minha edição, existe uma ferramenta para navegar e editar o BD fora do aplicativo. E, como Fabian disse, as novas versões das classes são manipuladas automaticamente.
Wookai de

Obrigado pela atualização. Ter uma ferramenta de navegação foi muito importante para mim, então muito obrigado.
Hosam Aly

12

Java DB (distribuição da Sun do Apache Derby) agora vem no JDK 6!

Eu queria fazer algo como Jason Cohen e tenho achado que essa parece ser a maneira mais fácil de estar na distro JDK (que na semana passada agora é um requisito para meu aplicativo). Ou talvez eu seja apenas preguiçoso assim.


Você provavelmente está certo! Temos o requisito de também rodar em Java 1.5, portanto, esta não é uma opção para nós.
Jason Cohen,

... Eu quis dizer que você estava certo sobre ser a maneira mais fácil, não estava certo sobre ser preguiçoso. :-P
Jason Cohen,

Java DB é fornecido apenas com as implementações Sun / Oracle do JDK. Não é uma parte padrão do Java.
Basil Bourque

7

Usamos HSQLDB na produção como uma opção "sem configuração" para nosso aplicativo. Ele permite que as pessoas experimentem sem o incômodo de configurar um banco de dados real.

No entanto, não oferecemos suporte para uso normal. Os motivos são vários:

  1. Reduz proporcionalmente ao tamanho dos dados.
  2. Difícil de acessar fora de nosso aplicativo (por exemplo, para relatórios personalizados).
  3. As transações / sincronização de disco são difíceis de acertar, por isso é fácil perder dados.

Para pelo menos (2) e (3), existem maneiras de contornar isso, mas é difícil; é muito mais fácil, por exemplo, instalar o MySQL.


7

neo4j é:

um mecanismo de persistência Java integrado, baseado em disco e totalmente transacional que armazena dados estruturados em gráficos em vez de tabelas

Ainda não tive a chance de experimentar - mas parece muito promissor. Observe que este não é um banco de dados SQL - seu gráfico de objeto é persistente para você - portanto, pode não ser apropriado para seu aplicativo existente.



5

A maioria das coisas já foi dita, mas posso apenas acrescentar que usei HSQL, Derby e Berkely DB em alguns dos meus projetos favoritos e todos funcionaram perfeitamente. Então eu não acho que realmente importa muito para ser honesto. Uma coisa que vale a pena mencionar é que o HSQL se salva como um arquivo de texto com instruções SQL, o que é muito bom. Torna realmente mais fácil para quando você está desenvolvendo fazer testes e configurar dados rapidamente. Também pode fazer edições rápidas, se necessário. Acho que você pode facilmente transferir tudo isso para qualquer banco de dados se precisar alterar também :)


5

HSQLDB pode causar problemas para aplicativos grandes, não é tão estável.

O melhor que já ouvi (mas não em primeira mão) é berkleyDB. Mas, a menos que você abra o código-fonte, vai custar-lhe um braço e uma perna para usar devido ao licenciamento ... consulte este http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html para detalhes.

ps. berkleyDB não é um banco de dados relacional, caso você não saiba.


Oh, eu não sabia que Berkeley não era um banco de dados relacional! Muito obrigado!
Hosam Aly

não significa que não seja bom. mas eu suspeito que provavelmente seja bom demais para seu uso, considerando que é para algo pessoal. também, dê uma olhada no sqlite. Acho que tem ligações java, mas não consigo encontrar atm.
Chii

4

Eu sou um grande fã de DB4O para .Net e Java .

O desempenho melhorou muito desde os primeiros lançamentos. O modelo de licenciamento também não é tão ruim. Gosto particularmente das opções disponíveis para consultar seus objetos. A consulta por exemplo é muito poderosa e fácil de se acostumar.


4

Que critérios você usará para avaliá-los? Se você ainda não sabe, não precisa decidir agora. Tente tornar seu aplicativo o mais agnóstico possível em termos de implementação de banco de dados - fornecendo os wrappers apropriados, objetos de acesso a dados, etc., e tome essa decisão quando tiver todos os fatos à mão e precisar decidir.

Se você estiver usando bancos de dados relacionais e SQL, o procedimento acima não deve ser muito difícil (usando JDBC etc). Certifique-se de ter muitos testes circundantes para que, quando quiser alternar entre os bancos de dados, você possa determinar se a funcionalidade do seu aplicativo permanece a mesma.

Eu tive o mesmo problema há algum tempo. Eu não sabia qual banco de dados usar, então minha primeira solução usou Derby (ou HSQLDB?), E mais tarde pude mudar para HSQLDB (ou Derby? Não me lembro qual solução funcionou) depois de determinar onde Tive problemas (relacionados ao desempenho) e qual solução realmente funcionaria para mim.


3

Eu usei o Derby e realmente odeio suas funções de conversão de tipo de dados, especialmente funções de data / hora. (Tipo de número) <--> A conversão de Varchar é uma dor.

Portanto, se você planeja usar conversões de tipo de dados em suas instruções de banco de dados, considere o uso de outro banco de dados embutido, eu aprendi tarde demais.

Conversões de tipo de dados da versão mais recente do Derby


3

Pessoalmente, sou a favor do HSQLDB, mas principalmente porque foi o primeiro que tentei.

H2 é dito ser mais rápido e fornece um frontend GUI mais agradável (que é genérico e funciona com qualquer driver JDBC, aliás).

Pelo menos HSQLDB, H2 e Derby fornecem modos de servidor que são ótimos para desenvolvimento, porque você pode acessar o banco de dados com seu aplicativo e alguma ferramenta ao mesmo tempo (que o modo embutido geralmente não permite).


3

Acho que estou um pouco atrasado (muito atrasado ;-)) para este post, mas gostaria de adicionar o Prest, um banco de dados incorporado orientado a objetos e de código aberto para Java e .NET. para sua consideração. Prest é um banco de dados integrado de código aberto / licença dupla para Java. A distribuição é compatível com a plataforma Android do Google e também inclui Prest Lite para Java ME. Até construímos um benchmark Android e produzimos um white paper sobre o assunto ... você pode dar uma olhada aqui: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Atenciosamente, Chris


3

Se estou correto, H2 é dos mesmos caras que escreveram HSQLDB. É muito melhor se você confiar nos benchmarks de seu site. Além disso, há alguma noção de que a comunidade do sol saltou muito rapidamente para o Derby.


2
Quais são as noções prematuras do derby relacionadas com o DerbyDB? Maturidade?
simgineer

2

Sei que você mencionou a navegação SQL, mas todo o resto em sua pergunta me faz querer sugerir que você também considere o DB4O , que é um banco de dados excelente e simples .


Obrigado. DB4O parece bom para um projeto tão pequeno, mas acredito que a capacidade de navegar e editar dados fora do aplicativo é muito importante. Também seria fácil lidar com versões mais recentes de classes? (por exemplo, campos adicionados / removidos)
Hosam Aly

Sim, ele suporta algumas refatorações automaticamente. Você pode encontrar mais sobre ele aqui: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.