Карта / Сокращение по сравнению с затененными данными с RavenDB - PullRequest
4 голосов
/ 14 января 2012

У меня проблемы с получением карты, чтобы уменьшить выборку для работы, когда данные разделяются на два узла. Я храню документы, связанные с ошибками приложений, которые регистрируются на двух локальных узлах 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 голосов
/ 14 января 2012

Предоставьте, RavenDB в настоящее время не обрабатывает сокращение по нескольким узлам.Вы можете сделать это самостоятельно, используя:

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