2

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

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

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

4

4 回答 4

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');"
于 2011-11-24T13:11:51.707 回答
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"}}]}'
于 2013-02-13T14:39:20.610 回答
2

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

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

鼓励点赞、评论等。

标记

于 2011-12-03T20:33:55.593 回答
0

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 数据

于 2014-03-12T04:21:24.477 回答