gravações incrementais em hdf5 com h5py
Eu tenho uma pergunta sobre a melhor forma de gravar em arquivos hdf5 com python / h5py.
Eu tenho dados como:
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
com cerca de 10 ^ 4 colunas e cerca de 10 ^ 7 linhas. (São cerca de 10 ^ 11 (100 bilhões) elementos, ou ~ 100 GB com 1 byte ints).
Com esses dados, o uso típico é basicamente escrever uma vez, ler várias vezes, e o caso de leitura típico seria pegar a coluna 1 e outra (digamos 254), carregar as duas colunas na memória e fazer algumas estatísticas sofisticadas.
Penso que uma boa estrutura hdf5 seria, portanto, ter cada coluna na tabela acima como um grupo hdf5, resultando em 10 ^ 4 grupos. Dessa forma, não precisaremos ler todos os dados na memória, sim? A estrutura hdf5 ainda não está definida, portanto, pode ser qualquer coisa.
Agora a pergunta: recebo os dados ~ 10 ^ 4 linhas de cada vez (e não exatamente o mesmo número de linhas de cada vez) e preciso gravá-los de forma incremental no arquivo hdf5. Como escrevo esse arquivo?
Estou pensando em python e h5py, mas poderia outra ferramenta, se recomendado. Está dividindo o caminho a seguir, com p.
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
e depois que outro bloco de 10 ^ 4 linhas chegar, substitua o conjunto de dados?
Ou é melhor apenas armazenar cada bloco de 10 ^ 4 linhas como um conjunto de dados separado? Ou eu realmente preciso saber o número final de linhas? (Isso será difícil de conseguir, mas talvez possível).
Posso usar o hdf5 se também não for a ferramenta certa para o trabalho, embora eu ache que, depois que as escritas estranhas forem feitas, será maravilhoso.