使用RavenDB映射/减少分片数据

时间:2012-01-13 22:24:30

标签: ravendb

当数据在两个节点之间分片时,我无法使地图缩小样本工作。我正在存储与两个本地ravenDB节点上记录的应用程序错误相关的文档,错误文档如下所示:

节点1上的文档示例,总共有6个

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

节点2上的文档示例,共有7个

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

当我运行此查询时:

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

我得到了2个结果;一个计数为6,第二个计数为7.我期望每个碎片的两个结果将合并为一个结果,计数为13.不确定我是否做错了或者不是它应该如何工作。我按照http://ravendb.net/documentation/docs-sharding的示例来设置分片策略。

1 个答案:

答案 0 :(得分:0)

格兰特 RavenDB目前不处理多个节点的减少。 您可以使用以下方式自己完成:

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