2012-04-12 18 views
7

¿Cómo implementar MapReduce en C# usando PLINQ?¿Cómo implementar MapReduce en C# usando PLINQ?

Supongamos que tiene 7-8 WebServices para recopilar datos y en cada recepción (manera asincrónica) debe colocar esos datos en algunas tablas de una base de datos, en mi caso es SQL Server 2008. Por ejemplo, los datos que está recibiendo de cada servicio web es:

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

Y, en cada recepción de la respuesta de estos datos entra en un nombre de tabla - Empleado:

Employee 
=== 
EmployeeID (PK) 
EmployeeName 

vez que los datos entra en la mesa, tiene que volver como json para el cliente que es ASP.NET (MVC 3) applicat ion hace esta llamada usando el JavaScript del lado del cliente (ajax).

Supongamos que un WebServiceEmployee1 ha regresado con datos y otros 6 están en cola (aún tratando de obtener los datos). Luego, debe registrar el resultado en la tabla en lugar de esperar otros 6 y devolver los datos del empleado insertado al cliente en json. Y, manténgalo conectado y haciendo, mientras que otros lo hacen de la misma manera.

Por favor, mira, en mi toolbelt tengo ASP.NET MVC 3 (Razor), SQL SERVER 2008 R2, jQuery.

Gracias.

+0

súplicas nos dan un ejemplo simple de los datos que se va a procesar y el resultado del proceso que espera obtener al final. –

+0

@ achitaka-san He actualizado la publicación. –

+0

Eliminé mi respuesta porque no entiendo muy bien su contexto y cómo puede usar MapReduce con o sin linq – Nikolay

Respuesta

1

Sin comprensión clara sobre el tratamiento que desea realizar, sugiero la lectura, aunque la siguiente documentación de MSDN: http://bit.ly/Ir7Nvk Describe map/reduce con PLINQ con ejemplos como:

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); 
} 

El "mapa" de ser Friends.AsParallel, SelectMany y Where y la fase de "reducir" es la GroupBy y Select

0

Este PDF desde MS tiene un mapa reducir ejemplo hacia la mitad/finales

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); 
}