【问题标题】:Does CouchDB's group=true prevent rereduce?CouchDB 的 group=true 是否防止重新减少?
【发布时间】:2012-11-12 05:28:39
【问题描述】:

CouchDB 的映射函数发出键/值对:

function(doc) {
  emit(doc.date, 1);
}

可能有许多键/值对具有相同的键。在查询视图时设置group=true 将具有相同键的键/值对分组到相同的reduce 中:

function(keys, values, rereduce) {
  return sum(values);
}

这是否意味着使用group=true(或任何group_level > 0),每个键只有一个减少

或者分组是否只保证所有reduce都具有同构键,并且仍然可能有一个或多个rereduce?

我正在使用一个不可交换的 reduce 函数,但每个键不会有大量记录。我希望我能够设置group=true,然后在单个reduce 中控制操作顺序。如果会再减少,那么这个计划就没有意义了。

【问题讨论】:

  • "这是否意味着在 group=true 的情况下,每个键都会有一个 reduce?"我也有同样的问题,请问你有结论吗?

标签: couchdb


【解决方案1】:

group=true 大致意思是“嘿,Couch!对这张地图进行分组,让所有的键都不同,但不要错过任何一种情况!” 实际上等于@987654324 @(见docs)。

虽然您可能猜不到正确的 group_level 并删除了一些关键项(如果 key 是一个数组,那么它是有意义的),group 会为您处理这个问题,并且不会应用 rereduce。

此外,您的 reduce 函数可以替换为内置的 _sum - 它是在 Erlang 中实现的,并且速度更快。

【讨论】:

  • 所以你的意思是当任何 group_level 大于 0 时,rereduce 永远不会发生?
  • 这样的group_level永远不会发生这种情况,不需要减少相似的唯一键。
  • 所以你是说当需要减少相似的键时可能会发生 rereduce ?
  • 恐怕我无法确定这个答案归结为“是”还是“否”。也许特别是第二句话可以改写?
  • @Kxepal,当 group_level 设置为 999 并且 group 为 true 时,rereduce 永远不会发生,是吗?
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 2011-06-09
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
相关资源
最近更新 更多