我有关于HDF5性能和并发性的以下问题:
参考文献:
我们正在评估我们将用于存储我们在分析C/C++代码期间收集的数据的技术.在C++的情况下,数据量可能相对较大,每TU约20Mb.
阅读以下SO 答案后,我认为HDF5可能是我们使用的合适技术.我想知道这里的人是否可以帮我回答一些我提出的初步问题:
性能.数据的一般用法是一次写入并读"几次",类似于编译器生成的'.o'文件的生命周期.HDF5如何与使用像SQLite DB这样的东西进行比较?这甚至是一个合理的比较吗?
随着时间的推移,我们将添加我们正在存储的信息,但不一定要重新分发一组全新的"读者"以支持新格式.在阅读用户指南后,我了解到HDF5与XML或DB类似,因为信息与标签/列相关联,因此构建用于读取旧结构的工具只会忽略它不关心的字段?我对此的理解是否正确?
我们希望写出的一大部分信息将是树类型的结构:范围层次结构,类型层次结构等.理想情况下,我们会将范围建模为具有父项,子项等.是否可以将一个HDF5对象设为"点"到另一个?如果没有,是否有使用HDF5解决此问题的标准技术?或者,根据数据库的要求,我们是否需要一个唯一的密钥,在搜索数据时,将一个对象"链接"到另一个对象并进行适当的查找?
非常感谢!
我正在寻找一种方便的方式来存储和查询大量的气象数据(几TB).有关问题中间数据类型的更多信息.
以前我一直在寻找MongoDB的方向(我在之前的许多项目中使用它并且觉得很舒服),但最近我发现了HDF5数据格式.读到它,我发现与Mongo有一些相似之处:
HDF5简化了文件结构,只包括两种主要类型的对象:数据集,它是同类型组的多维数组,它们是容器结构,可以容纳数据集和其他组.这导致真正的分层,类文件系统数据格式.元数据以附加到组和数据集的用户定义的命名属性的形式存储.
它看起来像Mongo中的数组和嵌入对象,并且它还支持用于查询数据的索引.
因为它使用B树来索引表对象,所以HDF5适用于时间序列数据,例如股票价格序列,网络监控数据和3D气象数据.
数据:
特定区域分为较小的方块.在每个传感器的交叉点上(一个点).

该传感器每隔X分钟收集以下信息:
它还收集不同高度(0米,10米,25米).并不总是高度相同.此外,每个传感器都有某种元信息:
给出这个,我不希望一个元素的大小大于1Mb.此外,我在一个地方有足够的存储空间来保存所有数据(据我所知,不需要分片)
对数据的操作. 我将通过以下几种方式与数据进行交互:
转换为商店大量的数据:在netcdf格式的某些时间点,我会给我很少的TB数据,我需要存储它们(并且将它转换为相对容易的HDF5).然后,将提供周期性较小的数据部分(每周1 Gb),我必须将它们添加到存储中.只是为了强调:我有足够的存储空间来将所有这些数据保存在一台机器上.
查询数据.通常需要实时查询数据.通常的查询大多数是:告诉我特定时间内特定区域的传感器温度,向我显示特定时间内特定传感器的数据,并显示给定时间范围内某些区域的风.汇总查询(过去两个月的平均温度)是不太可能的.在这里我认为Mongo非常合适,但hdf5 + pytables是另一种选择.
进行一些统计分析.目前我不知道究竟是什么,但我知道这不应该是实时的.因此我认为使用带有mongo的hadoop可能是一个不错的主意但是带有R的 hdf5 是一个合理的选择.
我知道不鼓励有关更好方法的问题,但我正在寻找有经验的用户的建议.如果您有任何问题,我很乐意回答他们,并感谢您的帮助.