2012-04-12 11 views
7

PLINQを使用してC#でMapReduceを実装する方法は?PLINQを使用してC#でMapReduceを実装する方法は?

データを収集するWebサービスが7-8あり、各受信(非同期方式)でデータをデータベースのいくつかのテーブルに入れる必要があるとします。私の場合はSQL Server 2008です。各Webサービスからされてきている。

<employees> 
    <employee> 
    <name>Ramiz</name> 
    </employee> 
    <employee> 
    <name>Aamir</name> 
    </employee> 
    <employee> 
    <name>Zubair</name> 
    </employee> 
</employees> 

そして、レスポンスの各受信に、このデータは、テーブル名に入る - 従業員:

Employee 
=== 
EmployeeID (PK) 
EmployeeName 

データがテーブルに入ったら、それは返すことがありますASP.NET(MVC 3)アプリケーションであるクライアントにjsonとしてionはクライアントサイドのJavaScript(ajax)を使用してこの呼び出しを行います。

WebServiceEmployee1がデータとともに返され、他の6つがキューに入っているとします(まだデータを取得しようとしています)。次に、他の6を待つ代わりに結果セットをテーブルに登録し、挿入された従業員のデータをjsonのクライアントに返します。そして、他の人たちも同じようにしながら、それをつなぎ続けること。

私のツールベルトには、ASP.NET MVC 3(Razor)、SQL Server 2008 R2、jQueryがあります。

ありがとうございました。

+0

嘆願は私たちにあなたが処理しようとしているデータとあなたが最後に得ることを期待処理結果の簡単な例を与えます。 –

+0

@ achitaka-san投稿を更新しました。 –

+0

私はあなたの文脈をよく理解していないので、私は自分の答えを削除しました。そして、linqの有無にかかわらずMapReduceを使う方法 – Nikolay

答えて

1

実行したい処理の明確な理解がなければ、私は、次のMSDNドキュメントかかわらず読んでお勧め:http://bit.ly/Ir7Nvkそれはマップ/のような例でPLINQを減らす説明:

public IDMultisetItemList PotentialFriendsPLinq(SubscriberID id, 
              int maxCandidates) 
{ 
    var candidates = 
    subscribers[id].Friends.AsParallel()      
    .SelectMany(friend => subscribers[friend].Friends) 
    .Where(foaf => foaf != id && 
      !(subscribers[id].Friends.Contains(foaf))) 
    .GroupBy(foaf => foaf)        
    .Select(foafGroup => new IDMultisetItem(foafGroup.Key, 
             foafGroup.Count())); 
    return Multiset.MostNumerous(candidates, maxCandidates); 
} 

Friends.AsParallelている「マップ」、 SelectMany、およびWhereと「減らす」相はGroupBySelect

0

MSからのこのPDFは、地図中/終了に向けての例を削減したある

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CH0QFjAE&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F3%2F4%2FD%2F34D13993-2132-4E04-AE48-53D3150057BD%2FPatterns_of_Parallel_Programming_CSharp.pdf&ei=4f_VT-ScD-Lg2gWqoeSWDw&usg=AFQjCNGhk_BZL8-5n8DaS_kMTaWRU9Y1Zw&sig2=ddKl4KuOGUiUb1pIawWeNQ

public static IEnumerable<TResult> MapReduce<TSource, TMapped, TKey, TResult>(
this IEnumerable<TSource> source, 
Patterns of Parallel Programming Page 76 
Func<TSource, IEnumerable<TMapped>> map, 
Func<TMapped, TKey> keySelector, 
Func<IGrouping<TKey, TMapped>, IEnumerable<TResult>> reduce) 
{ 
return source.SelectMany(map) 
.GroupBy(keySelector) 
.SelectMany(reduce); 
} 
関連する問題