1

列ファミリーのすべての行を反復処理し、各行内で列を数え、最大値と行キーを記録する「国勢調査」プログラムを作成しました。私は Hector クライアントでより多くの時間を費やしてきましたが、テストのために Pelops クライアントも作成しました。

基本的なフローは、RangeSlicesQuery を使用して行を反復し、次に各行で SliceQuery を使用して反復し、統計を収集することです。API が異なるだけで、Pelops でも同様に機能します。欠点は、バッファリングを手動で行う必要があり、行と列の両方のバッファ サイズを選択することです...私の現在のデータは 1,200 万行で、最大の列数は ~25K なので、しばらく時間がかかります...私の現在の構成では、取得しています1 秒あたり 25,000 行以上。

Hector の CountQuery を改善して発見する方法を探しています (Thrift クライアント get_count() を使用していると思います)。キーを繰り返し処理し (RangeSlicesQuery.setReturnKeysOnly() を使用)、各行キーで CountQuery を再利用する方が高速であると考えて、コードを修正しました。

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

列を数えるより良い方法はありますか?

4

1 に答える 1

1

Hectorで何が起こっているのかわからない-私はそれが30倍遅くなるのではなく、およそ2倍遅くなると予想している。

より一般的には、カウンター列を使用して非正規化されたカウントを維持することは、完全なCFスキャンよりもおそらく優れています:http ://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-カウンター

于 2011-09-14T14:21:03.170 に答える