Avaliando HDF5: Quais as limitações / recursos não HDF5 fornecer para a modelagem de dados?

StackOverflow https://stackoverflow.com/questions/547195

Pergunta

Estamos na avaliação de tecnologias que vamos usar para armazenar dados que recolhemos durante a análise de código C / C ++. No caso de C ++, a quantidade de dados pode ser relativamente grande, ~ 20 Mb por TU.

Depois de ler a seguinte resposta SO isso me fez considerar que HDF5 poderia ser uma tecnologia adequada para nós usarmos. Fiquei me perguntando se as pessoas aqui poderia me ajudar a responder a algumas perguntas iniciais que eu tenho:

  1. Performance. O uso geral para os dados estarão escrever uma vez e ler "vários" tempos, semelhante ao tempo de vida de um arquivo '.o' gerado por um compilador. Como é que HDF5 comparar contra o uso de algo como um SQLite DB? É que mesmo uma comparação razoável fazer?

  2. Com o tempo, vamos adicionar as informações que estamos armazenando, mas não vai necessariamente querer re-distribuir um conjunto completamente novo de "leitores" para apoiar um novo formato. Depois de ler o guia do usuário Eu entendo que HDF5 é semelhante ao XML ou um DB, em que a informação está associada a um tag / coluna e assim uma ferramenta interna para ler uma estrutura mais velha vai simplesmente ignorar os campos que não está preocupado com? É o meu entendimento sobre este correto?

  3. Uma parte significativa das informações que queremos escrever será um tipo de árvore de estrutura: hierarquia de escopo, tipo de hierarquia etc. ideal seria modelar âmbitos como tendo pais, filhos etc. É possível ter um HDF5 objeto "point" para outro? Se não, há uma técnica padrão para resolver este problema utilizando HDF5? Ou, como é necessário em um DB, que precisamos de uma chave única que iria "link" um objeto para outro com pesquisas apropriadas para buscar o dados?

Muito obrigado!

Foi útil?

Solução

Como o HDF5 comparar contra o uso de algo como um SQLite DB? É que mesmo uma comparação razoável fazer?

Mais ou menos semelhante, mas não realmente. Ambos são arquivos estruturados. SQLite tem recursos para consultas de banco de dados de suporte usando SQL. HDF5 tem recursos para suportar grandes conjuntos de dados científicos.

Ambos estão destinadas a ser de alto desempenho.

Com o tempo, vamos adicionar as informações que estamos armazenando, mas não necessariamente quer re-distribuir um conjunto completamente novo de "leitores" para apoiar um novo formato.

Se você armazenar dados de forma estruturada, os tipos de dados dessas estruturas são também armazenadas no arquivo HDF5. Eu sou um enferrujado pouco de como isso funciona (por exemplo, se ele inclui compatibilidade com versões anteriores inatas), mas eu sei que se você projetar seu "leitor" corretamente ele deve ser capaz de lidar com tipos que são alterados no futuro.

É possível ter um HDF5 objeto "point" para outro?

Com certeza! Você vai querer usar atributos . Cada objecto tem um ou mais cordões que descrevem o caminho para alcançar esse objecto. HDF5 grupos são análogas às pastas / directórios, excepto que as pastas / directórios são hierárquicos = um caminho único descreve a localização de cada um (em sistemas de ficheiros W / o elos rígidos, pelo menos), enquanto grupos de formar um grafo orientado que pode incluir ciclos. Eu não tenho certeza se você pode armazenar um "ponteiro" para um objeto diretamente como um atributo, mas você sempre pode armazenar um caminho absoluto / parente como um atributo de cadeia. (Ou em qualquer outro lugar como uma string;. Você poderia ter lookup tabelas em abundância se você queria)

Outras dicas

Produzimos HDF5 dados sobre o meu projeto, mas eu não lidar diretamente com ele normalmente. Eu posso tomar uma facada nas duas primeiras questões:

  1. Nós usamos um Write Once, Read muitas vezes modelo e o formato parece lidar com isso muito bem. Eu sei que um projeto que usou para escrever tanto a um do Oracle banco de dados e HDF5. Eventualmente, eles removeram a saída Oracle desde o desempenho sofreu e ninguém estava usando. Obviamente, SQLite não é Oracle, mas o formato HDF5 era mais adequado para a tarefa. Com base em que um ponto de dados, um RDBMS pode ser melhor ajustado para várias inserções e atualizações.

  2. Os leitores que nossos clientes usam são robustos quando adicionar novos tipos de dados. Algumas das mudanças são antecipadas, mas que não tem que se preocupar em quebrar coisa quando adicionando mais campos de dados. Nosso DBA escreveu recentemente um programa Python para ler dados HDF5 e preencher arquivos KMZ para visualização no Google Earth. Desde que era um projeto que ele usou para aprender Python, eu diria que não é difícil para os leitores de construção.

Na terceira questão, eu vou curvar a conhecimento superior de Jason S.

Eu diria HDF5 é uma escolha completamente razoável, especialmente se você já está interessado nela ou plano para produzir algo para a comunidade científica.

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