La evaluación de HDF5: ¿Qué limitaciones / características proporciona HDF5 de datos de modelos?

StackOverflow https://stackoverflow.com/questions/547195

Pregunta

Estamos en la evaluación de tecnologías que utilizaremos para almacenar datos que nos reunimos durante el análisis del / de código C C ++. En el caso de C ++, la cantidad de datos puede ser relativamente grande, ~ 20 MB por TU.

Después de leer la siguiente respuesta SO que me hizo considerar que HDF5 podría ser una tecnología adecuada para nuestro uso. Me preguntaba si la gente aquí podría ayudar a contestar algunas preguntas iniciales que tengo:

  1. Rendimiento. El uso general de los datos será escribir una vez y leer "varias veces", similar a la vida útil de un archivo '.o' generado por un compilador. ¿Cómo se compara HDF5 contra el uso de algo así como una base de datos SQLite? Es que incluso una comparación razonable hacer?

  2. Con el tiempo vamos a añadir a la información que estamos almacenando, pero no necesariamente que desee volver a distribuir un conjunto completamente nuevo de "lectores" para apoyar un nuevo formato. Después de leer la guía del usuario entiendo que HDF5 es similar a XML o una base de datos, en el que la información se asocia con una etiqueta / columna y por lo que una herramienta integrada para leer una estructura más antigua simplemente ignorará los campos que no tiene que ver con? Tengo entendido en esto correcto?

  3. Una parte significativa de la información que se desea escribir será un tipo de árbol de la estructura: jerarquía alcance, tipo de jerarquía, etc. Lo ideal sería modelar alcances que tienen los padres, niños, etc. ¿Es posible tener un objeto "punto" HDF5 a otro? Si no, ¿hay una técnica estándar para resolver este problema utilizando HDF5? O, como se requiere en una base de datos, ¿necesitamos una clave única que sería "link" un objeto a otro con las búsquedas adecuadas en la búsqueda de los datos?

Muchas gracias!

¿Fue útil?

Solución

  

¿Cómo se compara HDF5 contra el uso de algo así como una base de datos SQLite?   Es que incluso una comparación razonable hacer?

Una especie de similar pero en realidad no. Ambos son archivos estructurados. SQLite tiene características para apoyar las consultas de bases de datos utilizando SQL. HDF5 tiene características para soportar grandes conjuntos de datos científicos.

Ambos están destinados a ser de alto rendimiento.

  

Con el tiempo vamos a añadir a la información que estamos almacenando, pero no necesariamente que desee volver a distribuir un conjunto completamente nuevo de "lectores" para apoyar un nuevo formato.

Si almacena datos en forma estructurada, los tipos de datos de esas estructuras también se almacenan en el archivo HDF5. Estoy un poco oxidado en cuanto a cómo funciona esto (por ejemplo, si incluye al revés innatas de compatibilidad), pero sí sé que si el diseño de su "lector" correctamente, debe ser capaz de manejar los tipos que se cambian en el futuro.

  

¿Es posible tener un objeto HDF5 "punto" a otro?

Por supuesto! Usted querrá usar atributos . Cada objeto tiene una o más cadenas que describen el recorrido para llegar a ese objeto. grupos HDF5 son análogas a las carpetas / directorios, excepto que las carpetas / directorios son jerárquicos = un camino único describe la ubicación de cada uno (en sistemas de archivos w / o enlaces duros por lo menos), mientras que los grupos forman un gráfico dirigido que puede incluir ciclos. No estoy seguro de si se puede almacenar un "puntero" a un objeto directamente como un atributo, pero siempre se puede almacenar una ruta absoluta / relativa como un atributo de cadena. (O en cualquier otro lugar como una cadena;. Que podría tener las tablas de búsqueda en abundancia si quería)

Otros consejos

producimos HDF5 datos sobre mi proyecto, pero no tratan directamente con él por lo general. Puedo tomar una puñalada en las dos primeras preguntas:

  1. Utilizamos una sola escritura, leído muchas veces de modelo y el formato parece manejar esto muy bien. Conozco a un proyecto que utiliza para escribir tanto a un Oracle base de datos y HDF5. Finalmente le quitaron la salida ya que el rendimiento de Oracle sufrió y nadie lo estaba usando. Obviamente, SQLite no es Oracle, pero el formato HDF5 era más adecuado para la tarea. Con base en ese punto uno de datos, un RDBMS puede ser mejor ajustada para múltiples inserciones y actualizaciones.

  2. Los lectores utilizan nuestros clientes son robustos cuando añadimos nuevos tipos de datos. Algunos de los cambios están previstos, pero que no tiene que preocuparse de romper algo al agregar más campos de datos. Nuestro DBA escribió recientemente un programa Python para leer datos HDF5 y poblar los archivos KMZ para la visualización en Google Earth. Ya que era un proyecto que utiliza para aprender Python, yo diría que no es difícil de construir lectores.

En la tercera pregunta, voy a inclino a de Jason S conocimiento superior.

Yo diría HDF5 es una opción totalmente razonable, sobre todo si ya está interesado en él o planea producir algo por la comunidad científica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top