Сжатие файлов HDF5 без фильтров сжатия HDF5

Какие алгоритмы сжатия обычно используются при сжатии файла HDF5, созданного без применения каких-либо фильтров сжатия HDF5?

Мои файлы HDF5 созданы с помощью h5py в Python 3.8 и содержат N-мерные массивы numpy из 32-битных чисел с плавающей запятой в диапазоне от -1,0 до 1,0, похожие на (1000000,10,200) . Данные считываются как массивы (1,10,200) в случайном порядке. Фрагментирование наборов данных HDF5, по-видимому, значительно замедляет прерывистое/случайное чтение/выбор, поэтому фрагментирование было отключено, что предотвратило использование фильтров сжатия HDF5.


person Athena Wisdom    schedule 23.06.2020    source источник
comment
Какие тесты вы выполнили, чтобы убедиться, что фрагментация действительно влияет на производительность ввода-вывода? Если это так, то действительно ли это достаточно важно, чтобы требовать непрерывных данных вместо фрагментированных? Ваш метод сжатия во многом будет зависеть от характера исходных данных. Можете ли вы предоставить более подробную информацию об этом?   -  person esilk    schedule 23.06.2020
comment
@esilk Комплексные тесты не проводились. Текущий набор данных представляет собой массив numpy (1000000,10,200), содержащий float32, который считывается (1,10,200) за раз в случайном порядке. Установка размера фрагмента на (1,10,200) сделала случайное чтение в 5-10 раз медленнее. Обновленный вопрос с этими деталями   -  person Athena Wisdom    schedule 23.06.2020
comment
Я должен пояснить, что я имел в виду по поводу природы данных — я имею в виду не только их форму и представление. Я предполагаю, что данные — это не просто игрушечные данные, а измерения некоторых явлений. Существуют ли общеизвестные методы сжатия внутри домена (JPEG для изображений, FLAC для аудио и т. д.)? Если нет, то есть ли в данных шаблоны/структуры, которые можно использовать для уменьшения представления?   -  person esilk    schedule 23.06.2020
comment
@esilk Спасибо, данные не имеют сжатия, специфичного для домена, о котором я знаю. Массивы содержат данные, которые были рассчитаны на основе исходных данных измерений. Исходные данные были исключены из этого набора данных.   -  person Athena Wisdom    schedule 23.06.2020
comment
Тогда я не уверен, что могу сделать много предложений. Сжатие, как правило, зависит от характера данных, и использование произвольных методов может не привести к значительным выигрышам (или даже потерям): en.wikipedia.org/wiki/Lossless_compression#Limitations   -  person esilk    schedule 23.06.2020
comment
Здесь есть хорошее обсуждение: stackoverflow.com/a/48405220/10462884. См. комментарии об использовании h5py_cache. Подробнее о h5py_cache здесь: stackoverflow.com/a/44961222/10462884. Рассматривали ли вы PyTables (он же модуль таблиц)? У них есть отличное обсуждение алгоритмов оптимизации, фрагментации и сжатия здесь: pytables.org/usersguide/optimization. HTML. Это стоит прочитать.   -  person kcw78    schedule 23.06.2020
comment
Добавьте пример того, что вы пробовали в отношении фрагментации и того, как вы записываете набор данных (он может быть фрагментирован на жестком диске). Является ли шаблон доступа действительно полностью случайным или только каким-то образом случайным?   -  person max9111    schedule 25.06.2020