在riak存储桶中获取密钥数量的优化方法是什么?

时间:2011-11-21 17:14:57

标签: mapreduce riak

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

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

从特定存储桶获取密钥数量的最佳时间优化方法是什么?

4 个答案:

答案 0 :(得分:3)

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

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

首先安装riak-js客户端

npm install riak-js@latest

然后在命令行上运行以下命令以计算您的数量。

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

答案 1 :(得分:3)

这对我有用 - 把它放到控制台,没有进一步的安装:

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"}}]}'

答案 2 :(得分:2)

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

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

鼓励赞成,评论等。

马克

答案 3 :(得分:0)

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

段落"通过$ bucket Index"

统计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

降低索引优于mapreduce数据