2009-07-02 33 views
59

¿Alguien por ahí tiene suficiente experiencia con NetCDF y HDF5 para dar algunos más/menos sobre ellos como una forma de almacenar datos científicos?Opiniones sobre NetCDF vs HDF5 para el almacenamiento de datos científicos?

He usado HDF5 y me gustaría leer/escribir a través de Java, pero la interfaz es esencialmente un envoltorio alrededor de las bibliotecas C, lo cual me ha resultado confuso, por lo que NetCDF parece intrigante pero no sé casi nada al respecto.

edición: mi aplicación es "solo" para el registro de datos, de modo que obtengo un archivo que tiene un formato de autodescripción. Las características más importantes para mí son poder agregar metadatos arbitrarios, tener acceso rápido de escritura para agregar a matrices de bytes, y tener concurrencia de único escritor/lector múltiple (muy preferido pero no imprescindible. Los documentos de NetCDF dicen que tienen SWMR pero don No digo si admiten algún mecanismo para garantizar que dos escritores no puedan abrir el mismo archivo a la vez con resultados desastrosos). Me gusta el aspecto jerárquico de HDF5 (en particular I love la jerarquía dirigida-gráfico acíclico, mucho más flexible que una jerarquía "regular" de sistema de archivos), estoy leyendo los documentos de NetCDF ahora ... si solo permite uno conjunto de datos por archivo, entonces probablemente no funcione para mí. :(

actualización — parece NetCDF-Java lee de netCDF-4 archivos pero sólo escribe desde netCDF-3 archivos que no admite grupos jerárquicos maldito

actualización de 2009-Jul-14..: Estoy empezando a enojarme mucho con HDF5 en Java. La biblioteca disponible no es tan buena y tiene algunos obstáculos principales que tienen que ver con las capas de abstracción de Java (tipos de datos compuestos). Un gran formato de archivo para C pero se ve como Acabo de perder.> :(

+2

postscript: HDF5 es * mucho * más fácil de usar en Python con PyTables, que Java. –

+0

Desafortunadamente para los usuarios de Java, tanto netCDF como HDF5 se desarrollan en C, principalmente para usuarios de C o Fortran. La mayoría de las otras API, como Python, están construidas encima de la capa C.) –

+0

@EdwardHartnett - No me creo ese argumento. Ciertamente, significa que no se obtienen buenas funciones de Java de forma gratuita, pero las personas se han dado el lujo de crear API útiles en Python. No hay razón para que alguien no pueda hacer eso en Java. (Y en realidad, lo hice yo, en cierta medida, en una empresa anterior cuando publiqué esta pregunta en 2009, pero no tengo acceso a ese código). –

Respuesta

29

Le sugiero encarecidamente HDF5 en lugar de NetCDF. NetCDF es plano, y se vuelve muy sucio después de un tiempo si no puedes clasificar cosas. Por supuesto, la clasificación también es un tema de debate, pero al menos tienes esta flexibilidad.

Realizamos una evaluación precisa de HDF5 frente a NetCDF cuando escribí Q5Cost, y el resultado final fue para HDF5.

+26

la respuesta está desactualizada - NetCDF ahora está basado en HDF5 – Abe

+0

@abe no necesariamente. netcdf4 todavía tiene cierta compatibilidad con w netcdf3. eso significa que algunas opciones de compresión aún no están disponibles para los archivos nc. – badgley

+0

@badgley - ¿Qué opciones de compresión faltan en netCDF cuando se usa para escribir archivos netCDF-4? –

8

Intenta escribir una pequeña aplicación de muestra i n cada uno, y compara la experiencia. Si la escalabilidad futura de su código para la ejecución en paralelo (a través de MPI o similar) es importante para usted, sé que HDF tiene una implementación paralela, que las personas están trabajando constantemente para mejorar. No estoy seguro acerca de NetCDF.

Última edición: Para NetCDF, ahora es Parallel NetCDF de Argonne. Funciona bastante bien, y el equipo de desarrollo está bastante activo para mejorarlo aún más.

+0

Parallel IO también es compatible directamente con Unidata. La biblioteca netCDF, que utiliza HDF5 o paralelo-netcdf bajo las cubiertas para proporcionar IO paralelo. –

19

Debo admitir que usar HDF5 es mucho más fácil a largo plazo. No es difícil obtener estructuras de datos simples en formato NetCDF, pero manipularlas en el camino es una especie de dolor.

La "H" en HDF5 significa "jerárquico", que traducido (para mí de todos modos) en una manera REALMENTE fácil de manipular datos, simplemente moviendo nodos y haciendo referencia a los nodos de otros lugares.

¿Puedo preguntar qué tipo de proyecto es este? Utilizo estos dos para muchas tareas de modelado científico de HPC. ¿Puedo suponer que estás haciendo lo mismo? Si es así, la tendencia que estoy viendo es que las personas se están moviendo a HDF5, pero eso podría ser diferente en su dominio particular.

Sin embargo, terminas yendo, la mejor de las suertes!

+2

afaik, NetCDF4 es un tipo de HDF5 simplificado, por lo que es familiar para los que se usan en versiones anteriores de NetCDF. http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2010/msg00170.html – mdsumner

+1

Lo es, pero es más lo que han tratado de imponer la estructura que mudo: https: //www.unidata.ucar .edu/software/netcdf/docs/netcdf_introduction.html # netcdf_4_format. – spinkus

+1

NetCDF-4 expone casi todas las características de HDF5, a excepción de algunas pequeñas excepciones oscuras. –

12

NetCDF, a partir de la versión 4.0 (2008), puede leer y escribir la mayoría de los archivos HDF5 y proporciona acceso a las funciones jerárquicas de HDF5 a través del modelo de datos mejorado.

HDF5 es extremadamente rico en características y tiene algunas características de gran rendimiento.

NetCDF tiene una API más simple y una base de herramientas mucho más amplia. Hay muchas herramientas que manejan datos netCDF.

+0

La última vez que verifiqué, la biblioteca de Java no permitió escribir archivos HDF5. De todos modos, es un punto discutible ya que he pasado a otras cosas. : -/ –

+0

Gracias por la respuesta concisa, esa es información muy útil, aunque sería aún mejor si tuviera algunas referencias :) – naught101

+0

"puede leer y escribir la mayoría de los archivos HDF5". No, no puede. NetCDF4 usa HDF5 como una aplicación utiliza un sistema de archivos. Lee y escribe una estructura específica impuesta en HDF5 1.8 – spinkus

6

1) Netcdf-4 C library es una capa en la parte superior de la biblioteca HDF-5 C. La API se considera más simple que la biblioteca HDF5, pero al final tiene prácticamente la misma funcionalidad. Netcdf no admite gráficos, pero HDF5 sí. De hecho, HDF no evita los ciclos en su gráfico, creo.

2) el grupo HDF tiene una API Java encima de la biblioteca C HDF-5.

3) Unidata tiene una biblioteca Netcdf-Java que es puramente Java, pero solo puede leer HDF-5.

+0

Debido a que HDF5 no implementa dimensiones compartidas, hay un argumento (exención de responsabilidad: por mí) de que debe escribir netCDF-4, no directamente HDF5, detalles aquí: http://www.unidata.ucar.edu/blogs/developer/en/entry/dimensions_scales. –

-1

NetCDF, que traduce HDF5 en su propio modelo de datos, se ve y funciona de maravilla ... until you find out that NetCDF doesn't support unsigned values! Vea también my question sobre cómo detectar valores sin firmar en archivos HDF5 existentes usando NetCDF.

Actualización: En realidad, resulta que aunque NetCDF-3 no soporta valores con signo, NetCDF-4 es compatible con los valores suscritos, a pesar de que la API NetCDF en Java para la determinación de signo es a little convoluted.

+1

Um ... la mitad de su respuesta dice que NetCDF no admite valores * unsigned *, y la otra mitad sugiere que no admite valores * signed *. ¿Cuál será? El primer enlace solo dice que NetCDF 3 no tiene enteros * sin signo *, no valores en general. Además, el segundo enlace indica que el problema es con * java *, no con netCDF4. Y realmente, ¿qué importa de todos modos? Significa que tiene la mitad de enteros para la indexación, pero todavía tiene 2^31 (= 2 mil millones) o 2^63 (9 * 10^18), dependiendo de su sistema. – naught101

+0

Para aclarar, la biblioteca netCDF-4 C admite enteros sin signo (8, 16, 32 y 64 bits). La biblioteca de netCDF Java no puede crear tipos sin firmar, pero puede leer tipos sin firmar de 8, 16 y 32 bits promocionándolos a tipos firmados del siguiente tamaño más grande. (Es decir, un campo entero sin signo de 16 bits en el archivo netCDF se verá como un campo firmado de 32 bits en java). Todo esto se debe al hecho de que Java no admite tipos sin firmar. –

9

Sé que esta es una publicación anterior, y el cartel original ha indicado que se han movido, pero para cualquiera que termine aquí ... la biblioteca netCDF-Java (a partir de 4.3.13) tiene netCDF-4 soporte de escritura a través de la biblioteca netCDF C Todavía está en beta, pero funciona y feedback es muy apreciado.

Consulte netCDF-Java reference documentos para obtener más información.

Cuestiones relacionadas