我希望有一个如下表:
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 谓词。这仍然是真的吗?如果是这样,我将不得不使列 < Data 成为 PK 的一部分。
- 是否仍然必须从左到右包含所有列并且不能跳过任何列?
- 我的设计中是否有任何非最佳点?
- 我想添加一列“材料”,它是产品系列中可能的材料数组。想想披萨配料,并查询“WHERE Materials IN ('Pineapple')”。在不创建单独的材料倒排索引然后对上述查询执行手动交集的情况下,在 Cassandra 中是否还有其他 [更优雅] 的处理方式?