首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cassandra综合指数与紧凑存储

cassandra综合指数与紧凑存储
EN

Stack Overflow用户
提问于 2015-02-27 01:28:48
回答 1查看 169关注 0票数 1

我是cassandra的新手,还没有运行它,但我的业务逻辑需要创建这样的表。

代码语言:javascript
运行
复制
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重复。

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 03:32:46

关于您的CREATE TABLE语句,最初有一些事情:

  1. 它将在您的主键定义后的分号(;)上出错。由于reserved word.

  • ,因此您需要选择一个新名称

注意我按综合索引的第三列排序,而不是按第二列排序。

指定CLUSTERING ORDER.时,不能跳过

  1. clustering key

然而,我确实在这里看到了一个选择。根据您的查询需求,您只需在主键定义中对keywordscore重新排序,然后它就可以工作了:

代码语言:javascript
运行
复制
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订购

代码语言:javascript
运行
复制
SELECT * FROM giveMeABetterName WHERE `user_id`=1b325b66-8ae5-4a2e-a33d-ee9b5ad464b4;

如果这不适用于您的业务逻辑,那么您可能不得不修改您的数据模型。但在指定CLUSTERING ORDER时,不能跳过聚类键。

编辑

,但是列的重新排序对我不起作用。我可以做这样的事情吗?WITH CLUSTERING ORDER BY (keyword asc, score desc)

让我们看看这里的一些选项。我用您的原始主键创建了一个表,但使用的是这个聚类顺序。这在技术上是可行的,但看看它是如何处理我的样本数据(视频游戏关键字)的:

代码语言:javascript
运行
复制
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上集群(并相应地调整集群顺序),则相同的查询将返回以下内容:

代码语言:javascript
运行
复制
 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码排序,如下所示:

代码语言:javascript
运行
复制
 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文档可能会对您有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28748922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档