Pergunta

Qualquer um lá fora, têm experiência suficiente w / NetCDF e HDF5 para dar alguns Pluses / contras sobre eles como uma maneira de armazenar dados científicos?

Eu usei HDF5 e gostaria de leitura / gravação através de Java, mas a interface é essencialmente um invólucro em torno das bibliotecas C, que eu encontrei confuso, então NetCDF parece intrigante, mas eu não sei quase nada sobre isso.

Editar: meu pedido é "apenas" para o registro de dados, para que eu recebo um arquivo que tem um formato de auto-descrição. Características importantes para mim estão sendo capazes de adicionar metadados arbitrária, tendo acesso de gravação rápida para acrescentar para matrizes de bytes, e ter um único escritor / simultaneidade de várias leitor (o preferido, mas não um must-have. NetCDF docs dizem que têm SWMR mas don 't dizer se eles suportam qualquer mecanismo para garantir que dois escritores não pode abrir o mesmo arquivo ao mesmo tempo com resultados desastrosos). I como o aspecto hierárquico de HDF5 (em particular eu amor a hierarquia dirigiu-acíclico-graph, muito mais flexível do que um "regular" filesystem-like hierarquia), estou lendo os documentos NetCDF agora ... se ele só permite que um conjunto de dados por arquivo, em seguida, ele provavelmente não vai funcionar para mim. : (

update - parece que NetCDF em Java lê netCDF-4 arquivos, mas apenas escreve a partir de netCDF-3 arquivos que não suportam grupos hierárquicos. danado.

atualização 2009-Jul-14 : Eu estou começando a ficar realmente chateado com HDF5 em Java. A biblioteca disponível não é tão grande e tem algumas grandes obstáculos que têm a ver com camadas de abstração de Java (tipos de dados compostos). Um grande formato de arquivo para C, mas parece que eu só perdem. >: (

Foi útil?

Solução

Eu sugiro fortemente que você HDF5 vez de NetCDF. NetCDF é plana, e fica muito suja depois de um tempo se você não é capaz de coisas classificar. É claro que a classificação é também uma questão de debate, mas pelo menos você tem essa flexibilidade.

Foi realizada uma avaliação precisa de HDF5 vs. NetCDF quando escrevi Q5Cost, eo resultado final foi para HDF5 mãos para baixo.

Outras dicas

Vou ter que admitir usando HDF5 é muito mais fácil a longo prazo. Não é difícil de obter estruturas de dados simples em formato de NetCDF, mas manipulá-los abaixo da estrada é um tipo de dor.

O "H" em HDF5 significa "hierárquica", que traduzido (pelo menos para mim) em uma maneira muito fácil de manipular dados, apenas movendo os nós ao redor e referenciando os nós de outros lugares.

Posso perguntar que tipo de projeto que é isso? Eu usá-los tanto para um monte de HPC tarefas de modelagem científica. Posso supor que você está fazendo o mesmo? Se assim for, a tendência que eu estou vendo é que as pessoas que se deslocam para HDF5, mas que pode ser diferente em seu domínio particular.

No entanto, você acabar indo, boa sorte!

NetCDF, começando com a versão 4.0 (2008) pode ler e escrever a maioria HDF5 arquivos, e fornece acesso aos recursos hierárquicos de HDF5 por meio do modelo de dados melhorada.

HDF5 é extremamente rica em recursos, e tem algumas grandes características de desempenho.

NetCDF tem uma API simples, e uma base de ferramentas muito mais amplo. Existem muitas ferramentas que identificador de dados netCDF.

Eu sei que este é um cargo mais velhos, e seu autor tenha indicado que mudei, mas para qualquer um que acaba por aqui ... a biblioteca netCDF-Java (a partir de 4.3.13) tem netCDF-4 write apoiar através da biblioteca netCDF C. Ele ainda está em beta, mas funciona e comentários é certamente apreciado !

Por favor, veja as netCDF-Java referência docs para mais detalhes.

Tente escrever algum pequeno aplicativo de amostra em cada um, e comparar a experiência. Se futura escalabilidade do seu código para execução paralela (via MPI ou semelhantes) é importante para você, eu sei que HDF tem uma implementação paralela, o que as pessoas estão constantemente trabalhando para melhorar. Eu não tenho certeza sobre NetCDF.

editar tardio: Para NetCDF, existe agora Paralela NetCDF de Argonne . Ele funciona muito bem, e a equipe de desenvolvimento é bastante activo na melhoria ainda mais.

1) netcdf-4 biblioteca C é uma camada em cima de HDF-5 biblioteca C. A API é considerado mais simples do que a biblioteca HDF5, mas no final você tem praticamente a mesma funcionalidade. não netcdf não suporta gráficos, mas HDF5 faz. Na verdade, HDF não impede ciclos em seu gráfico que eu penso.

2) o grupo HDF tem uma API Java no topo do HDF-5 biblioteca C.

3) Unidata tem biblioteca netCDF-Java que é puro Java, mas apenas pode ler HDF-5.

NetCDF, o que se traduz HDF5 em seu modelo de dados próprio, aparência e funciona muito bem ... até você descobrir que NetCDF não suporta valores não assinados ! Veja também minha pergunta sobre como detectar valores não assinados em arquivos HDF5 existente usando NetCDF.

Atualização: Na verdade, verifica-se que, embora NetCDF-3 não suporta valores assinados, NetCDF-4 suportes valores assinado, embora a API NetCDF em Java para determinar signedness é um pouco complicado .

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