Мнения о NetCDF против HDF5 для хранения научных данных?
Вопрос
У кого-нибудь есть достаточный опыт работы с 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 для определения подписанности немного запутанный.