Pytables, установка и удаление атрибутов HDF5,

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

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

(1) всегда одно и то же значение (поэтому в целом значение, хранящееся в файле hdf5, качественно не меняется)

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

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

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

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


person SmCaterpillar    schedule 05.09.2013    source источник


Ответы (1)


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

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

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

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

person Anthony Scopatz    schedule 05.09.2013
comment
Обратите внимание, что ограничение размера в 64 КБ установлено только по умолчанию. Существует два способа хранения больших атрибутов — плотное хранение атрибутов и отдельные наборы данных. Дополнительную информацию см. в руководстве. - person Yossarian; 09.09.2013
comment
Знаете ли вы, как я могу включить плотное хранилище атрибутов HDF5 из Python и PyTables? - person SmCaterpillar; 21.03.2015