2012-01-13 6 views
4

Je n'arrive pas à obtenir une carte qui réduit l'échantillon lorsque les données sont partagées entre deux nœuds. Je le stockage des documents qui se rapportent à des erreurs d'application étant enregistrées sur deux nœuds RavenDB locaux, les documents d'erreur ressemblent:Mapper/Réduire les données surimprimées avec RavenDB

Exemple de document sur le nœud 1, il y a 6 au total

errors/1/6 
{ 
    "UniqueId": "c62c7e30-8ec7-45af-88e4-da023d796727", 
    "ApplicationName": "MyAppName" 
} 

Exemple de document le noeud 2, il y a 7 totale

errors/2/6 --Error stored on shard node 2 
{ 
    "UniqueId": "7e0b0f87-9d75-4e70-9fa0-d64a18bc88dc", 
    "ApplicationName": "MyAppName" 
} 

quand je lance cette requête:

public class ApplicationNames : AbstractIndexCreationTask<ErrorDocument, Application> 
{ 
    public ApplicationNames() 
    { 
     Map = errors => from error in errors 
         select new { error.ApplicationName, Count = 1 }; 

     Reduce = results => from error in results 
          group error by new { error.ApplicationName, error.Count } into g 
          select new { g.Key.ApplicationName, Count = g.Sum(x=> x.Count) }; 
    } 
} 

Je récupère 2 résultats; un avec un compte de 6, le second avec un compte de 7. Je m'attendais à ce que les deux résultats de chaque fragment soient combinés en un résultat avec un compte de 13. Je ne sais pas si je fais quelque chose de mal ou si ce n'est pas comment c'est censé fonctionner. J'ai suivi l'exemple à http://ravendb.net/documentation/docs-sharding pour mettre en place la stratégie de sharding.

Répondre

0

Grant, RavenDB ne gère actuellement pas réduire sur plusieurs nœuds. Vous pouvez faire vous-même en utilisant:

session.Query<Application, ApplicationNames>() 
    .ToList() 
    .Select(new ApplicationNames().Reduce) 
    .ToList(); 
+0

réponse tardive, mais étant donné que la propriété est protégée Réduire le compilateur se plaint avec cette solution. – Grant

+0

En ce qui concerne Réduire la protection, j'ai également essayé de créer une nouvelle propriété Reduce sur mon Index ApplicationNames, mais cela devrait être défini avec des types anonymes à faire correspondre, ce que je ne pense pas être possible. – Grant

+1

Je suis très surpris par cette réponse, pourquoi ne pas réduire la prise en charge sur les partitions - et quand cette fonctionnalité sera-t-elle implémentée? –

Questions connexes