Respostas:
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.
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.
Para adicionar, consulte o ASDF, em particular o documento ASDF: Um novo formato de dados para Astronomia ; O ASDF tenta melhorar o HDF5 e o documento descreve algumas desvantagens do formato HDF5.