Articulo de referencia

Formato de datos jerárquico

El formato de datos jerárquico ( HDF ) es un conjunto de formatos de archivo ( HDF4 , HDF5 ) diseñados para almacenar y organizar grandes cantidades de datos. Originalmente desa...

El formato de datos jerárquico ( HDF ) es un conjunto de formatos de archivo ( HDF4 , HDF5 ) diseñados para almacenar y organizar grandes cantidades de datos. Originalmente desarrollado en el Centro Nacional de Aplicaciones de Supercomputación de Estados Unidos , cuenta con el apoyo de The HDF Group, una corporación sin fines de lucro cuya misión es garantizar el desarrollo continuo de las tecnologías HDF5 y la accesibilidad continua de los datos almacenados en HDF.

Para cumplir con este objetivo, las bibliotecas HDF y las herramientas asociadas están disponibles bajo una licencia liberal, similar a la BSD , para uso general. HDF es compatible con muchas plataformas de software y lenguajes de programación comerciales y no comerciales. La distribución de HDF disponible de forma gratuita consta de la biblioteca, utilidades de línea de comandos, código fuente de la suite de pruebas, interfaz Java y el visor HDF basado en Java (HDFView). [1]

La versión actual, HDF5, difiere significativamente en diseño y API de la versión heredada principal HDF4.

Historia temprana

La búsqueda de un formato portátil de datos científicos, originalmente denominado AEHOO (All Encompassing Hierarchical Object Oriented format), comenzó en 1987 por parte del Graphics Foundations Task Force (GFTF) del National Center for Supercomputing Applications (NCSA). Las subvenciones de la NSF recibidas en 1990 y 1992 fueron importantes para el proyecto. En esa época, la NASA investigó 15 formatos de archivo diferentes para su uso en el proyecto Earth Observing System (EOS). Después de un proceso de revisión de dos años, se seleccionó HDF como el sistema estándar de datos e información. [2]

HDF4

HDF4 es la versión anterior del formato, aunque el grupo HDF aún la respalda activamente. Admite una gran variedad de modelos de datos diferentes, incluidos arreglos multidimensionales, imágenes raster y tablas. Cada uno define un tipo de datos agregado específico y proporciona una API para leer, escribir y organizar los datos y metadatos. Los desarrolladores o usuarios de HDF pueden agregar nuevos modelos de datos.

HDF se describe a sí mismo, lo que permite que una aplicación interprete la estructura y el contenido de un archivo sin información externa. Un archivo HDF puede contener una combinación de objetos relacionados a los que se puede acceder como grupo o como objetos individuales. Los usuarios pueden crear sus propias estructuras de agrupamiento llamadas "vgroups".

El formato HDF4 tiene muchas limitaciones. [3] [4] Carece de un modelo de objetos claro, lo que dificulta el soporte y la mejora continua. La compatibilidad con muchos estilos de interfaz diferentes (imágenes, tablas, matrices) da lugar a una API compleja. La compatibilidad con metadatos depende de la interfaz que se utilice; los objetos SD (conjunto de datos científicos) admiten atributos con nombre arbitrario, mientras que otros tipos solo admiten metadatos predefinidos. Quizás lo más importante es que el uso de números enteros con signo de 32 bits para el direccionamiento limita los archivos HDF4 a un máximo de 2 GB, lo que es inaceptable en muchas aplicaciones científicas modernas.

HDF5

El formato HDF5 está diseñado para abordar algunas de las limitaciones de la biblioteca HDF4 y para satisfacer los requisitos actuales y previstos de los sistemas y aplicaciones modernos. En 2002 ganó el premio R&D 100. [5]

HDF5 simplifica la estructura de archivos para incluir solo dos tipos principales de objetos:

Ejemplo de estructura HDF
  • Conjuntos de datos, que son matrices multidimensionales tipificadas
  • Grupos, que son estructuras de contenedores que pueden contener conjuntos de datos y otros grupos.

Esto da como resultado un formato de datos verdaderamente jerárquico, similar a un sistema de archivos. [ aclaración necesaria ] [ cita necesaria ] De hecho, se puede acceder a los recursos en un archivo HDF5 utilizando la sintaxis similar a POSIX /path/to/resource . Los metadatos se almacenan en forma de atributos definidos por el usuario y nombrados adjuntos a grupos y conjuntos de datos. Luego se pueden crear API de almacenamiento más complejas que representen imágenes y tablas utilizando conjuntos de datos, grupos y atributos.

Además de estos avances en el formato de archivo, HDF5 incluye un sistema de tipos mejorado y objetos de espacio de datos que representan selecciones sobre regiones de conjuntos de datos. La API también está orientada a objetos con respecto a conjuntos de datos, grupos, atributos, tipos, espacios de datos y listas de propiedades.

La última versión de NetCDF , la versión 4, se basa en HDF5.

Debido a que utiliza árboles B para indexar objetos de tabla, HDF5 funciona bien para datos de series temporales , como series de precios de acciones, datos de monitoreo de redes y datos meteorológicos en 3D. La mayor parte de los datos se almacenan en matrices sencillas (los objetos de tabla) a las que se puede acceder mucho más rápido que a las filas de una base de datos SQL , pero el acceso mediante árboles B está disponible para datos que no son matrices. El mecanismo de almacenamiento de datos de HDF5 puede ser más simple y rápido que un esquema en estrella de SQL . [ ejemplo necesario ]

Comentario

Las críticas al HDF5 se deben a su diseño monolítico y a sus largas especificaciones.

  • HDF5 no exige el uso de UTF-8 , por lo que las aplicaciones cliente pueden esperar ASCII en la mayoría de los lugares.
  • Los datos del conjunto de datos no se pueden liberar en un archivo sin generar una copia del archivo utilizando una herramienta externa (h5repack). [6]

Interfaces

API con soporte oficial

  • do
  • C++
  • CLI-.NET
  • Fortran , Fortran 90
  • HDF5 Lite (H5LT): una interfaz liviana para C
  • Imagen HDF5 (H5IM): una interfaz C para imágenes o rásteres
  • Tabla HDF5 (H5TB): una interfaz C para tablas
  • Tabla de paquetes HDF5 (H5PT): interfaces para C y C++ para manejar datos en "paquetes", a los que se accede a alta velocidad
  • Escala de dimensión HDF5 (H5DS): permite agregar escalas de dimensión a HDF5
  • Java

Enlaces de terceros

  • CGNS utiliza HDF5 como almacenamiento principal
  • Biblioteca Common Lisp hdf5-cffi
  • D ofrece enlaces a la API de C, con un contenedor D de estilo h5py de alto nivel en desarrollo
  • Dymola introdujo soporte para la exportación HDF5 usando una implementación llamada SDF (Scientific Data Format) con la versión Dymola 2016 FD01
  • Erlang , Elixir y LFE pueden usar los enlaces para lenguajes BEAM
  • Lenguaje de datos GNU
  • Go - el paquete hdf5 de gonum.
  • HDFql permite a los usuarios administrar archivos HDF5 a través de un lenguaje de alto nivel (similar a SQL) en C, C++, Java, Python, C#, Fortran y R.
  • Haskell ofrece enlaces a la API de C.
  • Huygens Software utiliza HDF5 como formato de almacenamiento principal desde la versión 3.5
  • IDL
  • IGOR Pro ofrece soporte completo para archivos HDF5.
  • JHDF5, [7] un enlace alternativo de Java que adopta un enfoque diferente del enlace oficial de Java HDF5 que algunos usuarios encuentran más simple
  • jHDF Una implementación pura de Java que proporciona acceso de solo lectura a archivos HDF5
  • JSON a través de hdf5-json.
  • El soporte de Julia para HDF5 está disponible a través de los paquetes HDF5 y JLD2.
  • LabVIEW puede obtener soporte para HDF a través de bibliotecas de terceros, como h5labview y lvhdf5.
  • Lua a través de la biblioteca lua-hdf5.
  • MATLAB , Scilab u Octave : utilice HDF5 como formato de almacenamiento principal en versiones recientes
  • Mathematica [8] ofrece análisis inmediato de datos HDF y HDF5
  • Perl [9]
  • Python es compatible con HDF5 a través de h5py (acceso de alto y bajo nivel a abstracciones de HDF5) y a través de PyTables (una interfaz de alto nivel con capacidades avanzadas de indexación y consulta similares a las de una base de datos). HDF4 está disponible a través de Python-HDF4 y/o PyHDF tanto para Python 2 como para Python 3. El popular paquete de manipulación de datos pandas puede importar y exportar desde HDF5 a través de PyTables.
  • R ofrece soporte en los paquetes rhdf5 y hdf5r.
  • Rust puede obtener soporte para HDF a través de bibliotecas de terceros como hdf5.

Herramientas

  • Conector HDF5 para Apache Spark Conector HDF5 para Apache Spark
  • Complemento Apache Drill HDF5 El complemento HDF5 para Apache Drill permite realizar consultas SQL sobre archivos HDF5.
  • HDF Product Designer Herramienta GUI de creación de productos de datos HDF5 interoperable (ya no está disponible)
  • HDF Explorer Un programa de visualización de datos que lee los formatos de archivos de datos HDF, HDF5 y netCDF
  • HDFView Un navegador y editor de archivos HDF
  • ViTables Un navegador y editor para archivos HDF5 y PyTables escritos en Python
  • Panoply Un visualizador de datos netCDF, HDF y GRIB
  • silx Un navegador para archivos HDF específicamente para datos de rayos X de sincrotrón
  • h5web Para visualizar archivos HDF en el navegador o en Visual Studio Code

Véase también

Referencias

  1. ^ Visor HDF basado en Java (HDFView)
  2. ^ "Historia del Grupo HDF" . Consultado el 15 de julio de 2014 .
  3. ^ ¿En qué se diferencia HDF5 de HDF4? Archivado el 30 de marzo de 2009 en Wayback Machine.
  4. ^ "¿Existen limitaciones para los archivos HDF4?". Archivado desde el original el 19 de abril de 2016. Consultado el 29 de marzo de 2009 .
  5. ^ Archivos de los premios R&D 100 Archivado el 4 de enero de 2011 en Wayback Machine
  6. ^ Rossant, Cyrille. "Alejándose de HDF5". cyrille.rossant.net . Consultado el 21 de abril de 2016 .
  7. ^ "Biblioteca JHDF5". Archivado desde el original el 1 de diciembre de 2020. Consultado el 10 de junio de 2009 .
  8. ^ Importación y exportación de HDF Documentación de Mathematica
  9. ^ PDL::IO::HDF5
  • Sitio web oficial
  • ¿Qué es HDF5?
  • Centro de información y herramientas HDF-EOS
  • Abrir la superficie de navegación
Obtenido de "https://es.wikipedia.org/w/index.php?title=Formato_jerárquico_de_datos&oldid=1245873832"