NetCDF vs HDF5关于存储科学数据的意见?
在NetCDF和HDF5中,谁有足够的经验来提供一些关于他们的优缺点作为存储科学数据的方式?
我已经使用了HDF5,并希望通过Java读取/写入,但是接口基本上是C库的一个包装,这让我感到困惑,所以NetCDF似乎很有趣,但是我几乎一无所知。
编辑:我的应用程序是“唯一”的数据logging,以便我得到一个自描述格式的文件。 对于我来说重要的function是能够添加任意的元数据,具有快速写入访问字节数组,并具有单写/多读者并发性(强烈偏好,但不是必须有.NetCDF文档说,他们有SWMR,但不不说他们是否支持确保两位作者不能同时打开同一个文件的任何机制,并带来灾难性后果)。 我喜欢HDF5的层次结构(特别是我喜欢有向无环图层次结构,比“常规”文件系统层次结构更灵活),现在正在阅读NetCDF文档…如果它只允许每个数据集文件然后它可能不会为我工作。 🙁
更新 – 看起来像NetCDF-Java从netCDF-4文件读取,但只能从不支持分层组的netCDF-3文件写入。 织补。
更新2009年7月14日 :我开始对Java中的HDF5感到非常不安。 可用的库不是很好,它有一些与Java的抽象层(复合数据types)有关的主要障碍。 C的一个很好的文件格式,但看起来像我只是输了。 > 🙁
我强烈build议你使用HDF5而不是NetCDF。 NetCDF是平坦的,如果你不能分类的东西,它会在一段时间后变得非常肮脏。 当然分类也是一个争论的问题,但至less你有这个灵活性。
当我写Q5Cost时,我们对HDF5与NetCDF进行了精确的评估,最后的结果是HDF5下手。
我不得不承认,从长远来看,使用HDF5是非常容易的。 将简单的数据结构转化为NetCDF格式并不难,但是在路上操纵它们是一种痛苦。
HDF5中的“H”代表“heirarchical”,通过仅仅移动节点并引用其他地方的节点,(无论如何)将它翻译成操作数据的一个非常简单的方法。
我可以问这是什么样的项目吗? 我将这些用于大量的HPC科学build模任务。 我可以假设你也一样吗? 如果是这样,我所看到的趋势是人们转向HDF5,但是在你的特定领域可能会有所不同。
然而,你最终会走,祝你好运!
从版本4.0(2008)开始的NetCDF可以读取和写入大多数HDF5文件,并通过增强的数据模型提供对HDF5分层function的访问。
HDF5function非常丰富,具有一些很好的性能特点。
NetCDF具有更简单的API和更广泛的工具基础。 有很多工具可以处理netCDF数据。
试着写一些小样本的应用程序,并比较经验。 如果将代码的并行执行(通过MPI之类)的未来可伸缩性对您来说很重要,那么我知道HDF有一个并行的实现,人们一直在努力改进。 我不确定NetCDF。
延迟编辑:对于NetCDF,现在有来自Argonne的Parallel NetCDF 。 它工作得很好,开发团队在进一步改进方面相当积极。
我知道这是一个较旧的post,原来的海报已经表明他们已经移动,但对于任何最终在这里… netCDF-Java库(从4.3.13)有netCDF-4写支持通过netCDF C库。 它仍处于testing阶段,但确实有用, 反馈肯定是值得赞赏的!
有关更多详细信息,请参阅netCDF-Java 参考文档。
1)Netcdf-4 C库是HDF-5 C库之上的一个图层。 API被认为比HDF5库简单,但最后你有几乎相同的function。 Netcdf不支持graphics,但HDF5。 事实上,HDF不会阻止我认为你的图中的周期。
2)HDF组在HDF-5 C库之上有一个Java API。
3)Unidata有纯Java的Netcdf-Java库,但只能读HDF-5。
NetCDF将HDF5转换成自己的数据模型,看起来效果很好, 直到你发现NetCDF不支持无符号值 ! 另请参阅我的问题 ,了解如何使用NetCDF检测现有HDF5文件中的无符号值。
更新:实际上,尽pipeNetCDF-3不支持有符号值,但是NetCDF-4支持有符号值,即使Java中用于确定符号的NetCDF API 有点复杂 。