我想知道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}
答案 0 :(得分:0)
变换器在查询期间运行,因此它只在/需要时执行。 Map / Reduce意味着减少数据,用于聚合,而不是真正用于它的用途。 它在后台运行,并为您构建投影。
我会为此推荐变压器。