2

3台のサーバーでriakクラスターをセットアップしています。ビットキャスクを調べて、このクラスターが現在使用しているディスク容量を確認できますが、クラスターに現在保存されているアイテムの数も確認したいと思います。

クラスターは画像の保存に使用されています。つまり、バイナリデータはバケットのセットのキーに対して保存されています。バケット内のアイテムの数を返すために、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

インデックスの削減はmapreduceデータよりも優れています

于 2014-03-12T04:21:24.477 に答える