Pergunta

Eu tenho uma grande árvore de objetos Java em meu aplicativo de desktop e estou tentando decidir a melhor maneira de persisti-los como um arquivo no sistema de arquivos.

Alguns pensamentos que tive foram:

  • Role meu próprio serializador usando DataOutputStream:Isso me daria o maior controle sobre o que estava no arquivo, mas ao custo de microgerenciá-lo.

  • Serialização simples e antiga usando ObjectOutputStream e suas várias classes relacionadas:Não estou convencido disso, pois acho os dados frágeis.Alterar a estrutura de qualquer objeto quebra as instâncias serializadas dele.Então estou preso no que parece ser um horrível pesadelo de versionamento.

  • Serialização XML:Não é tão frágil, mas é significativamente mais lento que a serialização direta.Ele pode ser transformado fora do meu programa.

  • JavaDB:Eu considerei isso porque me sinto confortável escrevendo aplicativos JDBC.A diferença aqui é que a instância do banco de dados só persistiria enquanto o arquivo estivesse sendo aberto ou salvo.Não é bonito, mas...ele se presta à migração para uma arquitetura de servidor central se a necessidade surgir posteriormente e introduz a possibilidade de consultar o modelo de dados de uma forma mais simples.

Estou curioso para ver o que outras pessoas pensam.E espero ter perdido alguma abordagem óbvia e mais simples do que as acima.


Aqui estão mais algumas opções selecionadas das respostas abaixo:

  • Um banco de dados de objetos - Possui significativamente menos infraestrutura que as abordagens ORM e tem desempenho mais rápido que uma abordagem XML.obrigado aku
Foi útil?

Solução

db4objects pode ser a melhor escolha

Outras dicas

Eu escolheria sua opção final JavaDB (distribuição da Sun de Dérbi) e use uma camada relacional de objeto como Hibernar ou iBatis.Usar as três primeiras abordagens significa que você gastará mais tempo construindo um mecanismo de banco de dados do que desenvolvendo recursos de aplicativos.

Dê uma olhada no Hibernate como uma maneira mais simples de fazer interface com um banco de dados.

Na minha experiência, provavelmente é melhor usar um banco de dados incorporado.SQL, embora menos que perfeito, geralmente é muito mais fácil do que projetar um formato de arquivo com bom desempenho e confiável.

Não usei JavaDB, mas tive sorte com H2 e SQLite.SQLite é uma biblioteca C o que significa um pouco mais de trabalho em termos de implantação.No entanto, tem a vantagem de armazenar todo o banco de dados em uma única biblioteca multiplataforma.Basicamente, é um formato de arquivo genérico pré-empacotado.SQLite tem sido tão útil que até comecei a usá-lo em vez de arquivos de texto em scripts.

Tenha cuidado ao usar o Hibernate se estiver trabalhando com um pequeno problema de persistência.Ele adiciona muita complexidade e sobrecarga de biblioteca.O Hibernate é muito bom se você estiver trabalhando com um grande número de tabelas, mas provavelmente será complicado se você precisar apenas de algumas tabelas.

XStream de codehaus.org

Serialização/desserialização de XML em grande parte sem codificação.Você pode usar anotações para ajustá-lo.Trabalhando bem em dois projetos onde trabalho.

Veja a apresentação do meu grupo de usuários em http://cjugaustralia.org/?p=61

Acho que depende do que você precisa.Vamos ver as opções:

1) Descartado imediatamente!Não vou nem justificar.:)

2) Se você precisa de uma persistência simples, rápida e de método único, continue com ela.Ele persistirá o gráfico de dados completo como está!Cuidado com quanto tempo você manterá os objetos persistidos.Como você mesmo apontou, o versionamento pode ser um problema.

3) Mais lento que (2), precisa de código extra e pode ser editado pelo usuário.Eu só usaria os dados que deveriam ser usados ​​por um cliente em outro idioma.

4) Se você precisar consultar seus dados de qualquer maneira, opte pela solução de banco de dados.

Bem, acho que você já respondeu sua pergunta :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top