73

那里的任何人都有足够的使用 NetCDF 和 HDF5 的经验来提供一些关于它们作为存储科学数据的方式的优点/缺点?

我使用过 HDF5 并且想通过 Java 读/写,但该接口本质上是 C 库的包装器,我发现这很令人困惑,所以 NetCDF 看起来很有趣,但我对此几乎一无所知。

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

更新— 看起来NetCDF-Java从 netCDF-4 文件读取,但只从不支持分层组的 netCDF-3 文件写入。该死。

2009 年 7 月 14 日更新:我开始对 Java 中的 HDF5 感到非常不安。可用的库不是很好,它有一些与 Java 的抽象层(复合数据类型)有关的主要绊脚石。C 的一个很好的文件格式,但看起来我只是输了。>:(

4

7 回答 7

32

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

在我编写 Q5Cost 时,我们对 HDF5 与 NetCDF 进行了准确的评估,最终的结果是 HDF5 毫无悬念。

于 2009-07-15T12:09:31.580 回答
25

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

HDF5 中的“H”代表“层次结构”,它(无论如何对我来说)翻译成一种非常简单的数据操作方式,只需移动节点并从其他地方引用节点。

能问一下这是什么项目吗?我将它们都用于许多 HPC 科学建模任务。我可以假设你也在做同样的事情吗?如果是这样,我看到的趋势是人们转向 HDF5,但这在您的特定域中可能会有所不同。

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

于 2009-07-02T15:34:59.513 回答
21

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

HDF5 功能极其丰富,并具有一些出色的性能特性。

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

于 2011-07-18T10:43:36.243 回答
11

我知道这是一篇较旧的帖子,原始发帖人表示他们已经继续前进,但对于任何最终来到这里的人...... netCDF-Java 库(截至 4.3.13)通过 netCDF-4 写入支持netCDF C 库。它仍处于测试阶段,但它确实有效,并且非常感谢您的反馈

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

于 2013-05-26T15:03:53.100 回答
8

尝试在每个中编写一些小的示例应用程序,并比较体验。如果您的代码未来可扩展性以并行执行(通过 MPI 等)对您很重要,我知道 HDF 有一个并行实现,人们一直在努力改进它。我不确定 NetCDF。

后期编辑:对于 NetCDF,现在有来自 Argonne的Parallel NetCDF 。它工作得很好,开发团队非常积极地进一步改进它。

于 2009-07-02T15:34:10.513 回答
7

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

2) HDF 组在 HDF-5 C 库之上有一个 Java API。

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

于 2011-12-01T23:57:37.097 回答
-2

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

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

于 2013-04-30T22:35:08.430 回答