2011-10-26 1 views
6

現在、MapReduceを使用してSQL Serverで増分ビュービルドを維持する可能性を検討しています。MapReduceをデータソースとしてSQL Serverを使用

基本的に、MapReduceを使用してマテリアライズド・ビューを作成します。

私は少し気がついています。私のmap出力をどのように分割するか考えています。さて、BigDataの状況は実際にはありません。最大で約50 GBですが、複雑さが増し、パフォーマンスに問題があります。私は、このMapReduce/NoSQLのアプローチがうまくいくかどうかを見たいと思います。

MapReduceについて私は現在、私の問題をパーティション化しています。私はSQL Serverをデータソースとして使用しているため、データのローカリティは実際に私の問題ではないため、データをすべて送信する必要はなく、各作業者がデータのパーティションを取得できる必要がありますmap定義のベース。

私はLINQとEntity Frameworkのようなものを使ってデータを完全にマップする予定ですが、使い慣れたインターフェイスを提供するだけですが、これはややポイントですが、私が検討している現在のルートです。

今、データを分割するにはどうすればよいですか?私はプライマリキーを持っていますが、表現木(AST、あなたがLINQに精通していない場合)に関して、mapreduceという定義があります。

  • まず、どのように私は私が入力全体を分割し、最初の問題(私は、このようなROW_NUMBERTILEとしてSQL Serverでのウィンドウの集合体を活用することができるはずと思っています)を分割するための方法を考案します。

  • 第二に、もっと重要なのは、私がこれを徐々に行うことをどうやって確認するのですか?つまり、元の問題を追加するか、または元の問題に変更を加えると、実行する必要がある再計算の量を最小限に抑えるための効果的な方法をどのように効果的に確保できますか?

私はインスピレーションのためのCouchDBを見てきたし、彼らがこれを行う方法を持っているように見えるが、どのように私は、SQL Serverを使用して、その良さの一部を活用していますか?

+0

このCouchDBはどのように関係していますか?マップリダクションのため? –

+0

はい、あなたはそれについてここで読むことができます:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Basics –

答えて

1

私は似たようなものに直面しています。私はあなたのプロセスをシリアル化するので、関数のウィンドウを忘れるべきだと思います。つまり、すべてのワーカーがクエリを待つことになります。

私たちがテストしたことは、データをより多くのテーブルに分割して(毎月xテーブルがある)、そのようなパーティションで別々の分析スレッドを実行することです。リデュース後に処理済/未処理/おそらく不良/その他のデータをマークしています。 1つのパーティションテーブルと

テストは、あなたは間違いなくあなたの現在のソリューションにもう少し複雑さを追加します。..ロック・エスカレーションの問題として

をもたらしました。

+0

複雑さがあるレベルで管理されている限り、私はそれに反していない、合理的な考えのように聞こえる。私は現在、非同期に処理できるキューを定義する手段としてSQL通知を調査しています。 –

+0

私たち自身のアプリケーションで非同期のキューを管理していますが、dbのキューイングは大丈夫です。 – pavel242