cassandra - Cassandra 集群密钥顺序
问题描述
所以我有一张桌子,看起来像:
CREATE TABLE schema.table (
partitionkey int,
clusterkey text,
value bigint,
PRIMARY KEY ((partitionkey), clusterkey)
);
我们依靠这个表来按clusterkey
for分页正确排序。
问题是:当从 cassandra 返回结果时,看起来它们是根据它们的 ASCII 值排序的,而不是逻辑 AZ 排序。- 对于观看它的人来说,这在程序上是有意义的,但在逻辑上是不合理的。
所以一个查询:
SELECT clusterkey FROM schema.table WHERE partitionkey = 1 ORDER BY clusterkey ASC;
得到左边的结果,当我期待右边的结果时
---------(current)--- ----------(wanted)---
clusterkey clusterkey
--------------------- ---------------------
Other capital a should be top
Starts capital1 Other capital
Starts capital2 Starts capital1
Starts capital3 starts capital1
Starts capital4 Starts capital2
YYYYYYYYYYYY Starts capital3
ZZZZZZZZZZZZ Starts capital4
a should be top YYYYYYYYYYYY
starts capital1 ZZZZZZZZZZZZ
zzzzzzzzzzzz zzzzzzzzzzzz
我知道我们可以将数据更改为全部小写/大写以正确排序,但这会改变数据的外观。- 这绝对是不想要的。
是否可以选择更改当前聚类顺序的方法?
- 或另一种逻辑排序方式?
解决方案
聚类列按字典顺序排序,这意味着大写字符优先于小写字符。
Cassandra 在当前版本中不支持不区分大小写的排序,但 Cassandra 社区要求增强功能提供一个区域设置/排序感知文本比较器,到目前为止,它并没有得到开发者社区的太多关注。
推荐阅读
- html - 为什么这个元素认为它被悬停?
- node.js - 在 TypeScript 中使用本机 JS 方法/调用的正确方法是什么
- javascript - 将滚动应用于特定 DIV
- apollo - Apollo 中的 client.query 和 useQuery 有什么区别?
- tags - 如何向 Svelte/Sapper 降价网站添加类别或标签?
- node.js - 是否可以将 node.js 控制台配置为在浏览器中可见
- python-3.x - python中的用户输入并检查输入是否匹配某些条件
- r - 有没有办法转换 data.table 以便唯一的行元素成为列名,然后显示元素计数?
- scripting - python 可以在网络浏览器中“读取”和识别“页面源代码”的一部分,而无需保存网页吗?
- mysql - 查找包含特定数字的行