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

Sal*_*ali 4 hadoop hdf5 mongodb pytables

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

以前我一直在寻找MongoDB的方向(我在之前的许多项目中使用它并且觉得很舒服),但最近我发现了HDF5数据格式.读到它,我发现与Mongo有一些相似之处:

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

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

因为它使用B树来索引表对象,所以HDF5适用于时间序列数据,例如股票价格序列,网络监控数据和3D气象数据.

数据:

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

在此输入图像描述

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

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

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

  • 名称
  • lat,lng
  • 它是在水中,还有许多其他的

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

对数据的操作. 我将通过以下几种方式与数据进行交互:

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

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

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

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

PS我回顾了一些有趣的讨论,类似于我的:hdf-forum,在hdf5中搜索,存储气象数据

Ümi*_*mit 11

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

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

我认为您的数据通常非常适合存储在HDF5中.您也可以在R或通过进行统计分析Numpy/Scipy.
但你也可以考虑一个hybdrid aproach.将原始批量数据存储在HDF5中,并将MongoDB用于元数据或缓存常用的特定值.