我正在寻找一种方便的方式来存储和查询大量气象数据(几 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 中搜索,存储气象数据