那里的任何人都有足够的经验w / NetCDF和HDF5给出一些关于它们的优缺点作为存储科学数据的方式?
我已经使用过HDF5并想通过Java进行读/写,但是接口本质上是C库的包装器,我发现这让人感到困惑,所以NetCDF看起来很有趣,但我对它几乎一无所知。
编辑:我的应用程序“仅”用于数据记录,因此我获得了一个具有自描述格式的文件。对我来说,重要的功能是能够添加任意元数据,具有快速写入访问权限以附加到字节数组,以及具有单写入器/多读取器并发(强烈首选但不是必须的.NetCDF文档说他们有SWMR但是没有不能说它们是否支持任何机制来确保两个作者不能同时打开同一个文件并带来灾难性后果。我喜欢HDF5的层次化方面(特别是我喜欢有向非循环图层次结构,比“常规”文件系统式层次结构更灵活),现在正在阅读NetCDF文档...如果它只允许每个文件一个数据集,那么它可能对我不起作用。 :(
更新 - 看起来像NetCDF-Java从netCDF-4文件读取,但只从不支持分层组的netCDF-3文件写入。织补。
更新2009年7月14日:我开始对Java中的HDF5感到非常不满。可用的库不是很好,它有一些与Java的抽象层(复合数据类型)有关的主要障碍。 C的一个很好的文件格式,但看起来我只是输了。 >:(
答案 0 :(得分:29)
我强烈建议您使用HDF5而不是NetCDF。 NetCDF是平的,如果你不能对东西进行分类,它会在一段时间后变得非常脏。当然,分类也是一个争论的问题,但至少你有这种灵活性。
当我写Q5Cost时,我们对HDF5与NetCDF进行了准确的评估,最终的结果是用于HDF5。
答案 1 :(得分:22)
从长远来看,我不得不承认使用HDF5非常容易。将简单的数据结构变成NetCDF格式并不难,但是在未来操纵它们是一种痛苦。
HDF5中的“H”代表“heirarchical”,它通过仅移动节点并从其他地方引用节点,将(无论如何)转换为操作数据的简单方法。
我可以问这是一个什么样的项目?我将它们用于许多HPC科学建模任务。我可以假设你也这样做吗?如果是这样,我看到的趋势是人们转向HDF5,但在您的特定领域可能会有所不同。
但是你结束了,祝你好运!
答案 2 :(得分:15)
HDF5功能非常丰富,并且具有一些出色的性能。
NetCDF具有更简单的API和更广泛的工具库。有许多工具可以处理netCDF数据。
答案 3 :(得分:9)
我知道这是一篇较旧的帖子,原始海报已经表明他们已经开始了,但是对于那些最终在这里的人来说... netCDF-Java库(截至4.3.13)有netCDF-4写通过netCDF C库提供支持。它仍然处于测试阶段,但确实有效,feedback肯定受到赞赏!
有关详细信息,请参阅netCDF-Java reference文档。
答案 4 :(得分:8)
尝试在每个中编写一些小样本应用程序,并比较经验。如果你的代码未来可扩展到并行执行(通过MPI等)对你很重要,我知道HDF有一个并行实现,人们不断努力改进。我不确定NetCDF。
延迟编辑:对于NetCDF,现在有来自Argonne的Parallel NetCDF。它工作得很好,开发团队非常积极地进一步改进它。
答案 5 :(得分:6)
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。
答案 6 :(得分:-2)
NetCDF将HDF5转换为自己的数据模型,看起来效果很好...... until you find out that NetCDF doesn't support unsigned values!另请参阅my question有关如何使用NetCDF检测现有HDF5文件中的无符号值的信息。
更新:实际上,虽然NetCDF-3不支持有符号值,但NetCDF-4支持有符号值,即使用于确定签名的Java中的NetCDF API为{{3 }}