Cassandra列按UTF8编码的字符串排序

时间:2012-12-04 18:58:35

标签: php cassandra

我不确定这是Cassandra的具体问题还是属于PHP,所以我很抱歉标记PHP

所以基本上我按列名称排序一些长行列,如下所示:

2012-01-01_aa_99999  |  2012-01-01_aaa  |  2012-01-12_aaaaa

所以这是我希望它工作的方式,但我不明白它是如何实际订购这些字符串的。

我不清楚的是,第一个字符串2012-01-01_aa_99999似乎比其余两个更大,我担心在某些时候它可能会忽略字符串的第一部分 date 并将一些字符串放在他们不应该属于的地方。

在我的情况下,这些字符串由相当多的部分组成,所以我真的很关心这个,所以基本上我需要一些解释如何在内部进行这种排序。

2 个答案:

答案 0 :(得分:2)

  

我不明白它是如何命令这些字符串的。

您提供的字符串似乎是lexicographically ordered

答案 1 :(得分:1)

我有同样的问题,因为我想构建一个具有良好理解的排序能力的复合主键索引。事实证明,Cassandra似乎使用byte-by-byte binary comparison来比较UTF-8字符串......从逻辑角度来看,这确实是一个完全破坏的排序函数。例如,如果字符串中包含混合的ASCII和汉字字符,则排序顺序实际上是随机的。但是,只要知道此排序顺序,就可以围绕它设计使用模式。

当然,这可以很容易地修复,并且几乎可以单行更改代码以修补"真正的"排序功能。当然,这需要额外的CPU时间。