escrituras incrementales en hdf5 con h5py
Tengo una pregunta sobre cómo escribir mejor en archivos hdf5 con python / h5py.
Tengo datos como:
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
con aproximadamente 10 ^ 4 columnas y aproximadamente 10 ^ 7 filas. (Eso es aproximadamente 10 ^ 11 (100 mil millones) de elementos, o ~ 100GB con entradas de 1 byte).
Con estos datos, el uso típico es escribir una vez, leer muchas veces, y el caso de lectura típico sería tomar la columna 1 y otra columna (digamos 254), cargar ambas columnas en la memoria y hacer algunas estadísticas sofisticadas.
Creo que una buena estructura hdf5 sería que cada columna de la tabla anterior sea un grupo hdf5, lo que da como resultado 10 ^ 4 grupos. De esa manera no necesitaremos leer todos los datos en la memoria, ¿sí? Sin embargo, la estructura hdf5 aún no está definida, por lo que puede ser cualquier cosa.
Ahora la pregunta: recibo los datos ~ 10 ^ 4 filas a la vez (y no exactamente el mismo número de filas cada vez), y necesito escribirlo de forma incremental en el archivo hdf5. ¿Cómo escribo ese archivo?
Estoy considerando python y h5py, pero podría otra herramienta si se recomienda. Es el camino a seguir, p. Ej.
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
y luego, cuando llega otro bloque de 10 ^ 4 filas, ¿reemplazar el conjunto de datos?
¿O es mejor simplemente almacenar cada bloque de 10 ^ 4 filas como un conjunto de datos separado? ¿O realmente necesito saber el número final de filas? (Eso será difícil de conseguir, pero tal vez sea posible).
Puedo rescatar a hdf5 si no es la herramienta adecuada para el trabajo también, aunque creo que una vez que se hagan las incómodas escrituras, será maravilloso.