Formato de datos jerárquicos. ¿Cuáles son las ventajas en comparación con los formatos alternativos?


28

¿Cuáles son los principales beneficios de almacenar datos en HDF? ¿Y cuáles son las principales tareas de ciencia de datos donde HDF es realmente adecuado y útil?

Respuestas:


25

Quizás una buena manera de parafrasear la pregunta es, ¿cuáles son las ventajas en comparación con los formatos alternativos?

Las principales alternativas son, creo: una base de datos, archivos de texto u otro formato empaquetado / binario.

Las opciones de la base de datos a considerar son probablemente una tienda columnar o NoSQL, o para pequeños conjuntos de datos independientes SQLite. La principal ventaja de la base de datos es la capacidad de trabajar con datos mucho más grandes que la memoria, tener acceso aleatorio o indexado y agregar / agregar / modificar datos rápidamente. La principal ventaja * dis * es que es mucho más lento que HDF, para problemas en los que todo el conjunto de datos debe leerse y procesarse. Otra desventaja es que, con la excepción de las bases de datos de estilo incorporado como SQLite, una base de datos es un sistema (que requiere administración, configuración, mantenimiento, etc.) en lugar de un simple almacén de datos autónomo.

Las opciones de formato de archivo de texto son XML / JSON / CSV. Son multiplataforma / lenguaje / kit de herramientas, y son un buen formato de archivo debido a la capacidad de autodescribirse (o obvio :). Si no están comprimidos, son enormes (10x-100x HDF), pero si están comprimidos, pueden ser bastante eficientes (el XML comprimido es casi lo mismo que HDF). La principal desventaja aquí es nuevamente la velocidad: el análisis de texto es mucho, mucho más lento que HDF.

Los otros formatos binarios (archivos npy / npz numpy, archivos blz blaze, buffers de protocolo, Avro, ...) tienen propiedades muy similares a HDF, excepto que son menos compatibles (pueden limitarse a una sola plataforma: numpy) y pueden tener otras limitaciones específicas. Por lo general, no ofrecen una ventaja convincente.

HDF es un buen complemento para las bases de datos, puede tener sentido ejecutar una consulta para producir un conjunto de datos del tamaño de la memoria y luego almacenarlo en caché en HDF si los mismos datos se usarían más de una vez. Si tiene un conjunto de datos que es fijo, y generalmente procesado como un todo, almacenarlo como una colección de archivos HDF de tamaño apropiado no es una mala opción. Si tiene un conjunto de datos que se actualiza con frecuencia, organizar algunos de ellos como archivos HDF periódicamente podría ser útil.

Para resumir, HDF es un buen formato para datos que se leen (o escriben) típicamente en su conjunto; Es el formato de intercambio de lengua franca o común / preferido para muchas aplicaciones debido a su amplio soporte y compatibilidad, decente como formato de archivo y muy rápido.

PD Para darle a este contexto algo práctico, mi experiencia más reciente comparando HDF con alternativas, un cierto conjunto de datos pequeño (mucho menos que el tamaño de la memoria) tardó 2 segundos en leerse como HDF (y la mayor parte de esto es probablemente una sobrecarga de Pandas); ~ 1 minuto para leer de JSON; y 1 hora para escribir en la base de datos. Ciertamente, la escritura de la base de datos podría acelerarse, ¡pero será mejor que tenga un buen DBA! Así es como funciona fuera de la caja.


¿Podemos decir que HDF es un formato de almacenamiento columnar? No soy demasiado competente con ninguno de estos, pero las muestras de HDF con las que he trabajado parecen presentar características externas de la agregación de datos basada en columnas.
Félix Gagnon-Grenier

Tanto las bases de datos como HDF proporcionan "la capacidad de trabajar con datos mucho más grandes que la memoria", por lo que no creo que sea exacto decir que esta es una ventaja de las bases de datos sobre HDF ya que (lo que llaman 'E / S parcial' es una característica central davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer

11

Un beneficio es el amplio soporte: C, Java, Perl, Python y R tienen enlaces HDF5.

Otro beneficio es la velocidad. Nunca lo he visto comparado, pero se supone que HDF es más rápido que las bases de datos SQL.

Entiendo que es muy bueno cuando se usa con grandes conjuntos de datos científicos y datos de series de tiempo: monitoreo de red, seguimiento de uso, etc.

No creo que haya una limitación de tamaño para los archivos HDF (aunque los límites del sistema operativo aún se aplicarían).


55
Por experiencia personal, agregaría que la documentación / etiqueta incorporada es enorme. Ahora todos mis conjuntos de datos se pueden almacenar con registros explícitos de dónde provienen, frecuencia de muestreo, anomalías, etc., etc.
gallamina

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.