什么是存储和查询大气象数据数据集的更好方法

时间:2013-06-03 22:58:55

标签: mongodb hadoop hdf5 pytables

我正在寻找一种方便的方式来存储和查询大量的气象数据(几TB)。有关问题中间数据类型的更多信息。

之前我一直在寻找MongoDB的方向(我之前在很多项目中都使用过它,并且很乐意处理它),但最近我发现了HDF5数据格式。读到它,我发现与Mongo有一些相似之处:

  

HDF5简化了文件结构,只包含两种主要类型   object:数据集,它是同质的多维数组   类型组,它是可以保存数据集的容器结构   和其他组这导致真正的分层,类文件系统   数据格式。元数据以用户定义的名称存储   附加到组和数据集的属性。

它看起来像Mongo中的数组和嵌入对象,并且它还支持用于查询数据的索引。

  

因为它使用B树来索引表对象,所以HDF5很适合   时间序列数据,如股票价格系列,网络监测数据,   和三维气象数据。

数据:

特定区域分为较小的方块。在每个传感器的交叉点上(一个点)。

enter image description here

此传感器每隔X分钟收集以下信息:

  • 太阳光度
  • 风的位置和速度
  • 湿度
  • 等(此信息大致相同,有时传感器不会收集所有信息)

它也可以收集不同高度(0m,10m,25m)。并不总是高度相同。此外,每个传感器都有某种元信息:

  • 名称
  • lat,lng
  • 是在水中,还有很多其他人

给出这个,我不认为一个元素的大小大于1Mb。 此外,我在一个地方有足够的存储空间来保存所有数据(据我所知,不需要分片)

使用数据进行操作。 我将通过以下几种方式与数据进行交互:

  • 转换为商店大量的数据:netcdf format中的某些时间点会给我很少的TB数据,我需要存储它们(转换它相对容易) HDF5)。然后,将提供周期性较小的数据部分(每周1 Gb),我必须将它们添加到存储中。只是为了强调:我有足够的存储空间来将所有这些数据保存在一台机器上。

  • 查询数据。通常需要实时查询数据。经常查询的大多数是:告诉我特定时间内特定区域的传感器温度,向我显示特定时间内特定传感器的数据,在给定时间范围内显示某些区域的风。汇总查询(过去两个月的平均温度)是不太可能的。在这里,我认为Mongo非常适合,但hdf5 + pytables是另一种选择。

  • 进行一些统计分析。目前我不知道究竟是什么,但我知道这不应该是实时的。因此我认为使用带有mongo的hadoop可能是一个不错的主意,但带有R的hdf5是一个合理的选择。

我知道不鼓励有关更好方法的问题,但我正在寻找有经验的用户的建议。如果您有任何疑问,我很乐意回答他们,并感谢您的帮助。

P.S我回顾了一些与我类似的有趣讨论:hdf-forumsearching in hdf5storing meteorological data

2 个答案:

答案 0 :(得分:10)

这是一个很难的问题,我不确定我是否可以给出明确的答案,但我对HDF5 / pyTables和一些NoSQL数据库都有经验。
这是一些想法。

  • HDF5本身没有索引概念。它只是一种分层存储格式,非常适合多维数字数据。可以在HDF5之上进行扩展,以实现数据的索引(即PyTables,HDF5 FastQuery)。
  • HDF5(除非您使用的是MPI版本)不支持并发写访问(可以进行读访问)。
  • HDF5支持压缩过滤器,它可以 - 不像流行的看法 - 使数据访问实际上更快(但是你必须考虑适当的块大小,这取决于你访问数据的方式)。
  • HDF5不是数据库。 MongoDB有ACID属性,HDF5没有(可能很重要)。
  • 有一个包(SciHadoop),它结合了Hadoop和HDF5。
  • HDF5使核心计算相对容易(即,如果数据太大而无法放入内存)。
  • PyTables使用numexpr
  • 直接在HDF5中支持一些快速“内核”计算

我认为您的数据通常非常适合存储在HDF5中。您也可以在RNumpy/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。