Formato de dados hierárquico. Quais são as vantagens em comparação com formatos alternativos?


28

Quais são os principais benefícios do armazenamento de dados no HDF? E quais são as principais tarefas de ciência de dados em que o HDF é realmente adequado e útil?

Respostas:


25

Talvez uma boa maneira de parafrasear a pergunta seja: quais são as vantagens em comparação com formatos alternativos?

As principais alternativas são, eu acho: um banco de dados, arquivos de texto ou outro formato compactado / binário.

As opções de banco de dados a serem consideradas são provavelmente um armazenamento colunar ou NoSQL ou para pequenos conjuntos de dados independentes SQLite. A principal vantagem do banco de dados é a capacidade de trabalhar com dados muito maiores que a memória, ter acesso aleatório ou indexado e adicionar / acrescentar / modificar dados rapidamente. A principal vantagem * dis * é que é muito mais lenta que o HDF, para problemas nos quais todo o conjunto de dados precisa ser lido e processado. Outra desvantagem é que, com exceção dos bancos de dados de estilo incorporado, como o SQLite, um banco de dados é um sistema (que requer administração, configuração, manutenção etc.), em vez de um simples armazenamento de dados independente.

As opções de formato de arquivo de texto são XML / JSON / CSV. Eles são multiplataforma / idioma / kit de ferramentas e são um bom formato de arquivamento devido à capacidade de serem autoexplicativos (ou óbvios :). Se descompactados, eles são enormes (10x-100x HDF), mas se compactados, podem ser bastante eficientes em termos de espaço (XML compactado é aproximadamente o mesmo que HDF). A principal desvantagem aqui é novamente a velocidade: a análise de texto é muito, muito mais lenta que o HDF.

Os outros formatos binários (arquivos numpy npy / npz, arquivos blz blaze, buffers de protocolo, Avro, ...) têm propriedades muito semelhantes às do HDF, exceto que são menos amplamente suportados (podem ser limitados a apenas uma plataforma: numpy) e podem tem outras limitações específicas. Eles normalmente não oferecem uma vantagem convincente.

O HDF é um bom complemento para os bancos de dados; pode fazer sentido executar uma consulta para produzir um conjunto de dados do tamanho aproximado da memória e armazená-lo em cache no HDF se os mesmos dados forem usados ​​mais de uma vez. Se você tiver um conjunto de dados que é fixo e geralmente processado como um todo, armazená-lo como uma coleção de arquivos HDF de tamanho adequado não é uma opção ruim. Se você possui um conjunto de dados que é atualizado com frequência, a preparação de alguns deles como arquivos HDF periodicamente ainda pode ser útil.

Para resumir, o HDF é um bom formato para dados lidos (ou gravados) normalmente como um todo; é o idioma franca ou o formato de intercâmbio comum / preferido para muitos aplicativos devido ao amplo suporte e compatibilidade, decente como formato de arquivo e muito rápido.

PS: Para dar a esse contexto prático, minha experiência mais recente comparando HDF a alternativas, um determinado conjunto de dados pequeno (muito menor que o tamanho da memória) levou 2 segundos para ser lido como HDF (e a maior parte disso provavelmente é do Pandas); ~ 1 minuto para ler em JSON; e 1 hora para gravar no banco de dados. Certamente a gravação do banco de dados pode ser acelerada, mas é melhor ter um bom DBA! É assim que funciona fora da caixa.


Podemos dizer que o HDF é um formato de armazenamento colunar? Não sou muito proficiente com nenhum deles, mas os exemplos de HDF com os quais trabalhei parecem apresentar recursos externos de agregação de dados baseados em colunas.
Félix Gagnon-Grenier

Os bancos de dados e o HDF fornecem "a capacidade de trabalhar com dados muito maiores que a memória", então não acho correto dizer que essa é uma vantagem dos bancos de dados sobre o HDF, já que (o que eles chamam de 'E / S parcial' é um recurso principal davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer

11

Um benefício é o amplo suporte - C, Java, Perl, Python e R possuem ligações HDF5.

Outro benefício é a velocidade. Eu nunca o vi comparado, mas o HDF deveria ser mais rápido que os bancos de dados SQL.

Entendo que é muito bom quando usado com grandes conjuntos de dados científicos e de séries temporais - monitoramento de rede, rastreamento de uso etc.

Não acredito que haja uma limitação de tamanho para arquivos HDF (embora os limites do sistema operacional ainda se apliquem.


5
Por experiência pessoal, eu acrescentaria que a documentação / etiqueta incorporada é enorme. Agora todos os meus conjuntos de dados podem podem ser armazenados com registros explícitas de onde vieram, frequência de amostragem, anomalias, etc. etc.
gallamine

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.