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

2024-03-16

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

之前我一直在寻找 MongoDB 的方向(我自己之前的很多项目都使用过它,而且处理起来很舒服),但最近我发现了HDF5 http://en.wikipedia.org/wiki/HDF5数据格式。阅读它,我发现它与 Mongo 有一些相似之处:

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

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

由于 HDF5 使用 B 树来索引表对象,因此它非常适合 股票价格序列、网络监控数据等时间序列数据, 和 3D 气象数据。

数据:

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

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

  • 太阳光度
  • 风向和风速
  • humidity
  • 等等(这些信息大部分是相同的,有时传感器不会收集所有信息)

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

  • name
  • lat, lng
  • 是在水中吗?还有很多其他的

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

对数据进行操作。我可以通过多种方式与数据交互:

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

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

  • 进行一些统计分析。目前我不知道它到底是什么,但我知道这不应该是实时的。所以我想使用 hadoop 和 mongo 可能是一个好主意,但是 hdf5 和R http://www.r-project.org/是一个合理的选择。

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

P.S 我回顾了一些有趣的讨论,与我的类似:HDF论坛 http://hdf-forum.184993.n3.nabble.com/mongodb-compared-to-HDF5-td4025922.html, 在 hdf5 中搜索 https://stackoverflow.com/questions/1686869/searching-a-hdf5-dataset, 存储气象数据 https://stackoverflow.com/questions/2605862/nosql-and-meteorological-data


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

  • HDF5 本身没有索引的概念。它只是一种非常适合多维数值数据的分层存储格式。可以在 HDF5 之上扩展以实现索引(即 PyTables、HDF5 快速查询 http://www-vis.lbl.gov/Events/SC05/HDF5FastQuery/)为数据。
  • HDF5(除非您使用 MPI 版本)不支持并发写入访问(可以进行读取访问)。
  • HDF5 支持压缩过滤器,与普遍的看法不同,它可以使数据访问实际上更快(但是您必须考虑适当的块大小,这取决于您访问数据的方式)。
  • HDF5 不是数据库。 MongoDB 具有 ACID 属性,HDF5 没有(可能很重要)。
  • 有一个包(科学Hadoop http://users.soe.ucsc.edu/~alkis/papers/sc11_scihadoop.pdf)结合了 Hadoop 和 HDF5。
  • HDF5 使得核心计算变得相对容易(即,如果数据太大而无法放入内存)。
  • PyTables 使用 HDF5 直接支持一些快速“内核”计算numexpr https://code.google.com/p/numexpr/

我认为您的数据通常非常适合存储在 HDF5 中。您还可以进行统计分析R or via Numpy/Scipy.
但您也可以考虑混合方法。将原始批量数据存储在 HDF5 中,并使用 MongoDB 来存储元数据或缓存经常使用的特定值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐