RethinkDB:​​确实减少迭代所有分组数据?

时间:2015-11-17 17:21:49

标签: rethinkdb rethinkdb-javascript

我以为我有rethinkdb :)但现在我有点困惑 - 对于此查询,计算分组数据:

groupedRql.count()

我得到了预期的结果(数字):

[{"group": "a", "reduction": 41}, {"group": "b", "reduction": 39}...]

所有减少结果都是〜40,这是预期的(并且是正确的),但当我使用reduce计算时,这样:

groupedRql.map(function(row) {
  return row.merge({
    count: 0
  })
}).reduce(function(left, right) {
  return {count: left("count").add(1)}
})

我得到的结果要低得多(~10),这让人感觉不舒服:

[{"group": "a", "reduction": 10}, {"group": "b", "reduction": 9}...]

当然,我需要使用reduce来进一步操作。 我错过了什么吗?

我在服务器上使用v2.0.3,直接在dataexplorer上测试查询。

1 个答案:

答案 0 :(得分:1)

问题出在这里

return {count: left("count").add(1)}

应该是

return {count: left("count").add(right("count"))}

在多个分片,多个CPU核心之间减少运行并行。当你这样做

return {count: left("count").add(1)}

你忽略right的一些计数。

在本文件中注明:https://www.rethinkdb.com/docs/map-reduce/#how-gmr-queries-are-executed

  

重要的是要记住,不调用reduce函数   从左到右输入流的元素。它被召集了   流的元素,无论是任何顺序还是输出   以前调用该函数。