我以为我有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上测试查询。
答案 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函数 从左到右输入流的元素。它被召集了 流的元素,无论是任何顺序还是输出 以前调用该函数。