我一直在尝试使用 CouchDB 进行 MapReduce。一些示例显示了映射归约函数中可能存在的一些繁重逻辑。在一种特殊情况下,他们在映射内执行 for 循环。
在发出您选择的文档之前,MapReduce 是否会在每个可能的文档上运行?
如果是这样,我认为这意味着运行任何类型的迭代处理withinMapReduce 函数至少会增加一个数量级的处理负担。
基本上可以归结为以下问题:在进行不合理的昂贵查询之前,可以在 MapReduce 中执行多少逻辑?
在 CouchDB Map-Reduce 中,大量昂贵的处理是可以接受的。
CouchDB 视图(map-reduce)更像是CREATE INDEX
比他们SELECT FROM
.
具体来说,CouchDB 保证映射函数运行only每个文档一次,永远。 (嗯,实际上每个文档一次change曾经。)这就是“迭代映射缩减”。
因此,假设您有 10,000 个文档,并且它们占用 1second每个都要处理(这比我见过的要高得多)。完全构建视图需要 10,000 秒或 2.8 小时。但是,一旦视图完成,查询任何行(?key=...
) 或行切片 (?startkey=...&endkey=...
)与直接查询文档花费的时间相同。文档计数的查找时间为 O(log n)。
换句话说,即使每个文档执行映射需要 1 秒,但获取结果也需要几毫秒。 (当然,必须首先构建视图,因为它实际上是一个索引。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)