我正在寻找一种方便的方式来存储和查询大量的气象数据(几TB)。有关问题中间数据类型的更多信息。
之前我一直在寻找MongoDB的方向(我之前在很多项目中都使用过它,并且很乐意处理它),但最近我发现了HDF5数据格式。读到它,我发现与Mongo有一些相似之处:
HDF5简化了文件结构,只包含两种主要类型 object:数据集,它是同质的多维数组 类型组,它是可以保存数据集的容器结构 和其他组这导致真正的分层,类文件系统 数据格式。元数据以用户定义的名称存储 附加到组和数据集的属性。
它看起来像Mongo中的数组和嵌入对象,并且它还支持用于查询数据的索引。
因为它使用B树来索引表对象,所以HDF5很适合 时间序列数据,如股票价格系列,网络监测数据, 和三维气象数据。
数据:
特定区域分为较小的方块。在每个传感器的交叉点上(一个点)。
此传感器每隔X分钟收集以下信息:
它也可以收集不同高度(0m,10m,25m)。并不总是高度相同。此外,每个传感器都有某种元信息:
给出这个,我不认为一个元素的大小大于1Mb。 此外,我在一个地方有足够的存储空间来保存所有数据(据我所知,不需要分片)
使用数据进行操作。 我将通过以下几种方式与数据进行交互:
转换为商店大量的数据:netcdf format中的某些时间点会给我很少的TB数据,我需要存储它们(转换它相对容易) HDF5)。然后,将提供周期性较小的数据部分(每周1 Gb),我必须将它们添加到存储中。只是为了强调:我有足够的存储空间来将所有这些数据保存在一台机器上。
查询数据。通常需要实时查询数据。经常查询的大多数是:告诉我特定时间内特定区域的传感器温度,向我显示特定时间内特定传感器的数据,在给定时间范围内显示某些区域的风。汇总查询(过去两个月的平均温度)是不太可能的。在这里,我认为Mongo非常适合,但hdf5 + pytables是另一种选择。
进行一些统计分析。目前我不知道究竟是什么,但我知道这不应该是实时的。因此我认为使用带有mongo的hadoop可能是一个不错的主意,但带有R的hdf5是一个合理的选择。
我知道不鼓励有关更好方法的问题,但我正在寻找有经验的用户的建议。如果您有任何疑问,我很乐意回答他们,并感谢您的帮助。
P.S我回顾了一些与我类似的有趣讨论:hdf-forum,searching in hdf5,storing meteorological data
答案 0 :(得分:10)
这是一个很难的问题,我不确定我是否可以给出明确的答案,但我对HDF5 / pyTables和一些NoSQL数据库都有经验。
这是一些想法。
我认为您的数据通常非常适合存储在HDF5中。您也可以在R
或Numpy/Scipy
进行统计分析
但你也可以考虑一个hybdrid aproach。将原始批量数据存储在HDF5中,并将MongoDB用于元数据或缓存常用的特定值。
答案 1 :(得分:1)
如果将NetCDF / HDF5加载到此阵列数据库中对您来说不是问题,可以尝试使用SciDB。请注意,如果您的数据集非常大,则数据加载阶段将非常耗时。我担心这对所有数据库都是一个问题。无论如何,SciDB还提供了一个R包,它应该能够支持你需要的分析。
或者,如果您想在不将HDF5转换为其他内容的情况下执行查询,可以在此处使用该产品:http://www.cse.ohio-state.edu/~wayi/papers/HDF5_SQL.pdf 此外,如果要有效地执行选择查询,则应使用index;如果要实时(以秒为单位)执行聚合查询,可以考虑近似聚合。我们小组开发了一些产品来支持这些功能。
在统计分析方面,我认为答案取决于分析的复杂性。如果您只需要计算熵或相关系数等内容,我们就会有实时产品。如果分析非常复杂且非常特殊,您可以考虑使用SciHadoop或SciMATE,它可以处理MapReduce框架中的科学数据。但是,我不确定SciHadoop目前是否可以直接支持HDF5。