1

次のようなテーブルが欲しいのですが。

CREATE TABLE ProductFamilies (
  ID varchar,
  PriceLow int,
  PriceHigh int,
  MassLow int,
  MassHigh int,
  MnfGeo int,
  MnfID bigint,
  Data varchar,
  PRIMARY KEY (ID)
);

全部で13のフィールドがあります。これらのほとんどはバケットを表しています。データは製品ファミリーIDのJSONであり、後続のクエリで使用されます。Cassandraがどのように機能するかを考えると、内部の列名が値になります。これらをフィルタリングしたいと思います。

次のようにクエリを実行したいと思います。

SELECT Data FROM MyApp.ProductFamilies WHERE ID IN (?, ?, ?) AND PriceLow >= ? 
AND PriceHigh <= ? AND MassLow >= ? AND MassHigh <= ? and MnfGeo >= ? AND 
MnfGeo <= ?
  1. Cassandraは、複合行キーまたはインデックス付き列に対してのみWHERE述語を実行できることを読みました。これはまだ本当ですか?もしそうなら、私は列をPKのデータ部分にする必要があります。
  2. それでも、左から右にすべての列を含める必要があり、スキップできない場合はありますか?
  3. 私のデザインに最適でない点はありますか?
  4. 製品ファミリで可能な材料の配列である「材料」列を追加したいと思います。ピザのトッピングを考えて、「WHERE Materials IN('パイナップル')」とクエリします。マテリアルの個別の転置インデックスを作成してから、上記のクエリに対して手動で交差を実行せずに、Cassandraでこれを処理する他の[よりエレガントな]方法はありますか?
4

2 に答える 2

3

ここで提案するように、検索している正確な PK を指定する場合 (id IN ...)、残りの述語で好きな式を使用できます。制限はありません。

リスト コレクションは、10 月末にリリースが予定されている 1.2.0 からサポートされます。コレクション コンテンツのインデックス付きクエリは、サポートされている場合とサポートされていない場合があります。

于 2012-09-06T14:10:25.233 に答える