Uso de banco de dados Embutido (H2, HyperSQL, Derby) em sistemas de gestão

981 views
Skip to first unread message

Norivan Oliveira

unread,
Oct 24, 2013, 11:56:10 AM10/24/13
to jav...@googlegroups.com
Pessoal,

Estou pensando em usar o H2 em uma aplicação web que desenvolvo que funciona quase que como um ERP para uma determinada área que não procedures, views ou qualquer coisa diferente de selects, updates, joins e etc 

Andei pesquisando as documentações desses bancos e comparando com o uso do SGBD nesta aplicação e, teoricamente e com testes em ambiente de desenvolvimento, a conclusão que eu tive até agora é que vai melhorar o desempenho da aplicação além de me livrar de muitos problemas burocráticos com relação atualizações, suporte e mesmo com a comercialização do produto.

Porém antes de partir por esse caminho fiz várias pesquisas e não encontrei nenhum projeto em escala maior que apps que rodam no desktop que usem o H2, HyperSQL ou o Derby. 

Algum de vocês já usaram ou conhecem alguma app que usa? Vale a pena partir por este caminho?

--
Norivan Oliveira
Analista de Sistemas
Bacharel em Sistemas de Informação
Data Solution TI - Fabrica de Softwares 
+55 (31) 3273-4534 / 2127-4201 / 9942-3143
Skype: norivan.datasolution

Willker Gomes

unread,
Oct 24, 2013, 4:31:31 PM10/24/13
to jav...@googlegroups.com
Olá Norivan,

É bem comum encontrar esses tipos de BD embarcados em produção dentre os mais diversos níveis de complexidade, porém são utilizados para solucionar situações específicas em arquiteturas, designs e implementações de padrões. No caso, não é aconselhado seguir nesse caminho, já que dentre outros riscos, provavelmente, o requisito principal e básico será garantir o estado dos dados após reiniciar o servidor, o que deve ser trivial, não é?

Ou seja, no frigir dos ovos, se escolher essa opção terá bem mais complicações do que gostaria, confie. Escolha pelo menos um desses standalone mesmo, relacionais, leves e de código aberto como: MySQL ou MariaDB, ... Talvez você pode escolher um outro que não seja relacional, que vai ficar mais leve e simples como como os NoSQL http://pt.wikipedia.org/wiki/NoSQL.

Banco de dados não se resume a armazenamento de procedures, views ou mesmo qualquer coisa diferente do que comandos DML e DDL. SGDB abstrai da implementação por parte das aplicações de determinadas funcionalidades de gerenciamento extremamente necessárias e que devem ser reutilizadas. No seu caso, você precisará dos dados armazenados para serem consultados posteriormente.

Voltando para os bancos embarcados. Eles foram projetados para resolver situações específicas ou até pontuais onde se precisa de maior confiabilidade e performance. Como por exemplo, a JBoss AS utiliza esse mecanismo para garantir a alta disponibilidade do serviço de mapeamento de serviços, ou Service Registry, para chamadas JNDI dentro do container JEE. Em algumas versões se utiliza o Hypersonic DB ou HyperSQL ou mesmo HSQLDB. Esse possui sérias restrições de performance e integridade, dentre outros comportamentos inesperados em altas escalas de concorrência, podendo até derrubar sua JVM. A própria comunidade jboss desaconselha o uso dele em produção nas versões do JBoss AS. Neste caso indico a substituição para o H2DB, que tem se destacado, inclusive em meus testes de carga e performance. Tem realmente dado conta do recado.


--
Atenciosamente

Willker Gomes



--
Você está recebendo esta mensagem porque se inscreveu no grupo "java.ce" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para javace+un...@googlegroups.com.
Para postar neste grupo, envie um e-mail para jav...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/javace.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Willker Gomes

unread,
Oct 24, 2013, 6:23:39 PM10/24/13
to jav...@googlegroups.com
Norivan,

Me corrigindo, na verdade os bancos embarcados faz persistência no sistema de arquivos automaticamente, porém há limitações para importações de dados e garantia dos dados em determinados cenários. Não encontrei muita informação sobre isso, pois sempre que eu precisei utilizar banco embarcado, sempre inicializava as estruturas e o carregamento dos dados iniciais.

Ex.: JavaDB (Derby) http://www.oracle.com/technetwork/java/javadb/overview/faqs-jsp-156714.html
http://www.javacodegeeks.com/2013/07/java-db-embedded-mode.html
Ex.: H2DB http://www.h2database.com/html/faq.html#database_files

Mais detalhes sobre bancos de dados embarcados:
http://www.eecs.harvard.edu/margo/papers/embedded99/paper.html

Berkeley DB
http://www.eecs.harvard.edu/margo/papers/freenix99/

--
Atenciosamente

Willker Gomes

System Analyst
SCJP, Certified ScrumMaster
Reply all
Reply to author
Forward
0 new messages