【发布时间】:2012-08-31 03:23:17
【问题描述】:
我希望有一个如下表:
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 谓词。这仍然是真的吗?如果是这样,我将不得不使列
- 是否仍然需要从左到右包含所有列并且不能跳过任何列?
- 我的设计中是否存在任何非最佳点?
- 我想添加一列“材料”,它是产品系列中可能材料的数组。想想披萨配料,并查询“WHERE Materials IN ('Pineapple')”。如果不创建单独的材料倒排索引,然后对上述查询执行手动交集,在 Cassandra 中是否还有其他 [更优雅的] 方法来处理这个问题?
【问题讨论】:
-
再一次这是我的答案,它仍然适用:D stackoverflow.com/questions/11825783/…
-
是的...谢谢,但是只能针对 PK 进行过滤有什么意义呢?我知道你的回答是对的 ;)
-
“根据你的阅读模式建模你的数据”是 cassandra 的经验法则。上述原因的唯一原因是您无法进行连接,您无法过滤列值,直到您索引一个:) 所以,请提及您的完整用例和阅读模式以帮助我们:P
-
我想我确实提到了我的用例:P...让我扩展这个问题。
-
我的数据是按照我的阅读模式建模的。根据您的上一个。答案,我相信我有这个正确的。据我了解,CQL 3 会将值存储为列名,不包括最终数据值。
标签: indexing cassandra database-indexes