¿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?
¿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?
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.
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).
fuente
Para agregar, consulte ASDF en particular su ASDF en papel : un nuevo formato de datos para Astronomía ; ASDF intenta mejorar HDF5 y el documento describe algunas desventajas del formato HDF5.
fuente