2009-07-02 5 views
59

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

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

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

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

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

+2

postscript: HDF5 * очень * проще в использовании в Python с PyTables, чем Java. –

+0

К сожалению для пользователей Java, как netCDF, так и HDF5 разработаны в C, в основном для пользователей C или Fortran. Большинство других API, таких как Python, построены на слое C.) –

+0

@EdwardHartnett - Я не покупаю этот аргумент. Разумеется, это означает, что вы не получаете никаких хороших функций Java бесплатно, но люди приступили к созданию полезных API в Python. Нет причин, по которым кто-то не мог это сделать на Java. (И фактически, я сделал это сам - в небольшой степени - в бывшей компании, когда я разместил этот вопрос еще в 2009 году, но у меня нет доступа к этому коду.) –

ответ

29

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

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

+26

ответ устарел - netCDF теперь построен на HDF5 – Abe

+0

@abe не обязательно. netcdf4 все еще имеет некоторую обратную совместимость w netcdf3. это означает, что некоторые параметры сжатия по-прежнему недоступны для nc-файлов. – badgley

+0

@badgley - какие параметры сжатия отсутствуют в netCDF при использовании для записи файлов netCDF-4? –

8

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

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

+0

Parallel IO также поддерживается непосредственно Unidata's netCDF, которая использует либо HDF5, либо параллельно-netcdf под крышками для обеспечения параллельного ввода-вывода. –

19

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

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

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

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

+2

afaik, NetCDF4 - это своего рода ошарашенный HDF5, так что он знаком с теми, которые использовались в предыдущих версиях NetCDF. http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2010/msg00170.html – mdsumner

+1

Это так, но в большей степени они пытаются навязать структуру, чем тупой вниз - https: //www.unidata.ucar .edu/программное обеспечение/NetCDF/Docs/netcdf_introduction.html # netcdf_4_format. – spinkus

+1

NetCDF-4 предоставляет практически все функции HDF5, за исключением некоторых мелких неясных исключений. –

12

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

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

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

+0

Последнее, что я проверил, в библиотеке Java не разрешалось записывать файлы HDF5. Во всяком случае, это спорный момент, когда я перешел к другим вещам. : -/ –

+0

Спасибо за краткий ответ, это очень полезная информация, хотя было бы даже лучше, если бы у нее было несколько ссылок :) – naught101

+0

«может читать и записывать большинство файлов HDF5». Нет, не может. NetCDF4 использует HDF5, как приложение использует файловую систему. Он читает и записывает определенную структуру, наложенную на HDF5. 1.8 – spinkus

6

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

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

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

+0

Поскольку HDF5 не реализует общие измерения, есть аргумент (отказ от меня), что вы должны написать netCDF-4, а не напрямую HDF5, здесь: http: /www.unidata.ucar.edu/blogs/developer/en/entry/dimensions_scales. –

-1

NetCDF, который переводит HDF5 в свою собственную модель данных, выглядит и отлично работает ... until you find out that NetCDF doesn't support unsigned values! См. Также my question о том, как обнаружить неподписанные значения в существующих файлах HDF5 с помощью NetCDF.

Update: На самом деле, оказывается, что хотя NetCDF-3 не поддерживает подписанные значения, NetCDF-4 поддерживает подписанные значения, даже если API NetCDF в Java для определения знаковость является a little convoluted.

+1

Ум ... половина вашего ответа гласит, что NetCDF не поддерживает * unsigned * values, а другая половина предполагает, что он не поддерживает * подписанные * значения. Что это будет? В первой ссылке говорится, что NetCDF 3 не имеет неподписанных * целых чисел *, а не значений в целом. Кроме того, вторая ссылка указывает на проблему с * java *, а не netCDF4. И действительно, какое это имеет значение? Это означает, что у вас есть половина целых чисел для индексации, но у вас все еще есть 2^31 (= 2 миллиарда) или 2^63 (9 * 10 18), в зависимости от вашей системы. – naught101

+0

Чтобы уточнить, библиотека netCDF-4 C поддерживает целые числа без знака (8, 16, 32 и 64 бит). Библиотека netCDF Java не может создавать неподписанные типы, но может читать неподписанные типы размером 8, 16 и 32 бит, продвигая их к подписанным типам следующего большего размера. (То есть 16-разрядное целое число без знака в файле netCDF будет выглядеть как 32-разрядное поле со знаком в java.) Все это связано с тем, что Java не поддерживает неподписанные типы. –

9

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

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