Мнения о NetCDF и HDF5 для хранения научных данных?

У кого-то есть опыт работы с NetCDF и HDF5, чтобы дать им некоторые плюсы/минусы как способ хранения научных данных?

Я использовал HDF5 и хотел бы читать/писать через Java, но интерфейс по сути является оберткой вокруг библиотек C, которую я нашел сбивающим с толку, поэтому NetCDF кажется интригующим, но я почти ничего не знаю об этом.

edit: мое приложение "только" для регистрации данных, поэтому я получаю файл с самоописательным форматом. Важные функции для меня - возможность добавлять произвольные метаданные, иметь быстрый доступ для записи для добавления в байтовые массивы и иметь один-записывающий/множественный читатель concurrency (настоятельно рекомендуется, но не обязательный). NetCDF сообщает, что у них есть SWMR но не говорите, поддерживают ли они какой-либо механизм обеспечения того, чтобы два автора не могли сразу открыть один и тот же файл с катастрофическими результатами). Мне нравится иерархический аспект HDF5 (в частности, любовь иерархия направленного ациклического графа, гораздо более гибкая, чем "обычная" иерархия, подобная файловой системе) читает сейчас документы NetCDF... если он позволяет только один набор данных для каждого файла, то он, вероятно, не будет работать для меня.: (

обновление — выглядит как NetCDF-Java, читается из файлов netCDF-4, но записывается только из файлов netCDF-3, которые не поддерживают иерархические группы. штопка.

update 2009-Jul-14. Я начинаю сильно расстраиваться с HDF5 на Java. Доступная библиотека не так уж полезна, и в ней есть некоторые основные камни преткновения, связанные с уровнями абстракции Java (сложные типы данных). Отличный формат файла для C, но похоже, что я просто проигрываю. > : (

Ответ 1

Я настоятельно рекомендую вам HDF5 вместо NetCDF. NetCDF плоский, и через некоторое время он становится очень грязным, если вы не можете классифицировать материал. Конечно, классификация также является предметом обсуждения, но по крайней мере у вас есть такая гибкость.

Мы выполнили точную оценку HDF5 по сравнению с NetCDF, когда я написал Q5Cost, и конечный результат был для HDF5.

Ответ 2

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

"H" в HDF5 означает "heirarchical", который в любом случае переводил (для меня) ДЕЙСТВИТЕЛЬНО простой способ манипулировать данными, просто перемещая узлы и ссылаясь на узлы из других мест.

Могу ли я спросить, что это за проект? Я использую их как для многих задач моделирования HPC. Могу ли я предположить, что вы делаете то же самое? Если это так, тенденция, которую я вижу, это люди, которые переходят на HDF5, но это может быть другим в вашем конкретном домене.

Однако вы в конечном итоге, удачи!

Ответ 3

NetCDF, начиная с версии 4.0 (2008), может читать и записывать большинство файлов HDF5 и обеспечивает доступ к иерархическим функциям HDF5 с помощью улучшенной модели данных.

HDF5 чрезвычайно функциональна и обладает отличными характеристиками.

NetCDF имеет более простой API и гораздо более широкую базу инструментов. Существует множество инструментов, которые обрабатывают данные netCDF.

Ответ 4

Попробуйте написать небольшое приложение-образец в каждом, и сравните опыт. Если для вас важна будущая масштабируемость вашего кода для параллельного выполнения (через MPI и т.п.), Я знаю, что HDF имеет параллельную реализацию, которую люди постоянно работают над улучшением. Я не уверен в NetCDF.

Позднее редактирование: для NetCDF теперь есть Parallel NetCDF от Argonne. Он работает достаточно хорошо, и команда разработчиков довольно активно улучшает его.

Ответ 5

Я знаю, что это более старая статья, и оригинальный плакат показал, что они перешли, но для всех, кто заканчивается здесь... В библиотеке netCDF-Java (начиная с 4.3.13) есть netCDF-4 write поддержка через библиотеку netCDF C. Он все еще в бета-версии, но он работает, и обратная связь, безусловно, оценена!

Подробнее см. в документах netCDF-Java reference.

Ответ 6

1) Библиотека Netcdf-4 C - это слой поверх библиотеки HDF-5 C. API считается более простым, чем библиотека HDF5, но в итоге у вас практически такая же функциональность. Netcdf не поддерживает графики, но HDF5 делает. На самом деле, HDF не мешает циклам в вашем графике, я думаю.

2) группа HDF имеет Java API поверх библиотеки HDF-5 C.

3) Unidata имеет библиотеку Netcdf-Java, которая является чистой Java, но может читать только HDF-5.

Ответ 7

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

Обновление: на самом деле выясняется, что хотя NetCDF-3 не поддерживает подписанные значения, NetCDF-4 поддерживает подписанные значения, даже если API NetCDF в Java для определения подписанности немного запутанным.