对 NetCDF 与 HDF5存储科学数据的看法?

有没有人有足够的经验使用 NetCDF 和 HDF5来给出它们作为存储科学数据的一种方式的优缺点?

我使用过 HDF5,想通过 Java 读/写,但界面本质上是围绕 C 库的一个包装器,这让我感到困惑,所以 NetCDF 看起来很有趣,但我对它几乎一无所知。

编辑: 我的应用程序“仅”用于数据记录,因此我得到一个具有自描述格式的文件。对我来说,重要的特性是能够添加任意的元数据,具有快速的写入访问以添加到字节数组,以及具有单写入器/多读取器并发性(非常喜欢,但不是必须的)。NetCDF 的文档说他们有 SWMR,但没有说他们是否支持任何机制,以确保两个作者不能同时打开同一个文件,导致灾难性的后果)。我喜欢 HDF5的层次结构(特别是我 的有向无环图层次结构,比“常规”的类似文件系统的层次结构更加灵活) ,现在正在阅读 NetCDF 文档... 如果它只允许每个文件一个数据集,那么它可能不适合我。:(

Update & mash; 看起来像是 NetCDF-Java从 netCDF-4文件中读取,但只从 netCDF-3文件中写入,这些文件不支持分层组。该死。

更新2009-7-14 : 我开始对 Java 中的 HDF5感到非常失望。可用的库没有那么好,它有一些与 Java 的抽象层(复合数据类型)有关的主要障碍。一个很棒的 C 文件格式,但是看起来我输了。 > :(

26145 次浏览

尝试在每个应用程序中编写一些小的示例应用程序,并比较这些经验。如果将来代码的并行执行(通过 MPI 或类似方式)的可伸缩性对您来说很重要,那么我知道 HDF 有一个并行实现,人们一直在努力改进它。我对 NetCDF 不是很确定。

后期编辑: 对于网络发展基金来说,现在有来自阿尔贡的 ABc0。它工作得非常好,开发团队也非常积极地进一步改进它。

我不得不承认,从长远来看,使用 HDF5要容易得多。将简单的数据结构转换为 NetCDF 格式并不困难,但是在将来操作它们是一种痛苦。

HDF5中的“ H”代表“层次结构”,它将(对我来说)转化为一种非常简单的操作数据的方法,只需移动节点并引用来自其他地方的节点。

我能问问这是什么项目吗?我使用这两者来完成许多 HPC 科学建模任务。我能假设你也在做同样的事吗?如果是这样的话,我看到的趋势是人们转向 HDF5,但是在你的特定领域可能会有所不同。

不管你最后去哪里,祝你好运!

我强烈建议您使用 HDF5而不是 NetCDF。NetCDF 是扁平的,如果你不能对东西进行分类,它会在一段时间后变得非常脏。当然,分类也是一个有争议的问题,但至少您拥有这种灵活性。

当我写 Q5Cost 的时候,我们对 HDF5和 NetCDF 进行了精确的评估,最终的结果是 HDF5。

NetCDF 从版本4.0(2008)开始,可以读写大多数 HDF5文件,并通过增强的数据模型提供对 HDF5分层特性的访问。

HDF5特性非常丰富,并且有一些很棒的性能特性。

NetCDF 有一个更简单的 API 和更广泛的工具库,有许多工具可以处理 netCDF 数据。

1) Netcdf-4 C 库是 HDF-5 C 库的上一层。API 被认为比 HDF5库更简单,但是最终你拥有几乎相同的功能。Netcdf 不支持图形,但 HDF5支持。事实上,我认为 HDF 并不能阻止图中的循环。

2) HDF 组在 HDF-5C 库的基础上增加了 JavaAPI。

3) Unidata 有 Netcdf-Java 库,它是纯 Java 的,但只能读取 HDF-5。

NetCDF 将 HDF5转换成它自己的数据模型,看起来和工作都很棒... ... 直到您发现 NetCDF 不支持无符号值!另请参阅 我的问题,了解如何使用 NetCDF 检测现有 HDF5文件中的无符号值。

更新: 实际上,尽管 NetCDF-3不支持有符号值,但 NetCDF-4支持有符号值,尽管 Java 中用于确定有符号性的 NetCDF API 是 有点复杂

我知道这是一个较老的帖子,原始的帖子已经表明他们已经向前看了,但是对于任何最终到达这里的人来说... netCDF-Java 库(截至4.3.13)已经通过 netCDF C 库支持 netCDF-4写。它仍然处于测试阶段,但它确实工作,反馈当然是赞赏的!

有关详细信息,请参阅 netCDF-Java参考文献文档。