Иерархический формат данных. Каковы преимущества по сравнению с альтернативными форматами?

28

Каковы основные преимущества хранения данных в формате HDF? И каковы основные задачи по науке о данных, где HDF действительно подходит и полезен?

IharS
источник

Ответы:

25

Возможно, хороший способ перефразировать вопрос, каковы преимущества по сравнению с альтернативными форматами?

Я думаю, что основными альтернативами являются: база данных, текстовые файлы или другой упакованный / двоичный формат.

Варианты базы данных, которые следует учитывать, - это, вероятно, столбчатое хранилище, или NoSQL, или для небольших автономных наборов данных SQLite. Основным преимуществом базы данных является возможность работать с данными, значительно превышающими объем памяти, иметь произвольный или индексированный доступ и быстро добавлять / добавлять / изменять данные. Основным преимуществом * dis * является то, что он намного медленнее, чем HDF, для задач, в которых весь набор данных необходимо считывать и обрабатывать. Другим недостатком является то, что, за исключением баз данных встроенного стиля, таких как SQLite, база данных является системой (требующей администрирования, настройки, обслуживания и т. Д.), А не простым автономным хранилищем данных.

Опции формата текстового файла: XML / JSON / CSV. Они являются кроссплатформенными / языком / инструментарием и являются хорошим архивным форматом из-за возможности самоописания (или очевидности :). Если они не сжаты, они огромные (10x-100x HDF), но если они сжаты, они могут быть достаточно компактными (сжатый XML примерно такой же, как HDF). Основным недостатком здесь опять же является скорость: синтаксический анализ текста происходит намного, намного медленнее, чем HDF.

Другие двоичные форматы (файлы npy / npz numpy, файлы blz blaze, буферы протокола, Avro, ...) имеют свойства, очень похожие на HDF, за исключением того, что они менее широко поддерживаются (могут быть ограничены только одной платформой: numpy) и могут есть конкретные другие ограничения. Как правило, они не предлагают убедительного преимущества.

HDF является хорошим дополнением к базам данных. Возможно, имеет смысл выполнить запрос, чтобы получить набор данных размером приблизительно с памятью, а затем кэшировать его в HDF, если одни и те же данные будут использоваться более одного раза. Если у вас есть набор данных, который является фиксированным и обычно обрабатывается как единое целое, его сохранение в виде коллекции HDF-файлов подходящего размера не является плохим вариантом. Если у вас есть набор данных, который часто обновляется, периодическая подготовка некоторых из них в виде файлов HDF может оказаться полезной.

Подводя итог, можно сказать, что HDF является хорошим форматом для данных, которые обычно считываются (или записываются) в целом; это лингва франка или общий / предпочтительный формат обмена для многих приложений благодаря широкой поддержке и совместимости, приличный как архивный формат и очень быстрый.

PS Чтобы дать этому некоторый практический контекст, мой последний опыт сравнения HDF с альтернативами, определенному небольшому (намного меньшему, чем объем памяти), набору данных потребовалось 2 секунды для чтения как HDF (и большая часть этого, вероятно, излишняя для Pandas); ~ 1 минута для чтения из JSON; и 1 час для записи в базу данных. Конечно, запись в базу данных может быть ускорена, но вам лучше иметь хорошего администратора базы данных! Вот как это работает из коробки.

Алекс я
источник
Можно ли сказать, что HDF - это колоночный формат хранения? Я не слишком опытен с любым из них, но примеры HDF, с которыми я работал, действительно представляют внешние особенности агрегации данных на основе столбцов.
Феликс Ганьон-Гренье
Как базы данных, так и HDF предоставляют «возможность работать с данными, намного превышающими объем памяти», поэтому я не думаю, что будет правильным сказать, что это преимущество баз данных перед HDF, поскольку (то, что они называют «частичным вводом-выводом», основная функция davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
Дэвид Лебауэр
11

Одним из преимуществ является широкая поддержка - C, Java, Perl, Python и R имеют привязки HDF5.

Еще одно преимущество - скорость. Я никогда не видел его в тестах, но HDF должен быть быстрее, чем базы данных SQL.

Я понимаю, что это очень хорошо, когда используется как с большими наборами научных данных, так и с данными временных рядов - мониторинг сети, отслеживание использования и т. Д.

Я не верю, что существует ограничение по размеру для файлов HDF (хотя ограничения ОС все равно будут применяться.

Стив Каллестад
источник
5
Из личного опыта я бы добавил, что встроенная документация / этикетка огромна. Теперь все мои наборы данных могут храниться с явными записями о том, откуда они пришли, частоте дискретизации, аномалиях и т. Д. И т. Д.
Галламин