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

StackOverflow https://stackoverflow.com/questions/547195

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Чем HDF5 отличается от использования чего-то вроде базы данных SQLite?Это вообще разумное сравнение?

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top