【发布时间】:2010-11-07 16:28:05
【问题描述】:
有没有人有足够的使用 NetCDF 和 HDF5 的经验来提供一些关于它们作为存储科学数据的方式的优点/缺点?
我使用过 HDF5 并希望通过 Java 进行读/写,但该接口本质上是 C 库的包装器,我觉得这很令人困惑,因此 NetCDF 看起来很有趣,但我对此几乎一无所知。
编辑:我的应用程序“仅”用于数据记录,因此我得到了一个具有自描述格式的文件。对我来说重要的功能是能够添加任意元数据,具有快速写入访问以附加到字节数组,并具有单写入器/多读取器并发(强烈推荐但不是必须的。NetCDF 文档说他们有 SWMR 但不要'不要说他们是否支持任何机制来确保两个作者不能同时打开同一个文件并导致灾难性的结果)。我喜欢 HDF5 的层次结构(特别是我喜欢有向无环图层次结构,比“常规”文件系统的层次结构灵活得多),现在正在阅读 NetCDF 文档...如果每个文件只允许一个数据集,那么它可能对我不起作用。 :(
update — 看起来 NetCDF-Java 从 netCDF-4 文件读取,但只从不支持分层组的 netCDF-3 文件写入。该死。
2009 年 7 月 14 日更新:我开始对 Java 中的 HDF5 感到非常不满。可用的库不是很好,它有一些与 Java 的抽象层(复合数据类型)有关的主要绊脚石。 C 的一个很好的文件格式,但看起来我只是输了。 >:(
【问题讨论】:
-
后记:HDF5 在 Python 中使用 PyTables 比在 Java 中更容易使用。
-
不幸的是,对于 Java 用户,netCDF 和 HDF5 都是用 C 开发的,主要是为 C 或 Fortran 用户开发的。大多数其他 API,如 Python,都构建在 C 层之上。)
-
@EdwardHartnett -- 我不认同这个论点。当然,这意味着您不会免费获得任何好的 Java 功能,但是人们已经冒险在 Python 中创建有用的 API。没有理由有人不能在 Java 中做到这一点。 (实际上,当我在 2009 年发布这个问题时,我自己在一家前公司做了这件事——在很小程度上——但我无权访问该代码。)