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