Jquery Cassandra-WHERE子句范围/标记说明

Jquery Cassandra-WHERE子句范围/标记说明,jquery,cassandra,token,where-clause,Jquery,Cassandra,Token,Where Clause,我试图理解如何使用Cassandra执行全范围查询,并根据本文澄清关于令牌使用的一些不确定性 假设我有下表: CREATE TABLE space.rocket ( id timeuuid, group text, priority smallint, date text, // Will hold YYYY-MM-DD PRIMARY KEY ((group , date) , priority, id)); 使用范围where子句的最佳选项是什么

我试图理解如何使用Cassandra执行全范围查询,并根据本文澄清关于令牌使用的一些不确定性

假设我有下表:

CREATE TABLE space.rocket (
    id timeuuid, 
    group text,
    priority smallint, 
    date text, // Will hold YYYY-MM-DD
    PRIMARY KEY ((group , date) , priority, id));
使用范围where子句的最佳选项是什么


例如: 我是否可以执行组、日期和优先级的范围,如下所示:

SELECT * FROM space.rocket
    WHERE token(group, date) => token('group-name', '2017-17-09')
    AND token(group, date) < token('group-name', '2017-17-10')
    AND priority >= (0) AND priority <= (10) # or priority IN (0,1,2...10)
SELECT * FROM space.rocket
    WHERE token(group, date, priority) => token('group-name', '2017-17-09', 0)
    AND token(group, date, priority) < token('group-name', '2017-17-10', 11)
SELECT * FROM space.rocket
    WHERE token(group, date, priority, id) => token('group-name', '2017-17-09', 0, timeuuidStart)
    AND token(group, date, priority, id) < token('group-name', '2017-17-10', 11, timeuuidFinish)
从space.rocket中选择*
其中,令牌(组,日期)=>令牌(“组名”,“2017-17-09”)
和代币(集团,日期)<代币(‘集团名称’,‘2017-17-10’)
优先级>=(0)和优先级令牌('group-name','2017-17-09',0)
和令牌(组、日期、优先级)
还有一个查询,它还将包含一个二级索引(id)范围,如下所示:

SELECT * FROM space.rocket
    WHERE token(group, date) => token('group-name', '2017-17-09')
    AND token(group, date) < token('group-name', '2017-17-10')
    AND priority >= (0) AND priority <= (10) # or priority IN (0,1,2...10)
SELECT * FROM space.rocket
    WHERE token(group, date, priority) => token('group-name', '2017-17-09', 0)
    AND token(group, date, priority) < token('group-name', '2017-17-10', 11)
SELECT * FROM space.rocket
    WHERE token(group, date, priority, id) => token('group-name', '2017-17-09', 0, timeuuidStart)
    AND token(group, date, priority, id) < token('group-name', '2017-17-10', 11, timeuuidFinish)
从space.rocket中选择*
其中令牌(组、日期、优先级、id)=>令牌('group-name','2017-17-09',0,timeuuidStart)
和令牌(组、日期、优先级、id)
或者,如何查询组列表和日期范围


请告知,
谢谢

您应该只对分区键执行令牌范围查询

在您的情况下,分区键是
(组,日期)
。因此,只有您的第一个查询是正确的

SELECT * FROM space.rocket
    WHERE token(group, date) => token('group-name', '2017-17-09')
    AND token(group, date) < token('group-name', '2017-17-10')
    AND priority >= (0) AND priority <= (10) # or priority IN (0,1,2...10)
从space.rocket中选择*
其中,令牌(组,日期)=>令牌(“组名”,“2017-17-09”)
和代币(集团,日期)<代币(‘集团名称’,‘2017-17-10’)

优先级>=(0)和优先级获取所需数据范围的最佳方法是为所需的每个分区键启动异步查询,并在应用程序端合并结果


在集群列上使用IN或slice关系不会有太大区别

如果我没有使用ByteOrderedPartitioner,会有什么后果?查询将返回正确的结果(按where条件),但顺序错误?还是会对性能产生影响?请告知,谢谢!如果您没有使用ByteOrderedPartitioner,那么您的查询就没有意义了,您将无法获得2017-17-09和2017-17-10之间的数据。因为日期范围之外的某个日期的标记可能在日期范围内,反之亦然。