2011-11-21 22 views
2

我有一个3台服务器组成的riak集群。我可以看看bitcask建立目前这种群集正在使用多少磁盘空间,但我也想看看有多少项目目前存放在群集中。什么是优化的方式来获得在一个riak桶中的密钥计数?

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

什么是最优化时间的方式来从特定的桶拿到钥匙的数量的计数?

回答

3

计数在了Riak群集上的铲斗的键的数目不是很有效,即使使用的MapReduce函数。

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

首先安装了Riak-JS客户

npm install [email protected] 

然后运行命令行下面来给你算。

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

要提供源代码:此方法在Riak邮件中[由francisco treacy建议](http://lists.basho.com/pipermail/riak-users_lists.basho.com/2011-November/006636.html)列表给OP。 – Dinei

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

这是计算存储桶中条目数的非常昂贵的方法,因为它既列出存储桶中的所有关键字(这在生产中不推荐),然后还运行大量JavaScript MapReduce函数。如果这是必需的,更有效的方法如下:curl -XPOST http:// localhost:8098/mapred -H'Content-Type:application/json'-d'{“inputs”:“mybucket ”, “查询”:[{ “减少”:{ “语言”: “二郎”, “模块”: “riak_kv_mapreduce”, “功能”: “reduce_count_inputs”, “ARG”:{ “do_prereduce”:真}}} ]}” –

0

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

“通过$桶索引计数桶对象”
$ 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数据更好

相关问题