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

我已经使用过 HDF5,并且想通过 Java 进行读/写,但该接口本质上是 C 库的包装器,我发现它令人困惑,因此 NetCDF 似乎很有趣,但我对此几乎一无所知。

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

更新 - 好像 NetCDF-Java 从 netCDF-4 文件读取,但仅从不支持分层组的 netCDF-3 文件写入。该死的。

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

有帮助吗?

解决方案

我强烈建议你HDF5代替的NetCDF。的NetCDF是平坦的,如果你不能归类的东西了一段时间后它会非常脏。当然分类也是见仁见智的问题,但至少你有这样的灵活性。

我们进行HDF5的准确评估对的NetCDF当我写Q5Cost,而最终的结果是为HDF5手了。

其他提示

我将不得不使用HDF5是从长远来看非常容易认错。不难得到简单的数据结构到创建NetCDF格式,但操纵他们下山的路是一种痛苦。

在“H”在HDF5代表“heirarchical”,其翻译(对我反正)成非常简单的方法来操作数据,通过只来回移动节点和从其他地方引用的节点。

我能问这个什么样的项目是什么?我使用这些都进行了大量的HPC科学建模任务。我可以假设你正在做的一样吗?如果是这样,我看到的趋势是人们搬到HDF5,但可能是在您的特定领域有所不同。

然而,你最终会,好运!

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

HDF5是非常功能丰富,并拥有一些伟大的性能特点。

的NetCDF具有更简单的API,以及更广泛的工具基部。有迹象表明,处理NetCDF数据的工具。

我知道这是一个老帖子,和原来的海报已表示,他们已经移动了,但任何人在这里结束了......在的netCDF-Java库(如4.3.13)拥有的netCDF-4的写通过的netCDF C库的支持。它仍处于测试阶段,但它的工作和意见肯定是赞赏!

请参阅文档的的netCDF的Java 参考更多的细节。

1)的netCDF-4 C库是在HDF-5 C库的顶部上的层。 API被认为比HDF5库简单,但最终你有几乎相同的功能。创建NetCDF不支持图表,但HDF5呢。事实上,HDF不会阻止循环在图形中,我认为。

2)HDF组对HDF-5 C库的顶部的Java API。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top