Оценка HDF5: Какие ограничения / функции предоставляет HDF5 для моделирования данных? - PullRequest
39 голосов
/ 13 февраля 2009

Мы занимаемся оценкой технологий, которые мы будем использовать для хранения данных, которые мы собираем во время анализа кода C / C ++. В случае C ++ объем данных может быть относительно большим, ~ 20 МБ на TU.

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

  1. Производительность. Общее использование данных будет записываться один раз и считываться «несколько раз», аналогично времени жизни файла .o, сгенерированного компилятором. Как HDF5 сравнивается с использованием чего-то вроде БД SQLite? Это даже разумное сравнение?

  2. Со временем мы добавим к информации, которую мы храним, но не обязательно захотим перераспределить совершенно новый набор «читателей» для поддержки нового формата. После прочтения руководства пользователя я понимаю, что HDF5 похож на XML или БД, в том, что информация связана с тегом / столбцом, и поэтому инструмент, созданный для чтения более старой структуры, будет просто игнорировать поля, которые его не касаются? Правильно ли мое понимание этого вопроса?

  3. Значительная часть информации, которую мы хотим выписать, будет представлять собой древовидный тип структуры: иерархия областей действия, иерархия типов и т. Д. В идеале мы могли бы моделировать области действия как имеющие родителей, детей и т. Д. Возможно ли иметь один объект HDF5 «указывает» на другой? Если нет, то существует ли стандартная методика решения этой проблемы с использованием HDF5? Или, как требуется в БД, нужен ли нам уникальный ключ, который бы «связывал» один объект с другим с помощью соответствующих поисков при поиске данных?

Большое спасибо!

Ответы [ 2 ]

23 голосов
/ 13 февраля 2009

Как HDF5 сравнивается с использованием чего-то вроде БД SQLite? Это даже разумное сравнение?

Вроде как, но не совсем. Они оба структурированные файлы. SQLite имеет функции для поддержки запросов к базе данных с использованием SQL. HDF5 имеет функции для поддержки больших научных наборов данных.

Они оба предназначены для высокой производительности.

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

Если вы храните данные в структурированной форме, типы данных этих структур также сохраняются в файле HDF5. Я немного расстроен тем, как это работает (например, если это включает в себя обратную совместимость врожденного типа), но я знаю, что если вы правильно спроектируете свой «читатель», он сможет обрабатывать типы, которые будут изменены в будущем.

Возможно ли, чтобы один объект HDF5 "указывал" на другой?

Абсолютно! Вы захотите использовать атрибутов . Каждый объект имеет одну или несколько строк, описывающих путь к этому объекту. HDF5 группы аналогичны папкам / каталогам, за исключением того, что папки / каталоги являются иерархическими = уникальный путь описывает местоположение каждого из них (по крайней мере, в файловых системах без жестких ссылок), тогда как группы образуют ориентированный граф, который может включить циклы. Я не уверен, можете ли вы сохранить «указатель» на объект непосредственно как атрибут, но вы всегда можете сохранить абсолютный / относительный путь как строковый атрибут. (или в любом другом месте в виде строки; вы можете иметь множество таблиц поиска, если хотите).

9 голосов
/ 13 февраля 2009

Мы создаем данные HDF5 для моего проекта, но я обычно не занимаюсь этим напрямую. Я могу ответить на первые два вопроса:

  1. Мы используем одну запись, много раз читаем модель, и формат, кажется, хорошо с этим справляется. Я знаю проект, который использовался для записи в базу данных Oracle и HDF5. В конце концов они удалили выход Oracle, так как производительность пострадала, и никто не использовал его. Очевидно, что SQLite - это не Oracle, но формат HDF5 лучше подходил для этой задачи. Исходя из этой одной точки данных, СУБД может быть лучше настроена для нескольких вставок и обновлений.

  2. Считыватели, которые используют наши клиенты, надежны, когда мы добавляем новые типы данных. Некоторые изменения ожидаются, но нам не нужно беспокоиться о том, чтобы что-то сломать при добавлении дополнительных полей данных. Наш администратор баз данных недавно написал программу на Python для чтения данных HDF5 и заполнения файлов KMZ для визуализации в Google Earth. Так как это был проект, который он использовал для изучения Python, я бы сказал, что не сложно собрать читателей.

По третьему вопросу я склонюсь перед Высшим знанием Джейсона С. .

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

...