4

I am looking for a convenient way to store and to query huge amount of meteorological data (few TB). More information about the type of data in the middle of the question.

Previously I was looking in the direction of MongoDB (I was using it for many of my own previous projects and feel comfortable dealing with it), but recently I found out about HDF5 data format. Reading about it, I found some similarities with 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.

Which looks like arrays and embedded objects in Mongo and also it supports indices for querying the data.

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.

The data:

Specific region is divided into smaller squares. On the intersection of each one of the the sensor is located (a dot).

enter image description here

This sensor collects the following information every X minutes:

  • solar luminosity
  • wind location and speed
  • humidity
  • and so on (this information is mostly the same, sometimes a sensor does not collect all the information)

It also collects this for different height (0m, 10m, 25m). Not always the height will be the same. Also each sensor has some sort of metainformation:

  • name
  • lat, lng
  • is it in water, and many others

Giving this, I do not expect the size of one element to be bigger than 1Mb. Also I have enough storage at one place to save all the data (so as far as I understood no sharding is required)

Operations with the data. There are several ways I am going to interact with a data:

  • convert as store big amount of it: Few TB of data will be given to me as some point of time in netcdf format and I will need to store them (and it is relatively easy to convert it HDF5). Then, periodically smaller parts of data (1 Gb per week) will be provided and I have to add them to the storage. Just to highlight: I have enough storage to save all this data on one machine.

  • query the data. Often there is a need to query the data in a real-time. The most of often queries are: tell me the temperature of sensors from the specific region for a specific time, show me the data from a specific sensor for specific time, show me the wind for some region for a given time-range. Aggregated queries (what is the average temperature over the last two months) are highly unlikely. Here I think that Mongo is nicely suitable, but hdf5+pytables is an alternative.

  • perform some statistical analysis. Currently I do not know what exactly it would be, but I know that this should not be in a real time. So I was thinking that using hadoop with mongo might be a nice idea but hdf5 with R is a reasonable alternative.

I know that the questions about better approach are not encouraged, but I am looking for an advice of experienced users. If you have any questions, I would be glad to answer them and will appreciate your help.

P.S I reviewed some interesting discussions, similar to mine: hdf-forum, searching in hdf5, storing meteorological data

4

2 に答える 2

13

難しい質問です。明確な答えを出せるかどうかはわかりませんが、HDF5/pyTables といくつかの NoSQL データベースの両方の経験があります。
ここにいくつかの考えがあります。

  • HDF5 自体には、インデックスの概念はありません。これは、多次元数値データに適した唯一の階層ストレージ形式です。HDF5 の上に拡張して、データのインデックス (PyTables、HDF5 FastQuery など) を実装することができます。
  • HDF5 (MPI バージョンを使用している場合を除く) は、同時書き込みアクセスをサポートしていません (読み取りアクセスは可能です)。
  • HDF5 は、一般的な考えとは異なり、データ アクセスを実際に高速化できる圧縮フィルターをサポートしています (ただし、データへのアクセス方法に応じて、適切なチャンク サイズを考慮する必要があります)。
  • HDF5 はデータベースではありません。MongoDB には ACID プロパティがありますが、HDF5 にはありません (重要かもしれません)。
  • Hadoop と HDF5 を組み合わせたパッケージ ( SciHadoop ) があります。
  • HDF5 を使用すると、コア計算を比較的簡単に実行できます (つまり、データが大きすぎてメモリに収まらない場合)。
  • PyTables は、 numexprを使用して HDF5 で直接「カーネル内」の高速計算をサポートします。

あなたのデータは一般的に HDF5 に保存するのに適していると思います。Rまたは を介し​​て統計分析を行うこともできますNumpy/Scipy
しかし、ハイブリッドなアプローチも考えられます。生のバルク データを HDF5 に保存し、MongoDB を使用して、メタデータまたは頻繁に使用される特定の値をキャッシュします。

于 2013-06-04T16:39:33.040 に答える
1

NetCDF/HDF5 をこの配列データベースにロードすることが問題にならない場合は、SciDB を試すことができます。データセットが非常に大きい場合、データの読み込みフェーズに非常に時間がかかることに注意してください。残念ながら、これはすべてのデータベースの問題です。とにかく、SciDB は R パッケージも提供しており、必要な分析をサポートできるはずです。

または、HDF5 を別のものに変換せずにクエリを実行したい場合は、こちらの製品を使用できます : http://www.cse.ohio-state.edu/~wayi/papers/HDF5_SQL.pdf選択クエリを効率的に実行するには、インデックスを使用する必要があります。リアルタイム (秒単位) で集計クエリを実行する場合は、近似集計を検討できます。私たちのグループは、それらの機能をサポートするいくつかの製品を開発しました。

統計分析に関しては、答えは分析の複雑さに依存すると思います。エントロピーや相関係数などを計算するだけなら、リアルタイムで実行できる製品があります。分析が非常に複雑でアドホックな場合は、MapReduce フレームワークで科学データを処理できる SciHadoop または SciMATE を検討できます。ただし、SciHadoop が現在 HDF5 を直接サポートできるかどうかはわかりません。

于 2013-12-10T17:07:34.400 に答える