【问题标题】:Cloudant list function or separate reduceCloudant 列表函数或单独的 reduce
【发布时间】:2015-11-30 18:10:10
【问题描述】:

所以我知道 Cloudant 是基于 couchdb 的。在我返回的一个视图中,我得到了很多行的列表,例如:

{"rows":[
  {"key":[2015,10,7,"one"],"value":2},
  {"key":[2015,10,7,"two"],"value":1},
  {"key":[2015,10,7,"three"],"value":2}
  ....
]}

上述解决方案有效,最初提出here。但是,现在我的数据集增长非常显着,行数可以达到 20k。

对于返回对象,当然还有行数的“计数”。我希望通过 couchdb here 中提到的列表函数运行此视图的输出,而不是返回所有这些数据。

所以我猜几个问题:

  1. 有人在 cloudant 中使用过 _list 功能吗?
  2. 或者,有人会知道一个 reduce & re-reduce 函数,它只会给我行的长度(即键数?)否则返回所有数据只是为了得到一个简单的计数需要太长时间行。

谢谢!

【问题讨论】:

    标签: couchdb reduce cloudant


    【解决方案1】:

    我不确定我是否理解您的问题。但是,如果您只想获取视图中的总行数,而不返回任何数据,则可以使用limit=0 作为参数来查询您的视图。

    例如:

    http://examples.cloudant.com/simplegeo_places/_all_docs?limit=0

    让你找出simplegeo_places测试数据库有2170万个文档:

    {"total_rows":21735117,"offset":0,"rows":[
    
    ]}
    

    请注意,total_rows 是您视图中的总行数,而不是将返回的行数,如果您未指定 limit=0


    PS:是的,Cloudant 确实支持列表功能,您可以使用head 参数访问total_rows

    【讨论】:

      【解决方案2】:

      这是count-distinct problem 的一个实例。天真的解决方案无法扩展。但只要您的计算资源大于数据大小,您最终就可以进行精确计算。

      _list 函数可能不会给您带来任何好处,但我想您可以尝试一下。 _list 函数仍必须等待收集视图中的所有结果,然后才能执行函数以开始计算唯一性。

      或者,虽然您的数据规模仍然相对较小,而且如果它往往很小,您可以考虑将 Cloudant 数据存储到 dashDB 并使用 SQL 选择语句(尽管仍然大量时间来计算这个)。

      之后,您可以选择使用 Bluemix Spark Service 运行第二次 reduce,或者甚至更好的是,使用 HyperLogLog 库/算法来准确及时地估计您的不同计数是否开始变得非常大。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多