2016-07-07 2 views
2

나는 다음과 같은 스키마 카산드라되는 NoSQL 데이터베이스 내 데이터를 저장합니다. 데이터가 시계열로 배열되고 첫날에 데이터가 정렬되기를 기대하지만 오늘은 바뀌 었습니다.카산드라 시계열 정렬

Wed Jul 06 20:09:04 UTC 2016 
Wed Jul 06 19:10:04 UTC 2016 
Thu Jul 07 19:09:04 UTC 2016. 

데이터베이스는 날짜를 무시하지만 시간 만 신경 쓰면된다고 생각합니다.

어떻게 해결할 수 있습니까?

답변

4
SELECT * FROM bidding_user LIMIT 5; 

여기서 문제는 WHERE 절을 지정하지 않았기 때문입니다. 카산드라는 파티션 키 내에서만 정렬 순서를 유지합니다. 귀하의 파티션 키는 user_id입니다. 제 생각에 (current_time 열이 아닌 user_id이 아닌) 첫 번째 두 행은 user_id이고 다른 행의 첫 번째 행은 user_id입니다.

CREATE TABLE stackoverflow.timestamptest (
    userid text, 
    activetime timestamp, 
    value text, 
    PRIMARY KEY (userid, activetime) 
) WITH CLUSTERING ORDER BY (activetime ASC) 

내가 절에, 내가 할 WHERE없이 조회 할 경우 : 당신이 볼 수 있듯이

[email protected]:stackoverflow> SELECT userid,activetime FROM timestamptest ; 

userid | activetime 
--------+-------------------------- 
     a | 2015-09-25 11:33:33+0000 
     a | 2015-10-22 14:26:00+0000 
     c | 2015-12-28 19:12:00+0000 
     d | 2016-01-22 14:57:54+0000 
     d | 2016-01-22 14:57:54+0000 
     d | 2016-07-07 19:44:04+0000 
     b | 2015-10-22 14:26:00+0000 
     b | 2016-07-07 19:44:10+0000 

(8 rows) 

, 내 클러스터링 키의 순서 (activetime가) 정말

은 다음 표를 고려 각 파티션 키 ( userid) 내에서만 의미가 있습니다.

즉, 결과 집합을 정렬하려면 쿼리에 WHERE 절에 user_id 파티션 키를 지정해야합니다. 에

하지 자기 홍보 또는 아무것도,하지만 난 당신이 더 잘 이해하는 데 도움이 있습니다이 주제 지난해 초에 기사를 썼다 :

PlanetCassandra: We Shall Have Order!current_time 유형 text이다

0

그렇게 분류입니다 날짜 문자열의 문자를 기반으로 수행됩니다.

current_time의 유형을 timestamp으로 변경해보십시오.