2011-09-13 9 views
1

私は、列ファミリのすべての行を繰り返し処理するために "国勢調査"プログ​​ラムを作成し、各行内に列を数え、最大値と行キーを記録しました。私はHectorクライアントにもっと時間を費やしていましたが、テストのためにPelopsクライアントも書いています。Counting columns、非常に遅いCountQueryとSliceQueryの操作

基本的な流れは、RangeSlicesQueryを使用して行を反復し、各行でSliceQueryを使用して反復して統計を収集することです。 Pelopsと同じように動作します。異なるAPIだけです。下側は、バッファリングを手動で行う必要があります。行と列の両方のバッファサイズを選択しています...現在のデータは1200万行で、最大のカラム数は〜25Kですので、現在の設定では... 25K行/秒

HectorのCountQuery(私は、Thriftクライアントget_count()を使用していると仮定します)を改善し、発見する方法を探しています。キーを繰り返し(RangeSlicesQuery.setReturnKeysOnly()を使用)、各行キーでCountQueryを再利用する方が速いと思って、コードを改訂しました。

遅いだけでなく、30倍も遅くなりました。 (1秒あたり900行しか処理されません)

カラムを数えられる方法はありますか?

答えて

1

ヘクトルは何が起こっているのかよく分かりませんが、私はそれが約2倍遅く、30倍遅くなるとは思っていません。

は、より一般的に、カウンタカラムを用いて、非正規化数を維持することは、おそらくスキャンフルCFよりも優れている:http://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-counters

+0

私が追跡するカウンタ列を考えられているが、データが更新されると、その後、私はどうかを確認しなければなりません列がすでに存在する場合は、カウントを更新する前に国勢調査は頻度の高い仕事ではなく、たまにしか使わない...しかし、私はCountQueryを避けることにします。 – libjack

+0

IMHOでは理想的ではありませんが、カウンターコラムは確かに良い方法です。 – libjack