2

Cassandra を使用しているときに、cassandra 読み取りのパフォーマンスのボトルネックに直面しました。

行キーが膨大なデータを読み取る方法は 2 つあります。最初のものは、インデックス付きスライス クエリ API によるインデックスとクエリを使用しています。2 つ目は、行がシーケンスであるため、rangelicequery api を使用しています。

インデックスを使用すると、常にタイムアウト例外がスローされます。次に、rangelicequery のパフォーマンスが優れているかどうか疑問に思いますか?

200k 行と 3m 列の cf。20k 行を取得するクエリ。

キーキャッシュは 30000 です。

4

1 に答える 1

2

この場合、range_slice_queryを使用したほうがよいと思います。インデックス付きエントリごとにランダムな読み取りを行うのではなく、ディスクからデータをチャンクでストリーミングします(これがget_indexed_slicesの動作方法だと思います)。確認する唯一の方法は、両方を試して比較することです。

タイムアウトを停止するには、各クエリで返される行数を減らすか(「カウント」http://wiki.apache.org/cassandra/API/)、hectorで使用しているタイムアウトの長さを増やすことができます。

あなたはあなたがやろうとしていることをするためにhadoopを使うことを考えましたか?20k行はかなり多いので、おそらくあなたのタスクにより適しているでしょう。使用できるcassandraソースコードで提供されるInputFormatがあります。トークンの各範囲をクエリするノードを事前にチェックする、その下の範囲クエリを使用します。これはおそらくクエリを実行するための最速の方法です。これがそのhttp://wiki.apache.org/cassandra/HadoopSupportに関するドキュメントです。

于 2012-07-25T17:31:46.500 に答える