2016-08-29 10 views
0

私は、プロジェクトのDBソリューションとしてcassandraを検討するためにパフォーマンスベンチマークを取っています。私はプライマリキーとしていくつかの列を持つ28列のテーブルを作成しました。where句でプライマリ以外のキー列を使ってcassandraクエリを実行する方法

私は約250以上の何百万ものレコードのデータを持つテーブルを読み込みました。

where句の主キー列を使用してクエリを実行したとき、結果は非常に良好でした。 5つのスレッドでクエリを並列化すると、2.5分で100万件近くのクエリを処理できました。

ただし、where句でプライマリ以外のキー列を使用してクエリを実行しようとすると、1000回のクエリで約2時間かかりました。

私は、プライマリキーを持っていないことが大きな欠点であることを知っていましたが、それでもなお、私たちはそのような状況をどこかに持っているかもしれません。

  1. 2次インデックスを使用できるかどうかを確認しようとしましたが、1つの列のみに制限されているようです。

  2. インデックスタイプのクラスが必要なため、カスタムインデックスの正しい例が見つかりませんでした。

  3. プライマリキーのすべての列を使用した場合、少なくとも5%は役に立ちますか?

  4. where句の主キー列がないクエリの状況がさらに増えると、cassandraは本当に良い解決策ですか?

誰かがこの状況に確実に直面している可能性があることを強く信じています。誰でも自分の経験を共有できれば幸いです。

+0

正確な列ファミリのスキーマとクエリを更新することはできますか? –

+0

こんにちはJaya、私はテーブルの作成に追加のパラメータがありません。これは通常のテーブルで、28のうちの2つの列が主キーとして、1つの他の列が順序付けに使用されます。すべての列+ PRIMARY KEY(( "col1"、 "col6")、 "col10")を持つテーブルの作成と同じです。 – Srini

答えて

3

where句の主キー列がないクエリの状況がさらに増えると、cassandraは本当に良い解決策ですか?

これは先験的なカサンドラが最善の解決策ではないユースケースです。 250万以上のレコードがある場合、他のデータベースもパフォーマンスの問題に対応します。

1つの解決方法は、他のテーブルに独自のインデックスを作成することです。 where節の種類が多すぎる場合は、そのトリックを行う必要があります。 1つの行を更新または選択するためにいくつかのupdateコマンドまたはselectコマンドを実行しなければならない場合でも、これらのコマンドはそれぞれ、実行したベンチほど速くなければなりません。

+1

私はThomasに同意します。これらは反転インデックスと呼ばれ、1億2,000万レコードを超えるデータセットでは多く使用しています。 – gsteiner

関連する問題