【发布时间】:2017-02-18 23:32:35
【问题描述】:
我想查询我的表的完整分区。
我的复合分区键由(id, date, hour_of_timestamp) 组成。 id 和 date 是字符串,hour_of_timestamp 是整数。
由于在摄取数据时出现热点,我需要将 hour_of_timestamp 字段添加到我的分区键中。
现在我想知道查询数据的完整分区最有效的方法是什么?
根据this blog 的说法,使用SELECT * from mytable WHERE id = 'x' AND date = '10-10-2016' AND hour_of_timestamp IN (0,1,...23); 会在协调节点上造成大量开销。
使用TOKEN 函数并使用两个令牌查询分区是否更好?如SELECT * from mytable WHERE TOKEN(id,date,hour_of_timestamp) >= TOKEN('x','10-10-2016',0) AND TOKEN(id,date,hour_of_timestamp) <= TOKEN('x','10-10-2016',23);
所以我的问题是:
我应该使用IN 或TOKEN 查询来查询我的数据的整个分区吗?或者我应该使用 23 个查询(hour_of_timestamp 的每个值一个)并让驱动程序完成其余的工作?
我正在使用 Cassandra 3.0.8 和最新的 Datastax Java 驱动程序连接到 6 节点集群。
【问题讨论】:
-
你能发布你的整个 PRIMARY KEY 定义吗?
-
@Aaron PRIMARY KEY ((log_creator, date, hour), ts, log_id) 是实际定义。我已将问题中的字段名称调整为更“通用”...
ts是timestamp类型,log_id是另一个字符串。
标签: cassandra cql cql3 datastax-java-driver