2012-12-04 50 views
1

我不確定這是否是Cassandra的特定問題,或者這也可以屬於PHP,所以我很抱歉標記PHPCassandra列按UTF8編碼字符串排序

所以基本上我對他們的列名,這是這樣的訂貨一些長期排列:

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

所以這是工作,我想它的工作方式,但我不知道如何它是否實際訂購了這些字符串。

什麼是我不明白的是,第一個字符串2012-01-01_aa_99999似乎更強壯那麼剩下的兩個,我很擔心,在某些時候它可能會忽略這是一個日期字符串的第一部分,並把一些字符串,他們不應該屬於。

在我的情況下,這些字符串由相當多的部分組成,所以我真的很在意這一點,所以基本上我需要一些解釋,這種排序如何發生在內部。

回答

2

我不明白它如何實際訂購這些字符串。

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

+0

現在它有很大的意義,你不知道我需要如何創建字典格式的時間戳。好吧,無論如何謝謝你的回答,它告訴我,我目前的方法可能會產生很多問題。 – Linas

+1

時間戳可以按數字排序。通用格式是YYYYMMDD。 –

+1

如果你想要更高的精度,你也可以使用unix時代作爲時間戳。 –

1

我有同樣的問題,因爲我想構建一個具有良好理解的排序能力的複合主鍵索引。事實證明,Cassandra似乎使用byte-by-byte binary comparison來比較UTF-8字符串......從邏輯角度來看,這實際上是一個完全破碎的排序函數。例如,如果在字符串中混合了ASCII和漢字字符,那麼排序順序將是有效的隨機數。但是,只要知道此排序順序,就可以設計圍繞它的使用模式。

當然,這可能很容易修復,而且它幾乎是單行更改的代碼,可以在「真實」排序功能中進行修補。當然,這需要額外的CPU時間。

+0

+1鏈接到字節到字節比較方法 – jorgebg