2016-03-17 2 views
1

У меня есть unchunked, несжатый HDF5-файл размером 460 МБ. Я использую h5repack, чтобы сохранить файл с сжатыми кусками, как это:Хранение HDF5 без сжатия приводит к увеличению размера файла

h5repack -v -l CHUNK=128x128x1 -f GZIP=1 file.h5 file_chunked.h5 

Это прекрасно работает, и полученный размер файла составляет около 1/3 от исходных (170Мб).

Однако, если я пытаюсь использовать отрывов без сжатия как это

h5repack -v -l CHUNK=128x128x1 -f NONE file.h5 file_chunked.h5 

или даже

h5repack -v -l CHUNK=128x128x1 file.h5 file_chunked.h5 

затем полученный размер файла значительно больше (10x), чем оригинал (3.9GB).

Результирующие размеры наборов данных, типы данных и контент кажутся одинаковыми. Когда я просматриваю файл в HDFView, я не вижу различий в оригинале, кроме Chunking, который установлен на 128x128x1.

Я ожидаю, что фрагментированный, но несжатый файл будет примерно того же размера, что и оригинал.

Может кто-нибудь объяснить это мне? Вероятно, мне не хватает чего-то фундаментального.

Грузы спасибо!

ответ

1

Каждый кусок несет некоторые накладные расходы. Внутренне они являются узлами в B-дереве. Эти накладные расходы умножаются на количество кусков. Если у вас относительно небольшие куски, их будет много. Без сжатия эти накладные расходы могут быть огромными.

страница о things that can affect performance говорит:

Избегайте использование размера куска, который действительно мал. Может быть много накладных расходов с небольшим размером блока, что может повлиять на производительность, в дополнение к тому, что файл намного больше.

+0

Thanks Simon, Я уже читал эти инструкции, и я был уверен, что выбрал разумный размер куска для своих наборов данных. Они довольно большие по x и y (5000) и очень малы по z (15). Но я узнал, что у меня был порядок смешивания. Он должен быть 1x128x128 (z первый) вместо 128x128x1, что, очевидно, имеет огромное значение. – Felizett

+0

Отлично! Я был удивлен количеством накладных расходов. Это объясняет это красиво! – Simon

Смежные вопросы