关于NetCDF与HDF5存储科学数据的意见?




(5)

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

我已经使用过HDF5并希望通过Java进行读/写,但是接口本质上是C库的包装器,我发现这让人感到困惑,所以NetCDF看起来很吸引人,但我几乎一无所知。

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

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

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


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 有点复杂 。


从长远来看,我不得不承认使用HDF5非常容易。 将简单的数据结构变成NetCDF格式并不难,但是在未来操纵它们是一种痛苦。

HDF5中的“H”代表“heirarchical”,它通过仅移动节点并从其他地方引用节点,将(无论如何)转换为操作数据的简单方法。

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

但是你结束了,祝你好运!


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

延迟编辑:对于NetCDF,现在有来自Argonne的Parallel NetCDF 。 它运作良好,开发团队非常积极地进一步改进它。


我知道这是一篇较旧的帖子,原始海报表明他们已经开始了,但是对于那些最终在这里的人来说... netCDF-Java库(截至4.3.13)通过以下方式提供netCDF-4写入支持netCDF C库。 它仍处于测试阶段,但确实有效, feedback肯定会受到赞赏!

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