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

标签 mongodb hadoop hdf5 pytables

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

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

HDF5 simplifies the file structure to include only two major types of object: Datasets, which are multidimensional arrays of a homogenous type Groups, which are container structures which can hold datasets and other groups This results in a truly hierarchical, filesystem-like data format. Metadata is stored in the form of user-defined, named attributes attached to groups and datasets.

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

Because it uses B-trees to index table objects, HDF5 works well for time series data such as stock price series, network monitoring data, and 3D meteorological data.

数据:

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

enter image description here

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

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

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

  • 姓名
  • 经纬度
  • 它在水里吗,还有很多其他的

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

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

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

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

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

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

P.S 我回顾了一些有趣的讨论,类似于我的:hdf-forum , searching in hdf5 , storing meteorological data

最佳答案

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

  • HDF5 本身没有索引的概念。它只是一种分层存储格式,非常适合多维数值数据。可以在 HDF5 之上进行扩展以实现数据的索引(即 PyTables,HDF5 FastQuery)。
  • HDF5(除非您使用的是 MPI 版本)不支持并发写访问(可以进行读访问)。
  • HDF5 支持压缩过滤器,这与普遍的看法不同,它可以使数据访问实际上更快(但是您必须考虑适当的 block 大小,这取决于您访问数据的方式)。
  • HDF5 不是数据库。 MongoDB 具有 ACID 属性,HDF5 没有(可能很重要)。
  • 有一个包 ( SciHadoop ) 结合了 Hadoop 和 HDF5。
  • HDF5 使得进行核心计算变得相对容易(即如果数据太大而无法放入内存)。
  • PyTables 使用 numexpr 直接在 HDF5 中支持一些快速的“内核”计算

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

关于mongodb - 存储和查询气象数据大数据集的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907195/

相关文章:

javascript - MEAN堆栈中的动态html表单生成

hadoop - 将 csv 数据插入复杂的配置单元表

julia - 列出 julia 中 hdf5 文件的字段

node.js - 如何在 mongoose 中处理 mongoDB close

mongodb - 您将如何在 MongoDB 中建立友谊关系模型?

hadoop - Hortonworks HA Namenodes 给出错误 "Operation category READ is not supported in state standby"

file - 我可以将 hdf5 用于大量文本数据吗?

c - HDF5:复合数据类型写入包含指向另一个结构的指针的结构

Ruby super 不敏感的正则表达式,用于将学校名称与重音符号和其他变音符号匹配

java - 为什么 Iterable 没有义务在每次调用 iterator() 方法时都返回新的迭代器?