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

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

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Решение

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

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

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

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

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

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

Как бы вы в конечном итоге ни поступили, желаю удачи!

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

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

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

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

Пожалуйста, ознакомьтесь с NetCDF-Java ссылка документы для получения более подробной информации.

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

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

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

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

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

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

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

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