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

igetnqfo  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(866)

我正在寻找一种方便的方法来存储和查询大量的气象数据(几tb)。更多关于问题中间数据类型的信息。
以前我一直在寻找mongodb的发展方向(我以前在很多项目中都使用它,处理起来很舒服),但是最近我发现了hdf5数据格式。读到这篇文章,我发现了与mongo的一些相似之处:
hdf5将文件结构简化为只包含两种主要类型的对象:数据集,它是同质类型组的多维数组,它是可以容纳数据集和其他组的容器结构这将产生一种真正分层的、类似文件系统的数据格式。元数据以附加到组和数据集的用户定义的命名属性的形式存储。
它看起来像mongo中的数组和嵌入对象,还支持用于查询数据的索引。
因为它使用b树来索引表对象,所以hdf5可以很好地处理时间序列数据,如股票价格序列、网络监测数据和3d气象数据。
数据:
特定区域被划分成更小的正方形。在每一个传感器的交叉点上(一个点)。

此传感器每x分钟收集以下信息:
太阳光度
风向和风速
湿度
以此类推(这些信息基本相同,有时传感器无法收集所有信息)
它还收集不同高度(0米、10米、25米)的数据。高度并不总是一样的。此外,每个传感器都有某种元信息:
名称
拉丁美洲,液化天然气
它在水里吗?还有很多其他的
因此,我不希望一个元素的大小超过1mb。另外,我在一个地方有足够的存储空间来保存所有数据(据我所知,不需要切分)
数据操作。有几种方法可以与数据交互:
转换为存储大量数据:在netcdf格式的某个时间点,很少有tb的数据会被提供给我,我需要存储它们(而且转换为hdf5相对容易)。然后,定期提供较小的数据部分(每周1 gb),我必须将它们添加到存储中。我要强调的是:我有足够的存储空间将所有这些数据保存在一台机器上。
查询数据。通常需要实时查询数据。最常见的查询是:告诉我特定时间特定区域的传感器温度,显示特定时间特定传感器的数据,显示给定时间范围内某个区域的风。聚合查询(过去两个月的平均温度是多少)的可能性很小。在这里,我认为mongo非常合适,但是hdf5+pytables是另一种选择。
进行一些统计分析。目前我不知道它到底是什么,但我知道这不应该是在一个实时的。所以我在想,将hadoop与mongo结合使用可能是一个不错的主意,但hdf5与r结合使用是一个合理的选择。
我知道关于更好的方法的问题是不鼓励的,但我正在寻找有经验的用户的建议。如果您有任何问题,我很乐意回答,并将感谢您的帮助。
p、 我回顾了一些有趣的讨论,类似于我的:hdf论坛,在hdf5中搜索,存储气象数据

0tdrvxhp

0tdrvxhp1#

如果将netcdf/hdf5加载到此阵列数据库对您来说不是问题,那么您可以尝试scidb。请注意,如果您的数据集非常大,那么数据加载阶段将非常耗时。恐怕这是所有数据库的问题。无论如何,scidb还提供了一个r包,它应该能够支持您需要的分析。
或者,如果您希望在不将hdf5转换为其他内容的情况下执行查询,可以在此处使用产品:http://www.cse.ohio-state.edu/~wayi/papers/hdf5_sql.pdf 此外,如果您想有效地执行选择查询,您应该使用索引;如果要实时(以秒为单位)执行聚合查询,可以考虑近似聚合。我们集团开发了一些产品来支持这些功能。
在统计分析方面,我认为答案取决于你分析的复杂性。如果你只需要计算熵或相关系数之类的东西,我们有产品可以实时计算。如果分析非常复杂和特别,您可以考虑使用scihadoop或scimate,它们可以在mapreduce框架中处理科学数据。但是,我不确定scihadoop目前是否可以直接支持hdf5。

u0sqgete

u0sqgete2#

这是一个很难回答的问题,我不确定是否能给出一个明确的答案,但我对hdf5/pytables和一些nosql数据库都有经验。
以下是一些想法。
hdf5本身没有索引的概念。它只是一种非常适合多维数字数据的分层存储格式。可以在hdf5之上扩展来实现数据的索引(即pytables、hdf5 fastquery)。
hdf5(除非您使用的是mpi版本)不支持并发写访问(可以进行读访问)。
hdf5支持压缩过滤器,与流行的观点不同,它可以使数据访问实际上更快(但是您必须考虑适当的块大小,这取决于您访问数据的方式)。
hdf5没有数据库。mongodb有酸性特性,hdf5没有(可能很重要)。
有一个结合了hadoop和hdf5的包(scihadoop)。
hdf5使核心计算相对容易(即,如果数据太大而无法放入内存)。
pytables使用numexpr直接在hdf5中支持一些快速的“内核内”计算
我认为你的数据通常很适合存储在hdf5中。你也可以在 R 或通过 Numpy/Scipy .
但你也可以考虑一辆hybdrid aproach。将原始大容量数据存储在hdf5中,并使用mongodb来存储元数据或缓存经常使用的特定值。

相关问题