Pergunta

Eu preciso criar um formato de arquivo de armazenamento para alguns dados simples em um formato tabular, estava tentando usar HDF5 mas têm apenas sobre desistido devido a alguns problemas, e eu gostaria de reexaminar o uso de bancos de dados incorporados para ver se eles são rápidos o suficiente para a minha candidatura.

Existe um banco de dados Java embutido respeitável lá fora, que tem a opção de armazenar dados em um arquivo? O único que eu estou ciente de é SQLite (Java ligações disponíveis). Tentei H2 e HSQLDB mas fora da caixa parecem criar vários arquivos, e é altamente desejável para mim ter um banco de dados em um arquivo.

Editar: desempenho razoavelmente rápido é importante. armazenamento de objecto não é; por questões de desempenho que só precisa armazenar inteiros e BLOBs. (+ Algumas cordas, mas o desempenho nada crítico)

editar. 2: eficiência de armazenamento de dados é importante para conjuntos de dados maiores, por isso XML está fora

Foi útil?

Solução 10

Eu acho que por agora eu só vou continuar a usar HDF5 para o armazenamento de dados persistente, em conjunto com H2 ou algum outro banco de dados para indexação na memória. Eu não consigo SQLite para uso BLOBs com o driver Java que eu tenho, e eu não posso obter incorporado Firebird instalado e funcionando, e eu não confio H2 com PAGE_STORE ainda.

Outras dicas

O nitrito de banco de dados http://www.dizitart.org/nitrite-database.html

NoSQL Object (NO2 a.k.a Nitrito) do banco de dados é um NoSQL open source armazenamento de documentos incorporado escrito em Java com MongoDB como API. isto suporta tanto na memória e arquivo único assente armazenamento persistente.

Se você só precisa de acesso de leitura, em seguida, H2 é capaz de ler os arquivos de banco de dados de um arquivo zip .

Da mesma forma, se você não precisa de persistência, é possível ter uma única in-memory versão do H2.

Se você precisa tanto o acesso de leitura / gravação e persistência, então você pode estar fora de sorte com bases de dados do tipo SQL padrão, como estes praticamente todos uniformemente manter os arquivos de índice e de dados separadamente.

H2 usa apenas um arquivo, se você usar a compilação mais recente H2 com a opção PAGE_STORE. É um novo recurso, por isso não pode ser sólido.

Uma vez que eu usei um banco de dados objeto que salva seus dados para um arquivo. Ele tem uma interface .NET Java e. Você pode querer dar uma olhada. É chamado db4o .

Chronicle Mapa é um banco de dados Java puro incorporado.

  • Ele armazena dados em um arquivo, i. e.

    ChronicleMap<Integer, String> map = ChronicleMap
        .of(Integer.class, String.class)
        .averageValue("my-value")
        .entries(10_000)
        .createPersistedTo(databaseFile);
    
  • Chronicle Mapa é maduro (sem bugs de armazenamento graves relatados por meses agora, enquanto ele está em uso ativo).

  • benchmarks idependent mostram que Chronicle Mapa é o mais rápido e a memória eficiente loja mais key-value para Java.

A principal desvantagem para o seu caso de uso é que Chronicle Mapa suporta apenas um modelo de valor-chave simples, porém mais complexa solução poderia ser construir em cima dela.

Disclaimer:. Eu sou o desenvolvedor Chronicle Map

Se você estiver procurando por um pequeno e rápido banco de dados para talvez navio com um programa que eu iria verificar Apache Derby Eu não sei como você definiria incorporado banco de dados, mas eu usei isso em alguns projetos como um banco de dados de depuração que pode ser verificado com a fonte e está disponível em todos os instantânea máquina do desenvolvedor.

Este não é um motor de SQL, mas se você usar Prevayler com XStream , você pode facilmente criar um único arquivo XML com todos os seus dados. (Prevayler chama de arquivo de instantâneo.)

Embora não seja baseada em SQL, e por isso requer um pouco de graxa cotovelo, sua natureza auto-suficiente torna o desenvolvimento (e especialmente bom teste) muito mais fácil. Além disso, é incrivelmente rápido e confiável.

Você pode querer verificar para fora JDBM - podemos usá-lo em vários projetos, e é bastante rápido . Ele faz uso de 2 arquivos (um arquivo de banco de dados e um arquivo de log) se você estiver usando-o para aplicações tipo de ácido, mas você pode cair diretamente ao banco de dados acesso direto (nenhum arquivo de log) se você não precisa de ácido sólido.

JDBM vai suportar facilmente inteiros e blobs (o que quiser), e é bastante rápido. Não é realmente concebido para concorrência, então você tem que gerenciar o bloqueio a si mesmo se você tiver vários tópicos, mas se você está procurando um simples, banco de dados integrado sólido, é uma boa opção.

Uma vez que você mencionou SQLite, eu suponho que você não se importa um db nativa (contanto que boas ligações Java estão disponíveis). Firebird funciona bem com java, e faz o armazenamento de arquivos único por padrão.

Ambos H2 e HSQLDB seria excelentes opções, se você não tem o requisito único arquivo.

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