2014-06-05 3 views
0

나는 아래 처음 디자인 한 정적 열 가족은카산드라 데이터 모델링 접근

create table APP_DATA (
CODE varchar, 

DATA varchar, 

CREATED_DT timestamp, 

REQUEST_TYPE int, 

STATUS int, 

..... #Some more columns ..., 

PRIMARY KEY ((CODE,DATA),CREATED_DT)) 

with clustering order by (CREATED_DT desc); 

지금, 나는 아래

1) SELECT 조회 할

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111'; 

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111' AND CREATED_DT<=dateof(now()) AND STATUS=0; 

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111' AND CREATED_DT<=dateof(now()) AND STATUS=0 AND REQUEST_TYPE=9; 

2)

삭제
DELETE FROM APP_DATA WHERE CREATED_DT+5<=sysdate; 

어떻게해야합니까? 데이터 모델링을 진행합니까? 위의 선택 및 삭제를 더 빠르게 수행하려면 어떻게 설계해야합니까? 주십시오.

감사합니다.

답변

0

안녕하세요 먼저 PRIMARY KEY에서 CREATED_DT 열을 가져 와서 PRIMARY KEY에 두 개의 열로 남겨 둡니다. CREATED_DT를 일반 열로 만들고 쿼리 할 보조 인덱스를 만듭니다.

두 번째로 오래된 데이터 (CREATED_DT + 5 < = sysdate)를 삭제하려면 Cassandra의 TTL (Time to Live) 기능을 사용하십시오.

도움이되기를 바랍니다.

0

여기 있습니다. 나는 테이블이 좋아 보이며 CREATED_DT를 기본 키에서 꺼내야합니다. 왜냐하면 DESC로 그룹화하기 때문입니다. 그리고 그렇게하기 위해서는 클러스터링 컬럼을 만들어야합니다.

두 번째로 카산드라 사례는 쿼리 기반 방법입니다. 쿼리를 만족시키는 테이블을 만드는 것을 의미합니다. 가능한 한 많은 보조 색인을 생성하지 말고 쿼리를 만족시키기 위해 테이블을 생성하십시오.

DML은 파티션 키를 기반으로해야합니다.

+0

클러스터링 컬럼으로 CREATED_DT를 생성하지 않고 그룹화 할 수 있습니까? –

+0

@Syed. Cassandra에서는 클러스터링 컬럼 만 그룹화 할 수 있습니다. 파티션 키는 데이터를 그룹화하는 데 사용되는 반면 기본적으로 디스크의 순서 지정 기준에 사용됩니다. – Mike

+0

당신은 마이크를 흔든다. 이것은 나의 의심을 제거했다. –