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