4

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

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

HDF5 将文件结构简化为仅包含两种主要类型的对象: 数据集,它们是同质类型的多维数组 组,它们是可以容纳数据集和其他组的容器结构 这产生了真正分层的、类似于文件系统的数据格式。元数据以附加到组和数据集的用户定义的命名属性的形式存储。

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

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

数据:

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

在此处输入图像描述

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

  • 太阳光度
  • 风的位置和风速
  • 湿度
  • 依此类推(这些信息大多相同,有时传感器不会收集所有信息)

它还针对不同的高度(0m、10m、25m)收集此信息。并非总是高度相同。此外,每个传感器都有某种元信息:

  • 姓名
  • 纬度,液化天然气
  • 是在水里吗,还有很多其他的

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

对数据的操作。 我将通过多种方式与数据交互:

  • 转换为存储大量数据:作为netcdf 格式的某个时间点,将向我提供几 TB 的数据,我将需要存储它们(将其转换为 HDF5 相对容易)。然后,将定期提供较小的数据部分(每周 1 Gb),我必须将它们添加到存储中。只是强调一下:我有足够的存储空间将所有这些数据保存在一台机器上。

  • 查询数据。通常需要实时查询数据。最常见的查询是:告诉我特定区域的传感器在特定时间的温度,显示特定传感器在特定时间的数据,显示给定时间范围内某个区域的风。聚合查询(过去两个月的平均温度是多少)极不可能。在这里,我认为 Mongo 非常合适,但 hdf5+ pytables是一种替代方案。

  • 进行一些统计分析。目前我不知道它到底是什么,但我知道这不应该是实时的。所以我在想将 hadoop 与 mongo 一起使用可能是一个好主意,但 hdf5 与R是一个合理的选择。

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

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

4

2 回答 2

13

这是一个困难的问题,我不确定我是否可以给出明确的答案,但我对 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
但是您也可以考虑一种混合方法。将原始批量数据存储在 HDF5 中,并将 MongoDB 用于元数据或缓存经常使用的特定值。

于 2013-06-04T16:39:33.040 回答
1

如果将 NetCDF/HDF5 加载到此阵列数据库中对您来说不是问题,您可以尝试 SciDB。请注意,如果您的数据集非常大,则数据加载阶段将非常耗时。恐怕这是所有数据库的问题。无论如何,SciDB 还提供了一个 R 包,它应该能够支持您需要的分析。

或者,如果您想在不将 HDF5 转换为其他内容的情况下执行查询,您可以在此处使用该产品:http ://www.cse.ohio-state.edu/~wayi/papers/HDF5_SQL.pdf 此外,如果您想有效地执行选择查询,你应该使用索引;如果要实时(以秒为单位)进行聚合查询,可以考虑近似聚合。我们小组已经开发了一些产品来支持这些功能。

在统计分析方面,我认为答案取决于您分析的复杂性。如果您只需要计算诸如熵或相关系数之类的东西,我们有产品可以实时完成。如果分析非常复杂和临时,您可以考虑 SciHadoop 或 SciMATE,它们可以在 MapReduce 框架中处理科学数据。但是,我不确定 SciHadoop 目前是否可以直接支持 HDF5。

于 2013-12-10T17:07:34.400 回答