2013-09-05 2 views
0

Я много работаю с данными pytables и HDF5, и у меня есть вопрос относительно атрибутов узлов (атрибуты, к которым вы подключаетесь через свойство node._v_attrs объекта pytables).Pytables, установка и удаление атрибутов HDF5,

Предположим, что я установил такой атрибут узла hdf5. Я это снова и снова сделать, установив определенный атрибут

(1) всегда на ту же величину (так общее значение, хранящееся в hdf5file качественно не меняется)

(2) всегда с другим значением

Каковы эти операции с точки зрения скорости и памяти? Я имею в виду следующее: установка атрибута действительно подразумевает удаление атрибута в файле hdf5 и добавление нового атрибута с тем же именем, что и раньше? Если да, значит ли это, что каждый раз, когда я обнуляю существующий атрибут, размер файла hdf5 немного увеличивается и продолжает медленно расти, пока мой жесткий диск не будет заполнен?

Если это правда, было бы более полезно проверить, прежде чем я сброшу ли я случай (1) [и я не должен хранить вообще, кроме сравнения данных с атрибутом, записанным на диске], и только переназначить, если я сталкиваюсь случай (2) [т.е. значение атрибута в файле hdf5 не является тем, которое я хочу записать в файл hdf5].

Спасибо и наилучшими пожеланиями, Роберт

ответ

2

HDF5 атрибутов доступа, как известно, медленно. HDF5 действительно построен для структуры данных массива и вокруг него. Такие вещи, как группы и атрибуты, являются большими помощниками, но они не оптимизированы.

Это говорит, что при чтении атрибутов медленно, запись атрибутов еще медленнее. Поэтому всегда стоит приложить дополнительные усилия, чтобы сделать то, что вы предлагаете. Проверьте, существует ли атрибут и имеет ли он требуемое значение перед его записью. Это должно дать вам ускорение по сравнению с тем, чтобы просто писать его каждый раз.

К счастью, эффект на память атрибутов - как на диске, так и в памяти - минимален. Это связано с тем, что ВСЕ атрибуты на узле вписываются в 64 kb специального пространства метаданных. Если вы попытаетесь записать атрибуты более 64 кб, HDF5 и PyTables не удастся.

Надеюсь, это поможет.

+0

Обратите внимание, что ограничение размера 64 kb является только значением по умолчанию. Существует два способа хранения более крупных атрибутов: хранение плотных атрибутов и отдельные наборы данных. Дополнительную информацию см. В [руководстве] (http://www.hdfgroup.org/HDF5/doc/UG/13_Attributes.html). – Yossarian

+0

Знаете ли вы, как я могу включить плотное хранилище атрибутов HDF5 из Python и PyTables? – SmCaterpillar