инкрементная запись в hdf5 с помощью h5py
У меня вопрос о том, как лучше писать в hdf5 файлы с помощью python / h5py.
У меня есть данные как:
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
около 10 ^ 4 столбцов и около 10 ^ 7 строк. (Это около 10 ^ 11 (100 миллиардов) элементов, или ~ 100 ГБ с 1 байтами).
С этими данными типичное использование - это, в основном, однократная запись, многократное чтение, и типичным случаем чтения будет захват столбца 1 и другого столбца (скажем, 254), загрузка обоих столбцов в память и выполнение некоторой необычной статистики.
Я думаю, что хорошая структура hdf5 должна состоять в том, чтобы каждый столбец в таблице выше был группой hdf5, что привело бы к 10 ^ 4 группам. Таким образом, нам не нужно будет читать все данные в память, да? Структура hdf5 еще не определена, поэтому она может быть чем угодно.
Теперь вопрос: я получаю данные ~ 10 ^ 4 строки за раз (и не точно одинаковое количество строк каждый раз), и мне нужно записать их постепенно в файл hdf5. Как мне написать этот файл?
Я рассматриваю python и h5py, но могу порекомендовать другой инструмент. Пробивает путь, например,
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
и затем, когда прибудет другой блок из 10 ^ 4 строк, замените набор данных?
Или лучше просто хранить каждый блок из 10 ^ 4 строк в виде отдельного набора данных? Или мне действительно нужно знать окончательное количество строк? (Это будет сложно получить, но, возможно, возможно).
Я могу взять залог за hdf5, если он тоже не подходит для этой работы, хотя я думаю, что, как только неловкие записи будут сделаны, это будет замечательно.