2013-02-05 2 views
2

가 좀 카산드라 관련 질문이 카산드라 열 가족의 모든 행을 나열하려면 . 만 해당)과 값 필드 나는 다음과 같은 CF를 만들 계획사용 아 스티 아낙 스를

CREATE TABLE data (
    id text, 
    createdate text, 
    updatedate timeuuid, 
    value text, 
    PRIMARY KEY (id, updatedate) 
); 

CREATE TABLE data_createdate (
    id text, 
    createdate text, 
    value text, 
    PRIMARY KEY (id, createdate) 
); 

처럼 내 사용 쿼리는 다음과 같습니다

  • 이 모든 행 (ID, 값, createdate, updatedate)를 얻을 같은 CQL 있도록 이럴거야 SELECT * FROM data

나는 페이징을 어떻게 하는가? 분할 저장 기능을 주문 보존으로 설정해야하므로 범위 값에 token(id)을 사용하여 페이지를 처리 ​​할 수 ​​있습니다. 이 같은 CQL은 SELECT * FROM data where updatedate > startdate and updatedate < enddate

을 할 수 있도록

  • 는 다시, updatedate 범위의 모든 행을 얻을, 어떻게 페이징을합니까?

    • 생성 범위가있는 모든 행을 가져 오는 것은 위 질문과 유사하지만 data_createdate CF에 대해 CQL을 실행할 수 있습니다. 다시 말하지만, 페이징은 어떻게해야합니까?

    어떤 제안이나 의견이 있으십니까? 고마워.

답변

1

페이징을 원할 경우 마지막으로 검색 한 세트의 마지막 키를 저장하려고하면 다음 번에 다음 페이지 슬라이스를 가져올 때 쿼리의 진입 점이 마지막으로 저장된 키가됩니다. 이 링크를 통해 당신을 건의하십시오 http://www.datastax.com/docs/1.2/cql_cli/using/paging.

1

일반적으로 열 패밀리의 모든 키를 반복해야하는 작업은 피해야합니다. RDBM 에서처럼 올바른 인덱스가 설정된 쿼리 만 수행하면됩니다. updatedate 이후

당신이 페이징을 수행하는 해당 컬럼에 범위 쿼리를 사용할 수있는 data 테이블의 화합물 행 키의 일부입니다 (정확히 카산드라에서 페이징을 수행하는 방법 불행하게도, 매우 복잡한 주제이다). 이는 두 가지 첫 번째 사용 사례가 실제로 동일 함을 의미합니다.

세 번째 사례가 무슨 뜻인지 잘 모르겠습니까? createdate에 대한 범위 쿼리를 사용하여 data 행을 쿼리하고 싶습니다. SELECT * FROM data WHERE createdate > '20130206' AND createdate < '20130228'? 나는 두 번째 테이블 (data_createdate)하고.

에 맞는 위치를 당신이 하나 개의 솔루션이 data (CREATE INDEX data_createdate_index ON data (createdate))의 createdate 열에 보조 인덱스를 추가 할 수 뜻 무슨 생각을 의미하는 경우 혼동하고있다. You can read more about secondary indexing in the documentation.