乌鸦指数效率:地图缩减与变形金刚

时间:2015-12-07 13:38:59

标签: ravendb

我想知道Raven中最有效的是什么,使用变压器或使用map reduce。我正在查看一个案例,其中返回了几个集合中的所有字段,但我只需要将其中的一小部分编入索引。我在一个例子上进行了测试,我发现使用变换器可以更快地进行索引构建和索引检索。我想知道这个结果是否会成功以及Raven在后台做些什么来提高效率。

下面是一个“玩具示例”,教授可以在多个班级教授。我只需要Classes.Name上的索引。

    Collection: Professors
       ProfessorID, Name, PField1, PField2, ...
    Collection: Classes
       ClassID, Name, ProfessorID, CField1, CField2, ...

Transformer伪代码:

    Map:
       from class in docs.Classes select new {Name = class.Name}
    Transformer:
       from result in results
       let prof = LoadDocument(result.ProfessorID)
       select new { 
          result.ClassID, result.Name, result.ProfessorID, 
          result.CField1, result.CField2, ...
          prof.Name, prof.PField1, prof.PField2, ...
       }

映射/减少伪代码

    Map1:
       from prof in Professors
       select { all fields}
    Map2: 
       from class in Classes
       select {all fields}
    Reduce
       from result in results
       group result by result.ProfessorID into g
       select {all fields}

1 个答案:

答案 0 :(得分:0)

变换器在查询期间运行,因此它只在/需要时执行。 Map / Reduce意味着减少数据,用于聚合,而不是真正用于它的用途。 它在后台运行,并为您构建投影。

我会为此推荐变压器。

相关问题