【问题标题】:What is the optimised way to get a count of keys in a riak bucket?获取 riak 存储桶中的键计数的优化方法是什么?
【发布时间】:2011-11-21 17:14:56
【问题描述】:

我有一个设置了 3 台服务器的 riak 集群。我可以查看 bitcask 以确定该集群当前使用了多少磁盘空间,但我还想了解集群中当前存储了多少项目。

集群用于存储图像,这意味着二进制数据将根据一组存储桶中的键存储。我尝试对 HTTP 接口使用 map reduce 函数,以返回存储桶中的项目数,但它们已超时。

从特定存储桶中获取键数的最优化时间的方法是什么?

【问题讨论】:

    标签: mapreduce riak


    【解决方案1】:

    即使使用 MapReduce 函数,计算 Riak 集群上存储桶中的键数也不是很有效。

    我发现计算项目数的最有效方法是通过流式 API 在客户端上进行计算。以下示例使用 node-js 来执行此操作。

    首先安装riak-js客户端

    npm install riak-js@latest
    

    然后在命令行上运行以下命令给你计数。

    node -e "require('riak-js').getClient({ host: 'hostname', port: 8098 }).count('bucket');"
    

    【讨论】:

    【解决方案2】:

    这对我有用 - 将其放入控制台,无需进一步安装:

    curl -XPOST http://localhost:8098/mapred -H 'Content-Type: application/json' -d '
    {"inputs":"THE_BUKET",
     "query":[{"map":{"language":"javascript",
                      "keep":false,
                      "source":"function(riakobj) {return [1]; }"}},
              {"reduce":{"language":"javascript",
                         "keep":true,
                         "name":"Riak.reduceSum"}}]}'
    

    【讨论】:

    • 这是一种计算存储桶中条目数量的非常昂贵的方法,因为它既列出了存储桶中的所有键(在生产中不推荐),然后还运行大量 JavaScript MapReduce 函数.但是,如果需要这样做,更有效的方法如下: curl -XPOST localhost:8098/mapred -H 'Content-Type: application/json' -d '{"inputs":"mybucket","query": [{"reduce":{"language":"erlang","module":"riak_kv_mapreduce","function":"reduce_count_inputs","arg":{"do_prereduce":true}}}]}'
    【解决方案3】:

    features.basho.com 上也有一个开放请求,以使这更容易(因为正如 bennettweb 指出的那样,这不是最直接的任务)。

    http://features.basho.com/entries/20721603-efficiently-count-keys-in-a-bucket

    鼓励投票、cmets 等。

    标记

    【讨论】:

      【解决方案4】:

      http://docs.basho.com/riak/latest/dev/using/2i/

      段落“通过 $bucket 索引计数桶对象”

      $ curl -XPOST http://localhost:8098/mapred
        -H 'Content-Type: application/json'
        -d '{"inputs":{
                 "bucket":"mybucket",
                 "index":"$bucket",
                 "key":"mybucket"
             },
             "query":[{"reduce":{"language":"erlang",
                                 "module":"riak_kv_mapreduce",
                                 "function":"reduce_count_inputs",
                                 "arg":{"reduce_phase_batch_size":1000}
                                }
                     }]
             }'
      EOF
      

      reduce index 优于 mapreduce data

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 2015-08-25
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多