【发布时间】:2015-02-01 07:53:55
【问题描述】:
在 Cassandra 中,我可以创建一个复合分区键,与我的集群键分开:
CREATE TABLE footable (
column1 text,
column2 text,
column3 text,
column4 text,
PRIMARY KEY ((column1, column2))
)
据我了解,按分区键查询是一种极其有效(最有效?)的数据检索方法。但是,我不知道仅通过复合分区键的一部分进行查询是否也有效。
在 MSSQL 中,这将是有效的,只要从第一个开始包含组件(在此示例中是 column1 而不是 column2)。卡桑德拉也是这样吗?在这里仅根据 column1 查询行是否高效?
【问题讨论】:
-
如果您只想查询部分主键,您可以将其定义为 PRIMARY KEY (column1, column2)。但是,这意味着分区(存储数据的位置)仅由 column1 确定。这可能会导致热节点或其他问题,具体取决于 column1 的基数。如果您提供有关架构的更多详细信息(特别是 column1 和 column2 代表的内容),我们或许可以为您建议一个有效的中间立场。
-
我在这里寻找更多的一般策略,而不是特定的建议。然而,我的实际问题不是我最终会遇到热点,而是我可能会在某个时候超过约 20 亿列的限制,因为我还使用了集群键(时间戳)。跨度>
-
@mildewey 也很清楚,我问的是基于 partition 键的一部分而不是 primary 键的一部分的查询.在某种程度上,可以在分区键的最后部分使用 IN 子句。这对我的用例来说已经足够了。
标签: cassandra cql cassandra-2.0