RethinkDB:​​计算分组数据中的唯一行

时间:2015-11-18 16:28:28

标签: rethinkdb

我正在尝试计算分组数据中的所有唯一行,即每组中存在多少个唯一行。

虽然groupedData.distinct().count()适用于相对较少的行,但在大约200k行上运行它(例如在我的情况下),以“超出大小限制”结束。

我理解为什么会这样,但我无法想出更有效的方法 - 有办法吗?

1 个答案:

答案 0 :(得分:0)

根据我的经验,Count在RethinkDB中是一件昂贵的事情。特别是对于需要迭代整个数据集的计数操作。我以前在这方面有点挣扎。

据我了解,当您将groupData传递给distinct时,它会创建一个数组,因为groupData将是一个序列,因此它有100,000个元素限制。

要解决这个问题,我认为我们必须使用流,而是计算流。我们不能使用group因为它会返回一组流,换句话说,就是我的理解再次返回一个流数组。

以下是我如何解决它:

  1. 在我想要分组的字段上创建索引
  2. 使用索引在该表上调用distnct。
  3. 映射流,使用索引
  4. 将值传递给getAll的count函数

    示例查询

    r.table('t').distinct({index: 'index_name'})
        .map(function(value) {
          return {group: value, total: r.table('t').getAll(value, {index: 'index_name'}).count()}
        })
    

    有了这个,一切都是一个流,我们可以懒惰地在结果集上迭代,得到每个组的计数。