我是cassandra的新手,还没有运行它,但我的业务逻辑需要创建这样的表。
CREATE TABLE Index(
user_id uuid,
keyword text,
score text,
fID int,
PRIMARY KEY (user_id, keyword, score); )
WITH CLUSTERING ORDER BY (score DESC) and COMPACT STORAGE;这是可能还是不可能?我只有一列(FID)不是我的综合索引的一部分,所以我希望我能够应用compact_storage设置。注意我按综合索引的第三列排序,而不是按第二列排序。我还需要压缩存储,这样关键字就不会为每个fID重复。
发布于 2015-02-27 03:32:46
关于您的CREATE TABLE语句,最初有一些事情:
;)上出错。由于reserved word.是
注意我按综合索引的第三列排序,而不是按第二列排序。
指定CLUSTERING ORDER.时,不能跳过
然而,我确实在这里看到了一个选择。根据您的查询需求,您只需在主键定义中对keyword和score重新排序,然后它就可以工作了:
CREATE TABLE giveMeABetterName(
user_id uuid,
keyword text,
score text,
fID int,
PRIMARY KEY (user_id, score, keyword)
) WITH CLUSTERING ORDER BY (score DESC) and COMPACT STORAGE;这样,您就可以按user_id和您的行进行查询(关键字?)将由score订购
SELECT * FROM giveMeABetterName WHERE `user_id`=1b325b66-8ae5-4a2e-a33d-ee9b5ad464b4;如果这不适用于您的业务逻辑,那么您可能不得不修改您的数据模型。但在指定CLUSTERING ORDER时,不能跳过聚类键。
编辑
,但是列的重新排序对我不起作用。我可以做这样的事情吗?
WITH CLUSTERING ORDER BY (keyword asc, score desc)
让我们看看这里的一些选项。我用您的原始主键创建了一个表,但使用的是这个聚类顺序。这在技术上是可行的,但看看它是如何处理我的样本数据(视频游戏关键字)的:
aploetz@cqlsh:stackoverflow> SELECT * FROM givemeabettername WHERE user_id=dbeddd12-40c9-4f84-8c41-162dfb93a69f;
user_id | keyword | score | fid
--------------------------------------+------------------+-------+-----
dbeddd12-40c9-4f84-8c41-162dfb93a69f | Assassin's creed | 87 | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | Battlefield 4 | 9 | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | Uncharted 2 | 91 | 0
(3 rows)另一方面,如果我将主键改为首先在score上集群(并相应地调整集群顺序),则相同的查询将返回以下内容:
user_id | score | keyword | fid
--------------------------------------+-------+------------------+-----
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 91 | Uncharted 2 | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 87 | Assassin's creed | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 9 | Battlefield 4 | 0请注意,您需要将score的数据类型从文本更改为数字(整型/大整型),以避免ASCII码排序,如下所示:
user_id | score | keyword | fid
--------------------------------------+-------+------------------+-----
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 91 | Uncharted 2 | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 9 | Battlefield 4 | 0
dbeddd12-40c9-4f84-8c41-162dfb93a69f | 87 | Assassin's creed | 0在Compound Keys and Clustering上通读这篇DataStax文档可能会对您有所帮助。
https://stackoverflow.com/questions/28748922
复制相似问题