1

質問をする前に、私たちの問題について少し背景を説明します。

政府の歳入予測アプリケーションを開発しています。このアプリケーションでは、以前の収益に関するデータを収集し、データベースに保持しながら、いくつかの計量経済学的および政治的予測モデルを (いくつかのフェーズを通じて) 適用します。

つまり、これは投影システムの単純化されたモデルです。

このスキーマを使用した数行 (最初は ~6.000 行) は、過去の収益 (シナリオと呼ばれます) を表します。

+------+------+------+------+------+-------+---------+
| Cat1 | Cat2 | Cat3 | Cat4 | Year | Month | Revenue |
+------+------+------+------+------+-------+---------+

プロジェクション システム全体で、データはいくつかの方法で変換されます (カテゴリの移動、収益値の変更、非定型性の修正など)。各変換はフェーズで行われます。

Initial Scenario (S0) ---(1st transformation phase)--> Transformed Scenario (S1)
S1 ---(2nd t.p.)--> S2 ---> S3 ---...---> SN

各フェーズはシナリオの一部を変換します。この部分のサイズはデータの 2 ~ 100% で変化します。部分的なシナリオの状態は、最終状態 (SN) が達成されるまで保持する必要があります。部分的な状態は、変換された行のみまたは部分的なシナリオ全体にすることができます (部分的な状態を比較できる限り)。

また、ユーザーはプロセスに戻り (たとえば、フェーズ 2 に戻る)、そこからプロジェクションを再開し、以前に行われた作業を無視することができます。

この使用例では、RDBMS の問題に直面しました。書き込み操作が非常に遅い (シナリオの予測を行うのに 30 分もかかる)。

NoSQL DBMS について読んだ後、いくつかの選択肢にたどり着きましたが、私はまだ学習曲線の途中なので、質問したいと思います: このユースケースで使用するのに最適な選択肢は何ですか: VoltDB、Redis、Riak、Cassandra、 MongoDB または HBase?

前もって感謝します。

4

1 に答える 1

2

MongoDB の観点から私のソリューションを紹介します。他のデータベースからの経験を他の人が追加できるかもしれません。

Mongo には、データに対して非常に複雑なクエリを実行できる map/reduce フレームワークがあります。map/reduce の優れた点は、結果をデータベースのコレクション (RDBMS のテーブルに類似) に出力できることです。

したがって、次のようになります。

  1. map/reduce ジョブ 1 を実行 => コレクション A に出力します。
  2. コレクション A に対して map/reduce ジョブ 2 を実行 => コレクション B に出力します。
  3. コレクション B に対して map/reduce ジョブ 3 を実行 => コレクション C に出力します。
  4. ...
  5. 利益!

各ステップでは、永続化されたデータ セットが生成されます。これにより、中断したところから再開できます。もちろん、完了後にクリーンアップする必要がありますが、うまくいく可能性があります。

私は Hadoop の専門家ではありませんが、あなたのシナリオは彼らのエコシステムにぴったりのように思えました。中間出力を使用して段階的に複雑なジョブを実行する。

于 2013-03-14T22:46:31.247 に答える