2

かなり大きなデータセット (30 ~ 40 GB) を定期的に処理する必要があります。時間 (およびより多くの情報) で並べ替えられた多くの値がありますが、基本的には月ごとにいくつかの数学的操作を実行する必要があります。

私たちの最初のアプローチは、MySQL データベースを使用してデータをバックアップすることでした。これは、エンジンとリレーショナル アプローチについて十分な経験があるためです。ただし、このプロセスには時間がかかりすぎるため、NoSQL アプローチで改善できるのではないかと考えていました。

基本的に、表現する必要があるデータは次のとおりです。

Value: { NumericalValue, Year, Month }
Entity: List of 'Value'

このリストを 3 回処理し、簡単な数学的操作を行います。「処理」と言うときは、データセットを反復処理して微積分を実行することを意味します。すべてが終了すると、同じ構造になります (ただし、データは異なります)。

Value: { NumericalValue, Year, Month }
Entity: List of 'Value'

いくつかの平均を計算する必要があり、それには多くの時間がかかるため、最大の問題が見つかったのは今です。このプロセスを何度か繰り返すと、最も消費量の多いタスクは次のようになると思います。

1) データセットを MySQL にエクスポートします。これは、テキスト ファイルからの大量の挿入を意味します。

データが変換されると、次のようになります。

2) LIMIT を使用して集計関数 (AVG、SUM) を含むいくつかのクエリを計算します。3) データセット全体で集計関数を含むいくつかのクエリを計算します。

通常、いくつかのインデックスを追加しても、時間がかかりすぎると感じます (一部のクエリで 20 分)。ヒントまたは解決戦略は非常に高く評価されます。NoSQL データベースはこれ専用に設計されていないと思いますが、いくつかの経験が役立つかもしれません :)。

御時間ありがとうございます、

4

1 に答える 1

3

あなたのタスクは、カラムナ データベースに非常によく適合します。列指向の NoSQL (Cassandra など) データベースは、データ テーブルをデータの行としてではなく、データの列のセクションとして格納します。これにより、集計の速度が大幅に向上します。これは、ストレージをハードディスクに依存するシステムに関係しています。これが当てはまらない場合 (例としてインメモリ データベース)、パフォーマンスを絞り出すためのより多くのオプションがあります。

于 2013-10-03T19:57:51.140 に答える