2016-02-20 14 views
7

私はcassandraを初めて使用しており、分析タスク(索引付けが必要)に使用しています。Cassandra - 非主キーの欠点を持つWHERE節

cassandra, select via a non primary key私はWHERE clauseのプライマリキー以外の列を使用して自分のDBにクエリを実行できません。 (パフォーマンスの問題のために推奨されません)

  • は、セカンダリインデックスを作成します。そうするには

    は、(すべての主要な欠点を持つ)3つの可能性があるようです。

  • 新しいテーブルを作成します(私はcassandraでも問題ありません)。
  • 私は主キーの中で照会したいカラムを入れます。この場合、WHERE句に主キーのすべての部分を定義する必要があります。INまたは=以外の演算子は使用できません。

上記の3つの制約を持たない別の方法(WHERE clause非プライマリキー列)はありますか?

+0

カサンドラはあなたが説明しているユースケースにはあまり適していません。クエリーの柔軟性が必要なように思えますが、カッサンドラからそれを取り除くことはできません。要するに、(冗長データを持つ)クエリテーブルを作成するための推奨事項は、拡張可能なソリューション***です。リレーショナルデータベースのようなカサンドラを使用しようとするのではなく、 – Aaron

+0

こんにちは@Aaron oups、問題はクエリの柔軟性のために 'mongodb'は' cassandra'よりも推奨されますが、 'read/write'パフォーマンス(私の場合は非常に重要です)であり、後者は非常に悪い点です。 – farhawa

+0

このパフォーマンスを見る唯一の方法は、冗長データを使用してクエリベースのモデリング手法を採用することです。リレーショナルモデルや類似のメソッドを使用してクエリの柔軟性を実現しようとすると、Cassandraはかなりひどく機能します。 – Aaron

答えて

4

カッサンドラ自体の中から、上記で指定したオプションに限定されています。あなたはここを見て理由を知りたい場合は、次の

A Deep Look to the CQL Where Clause

しかしあなたはカサンドラ内に格納された情報の分析を実行しようとしているならば、あなたはスパークを使用して見てきました。 Sparkは、分散システム上で大規模なデータ処理用に構築されています。実際に、Datastax(hereを参照)を使用して、SparkとCassandraの間でデータの読み込みと保存を行うための優れた統合機能がある場合は、無料版(コミュニティ版)と有料版(エンタープライズ版)の両方があります。

+0

こんにちは@bechbdありがとうあなたの責任。私はここでインデックス付けの問題を抱えています、どのように私はabovを述べた制約なしにデータを読み込むことができますか? – farhawa

+1

上記のリンクにある制限を使用して、Spark RDDにデータをロードする必要があります。スパークに入ると、フィルタ、map/reduce、rangeを使用して、大量のデータを探しているものにフィルタリングできます。あなたの索引付け問題への簡単な答えは、あなたがしようとしていることがカッサンドラが設計されている基本的な方法の1つに違反しているということです。 AFAIK Cassandra 2.Xでは、これらの制限を回避する方法はありません。Cassandra 3.Xを使用している場合は、マテリアライズドビューを使用して見ることができますが、それらは独自の複雑さを導入します。 – bechbd

0

私は、照会するフィールドがパーティションキーの一部ではないので、テーブルが異なる目的のために設計されていると仮定します。私の提案は、テーブルを複製し、それをクエリしたいフィールドでキーすることです。私はData modeling conceptsとしてそれを使用する正確な目的のために新しいテーブルを設計することをお勧めします。

Cassandraは、CQLで何ができるかに関して一定の制限を課すことで、線形スケーリングなどのいくつかの利点を提供します。

関連する問題