7

PLINQを使用してC#でMapReduceを実装するにはどうすればよいですか?

データを収集するための7〜8個のWebサービスがあり、受信するたびに(非同期の方法で)そのデータをデータベースのいくつかのテーブル(私の場合は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

jsonデータがテーブルに入ると、ASP.NET(MVC 3)アプリケーションがクライアント側のJavaScript(ajax)を使用してこの呼び出しを行っているクライアントに戻る必要があります。

WebServiceEmployee1がデータとともに返され、他の6つがキューにあるとします(まだデータを取得しようとしています)。次に、他の6つを待つのではなく、結果セットをテーブルに登録し、挿入された従業員のデータをjsonのクライアントに返す必要があります。そして、他の人が同じようにやっている間、それを接続して実行し続けます。

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

ありがとう。

4

2 に答える 2

1

実行したい処理について明確に理解していない場合は、次の MSDN ドキュメントを読むことをお勧めします

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.AsParallelSelectMany、およびWhereであり、「縮小」フェーズはGroupByおよびです。Select

于 2012-05-04T03:30:46.637 に答える
0

MS からのこの PDF には、中間/最後に向かって Map Reduce の例があります。

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);
}
于 2012-06-11T14:26:54.917 に答える