2016-11-17 29 views
0

我正在努力處理卡桑德拉數據的數據順序。我有這樣卡桑德拉數據訂單沒有通過條件

tbl_data 
- yymmddhh (text) 
- data (text) 

離別鍵的表是 'yymmddhh'

我加入了數據這樣

'16-11-17-01', 'a' 
'16-11-17-01', 'b' 
'16-11-17-02', 'c' 
'16-11-17-03', 'xyz' 
'16-11-17-03', 'e' 
'16-11-17-03', 'f' 

SELECT * FROM tbl_data極限10;

我期待數據按照添加數據的順序排列。但它是這樣的數據

'16-11-17-03', 'f' 
'16-11-17-03', 'e' 
'16-11-17-01', 'a' 

即最新的記錄第一或一些隨機順序。我需要的數據與我添加的順序相同。我無法弄清楚我的情況下數據的默認順序。另外,我不想將分區鍵傳遞到條件,因爲它的開銷會記住我的價值。請向我建議解決方案。

+0

在Cassandra中,您無法通過分區鍵或您添加數據的順序預計訂單數據。 Cassandra按聚類列排序數據列 –

+0

Cassandra不適用於您的用例。您必須通過分區鍵進行篩選,以便在結果集上執行任何有意義的排序順序。完整的解釋可以在這裏找到:http:// www。datastax.com/dev/blog/we-shall-have-order – Aaron

回答

4

恐怕你會爲此而永遠掙扎。

根據註釋,除非您通過更改partitioner確實瞭解自己在做什麼,否則無法確定分區外的順序。

請仔細閱讀suggested鏈接,並在thisthis SO答案理解你爲什麼以這種特定順序獲取記錄(是的,他們是命令...)。

一個可能的解決方案,但是,是添加timestamp聚集鍵,並更改分區鍵,一個簡單的「年月月日日」:

tbl_data 
- yymmdd (timestamp) 
- hhmmssMMM (timestamp) 
- data (text) 

現在你存儲由天的基礎上一天的數據(即您需要知道您查詢數據的那一天),並且您的數據在每個分區(即每一天)內的順序按timestamp列排序,因此對於您的要求,您可以在那裏存儲插入時間的記錄。

現在,如果你每天不插入數據,你真的需要跟蹤插入日期,另一個(很簡單)表:

CREATE TABLE inserted_days (
    yymmdd timestamp PRIMARY KEY 
); 

發出

SELECT * FROM inserted_days 

會掃描所有這個分區,以隨機順序返回記錄(從你的應用程序的角度來看,所以你需要對它進行排序),但在這裏我們談論的是365年的記錄,你不需要擔心。這很容易做到,而且不會導致無法管理的開銷。

HTH。