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.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
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.
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/
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.
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:
- diminui proporcionalmente ao tamanho dos dados.
- difícil acesso fora do nosso aplicativo (por exemplo, para relatórios personalizados). 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.
O Neo4j é:
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.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
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
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.
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.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.
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.
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).
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.
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§ionid=133
Tudo de bom, Chris