2017-03-03 8 views
1

나는 Cassandra 사용법을 평가하여 파티션 키를 쿼리하고 Clustered Key에없는 우선 순위 열로 정렬 된 상위 100 개의 결과를 얻습니다. 나는 단지 샤드 키로 질의한다. ORDER BY ORDER BY Cassandra의 보조 색인

CREATE TABLE my_table (
shard_key int, 
enity_id int, 
priority int, 
PRIMARY KEY ((shard_key), entity_id) 
); 
CREATE INDEX prio ON my_table (priority); 

나는

SELECT * FROM my_table WHERE shard_key=1 ORDER BY priority LIMIT 100 

같은 효율적인 CQL 쿼리 카산드라에 가능 쓸 수 아니면 다른 곳에서 찾아야한다? 당신이 카산드라 3.0 또는 상위 버전을 사용하는 경우 도입 카산드라 3.0

+0

어떤 Cassandra 버전을 사용하고 있습니까? –

+0

@AshrafulIslam 상관 없지만 any 일 수 있습니다. 업데이트 : 샤드 키로 만 쿼리하는 것을 잊어 버렸습니다. – Cortlendt

답변

1

보기
구체화,이 같은 구체화 된 뷰 생성이 아닌 기본 키

에 의해 주문보기 구체화 사용할 수 있습니다

shard_key | entity_id | priority 
-----------+-----------+---------- 
     1 |  10 |  100 
     1 |  11 |  101 
     1 |  12 |  102 
     1 |  13 |  103 
     2 |  20 |  200 
:
CREATE MATERIALIZED VIEW my_table_view AS 
    SELECT shard_key, priority, entity_id 
    FROM my_table 
    WHERE shard_key IS NOT NULL AND priority IS NOT NULL AND entity_id IS NOT NULL 
    PRIMARY KEY (shard_key, priority, entity_id); 

는 MY_TABLE에 이러한 데이터가 있다고 가정 0

지금이처럼 조회 할 수 있습니다

SELECT * FROM my_table_view WHERE shard_key = 1 ORDER BY priority ASC LIMIT 100; 

출력은 다음과 같습니다

shard_key | priority | entity_id 
-----------+----------+----------- 
     1 |  100 |  10 
     1 |  101 |  11 
     1 |  102 |  12 
     1 |  103 |  13 
+0

답변을 수락하기 전에 단 하나의 질문 - 이것은 인덱스가 있어도 키가 아닌 열로 주문할 수없고 데이터가 하나의 파티션 키에 있다는 것을 의미합니까? – Cortlendt

+0

@Cortlendt 색인 필드에서 주문 기능을 사용할 수 없습니다. –

0

를 대체 솔루션으로, 당신은 어떤 인덱스 열을 기준으로 주문 Stratio’s Lucene indexes을 고려할 수 있습니다.