2015-01-28 2 views
1
키 파티션


카산드라 2.0.11 - 열 수는

CREATE TABLE temperature 
(
    weatherstation_id text, 
    event_time timestamp, 
    temperature text, 
    PRIMARY KEY (weatherstation_id,event_time) 
); 

그래서 weatherstation_id 파티션 키이고 event_time는 클러스터링 열입니다 http://planetcassandra.org/blog/getting-started-with-time-series-data-modeling/에서 가져온 테이블 다음 사항을 고려 할 수 있습니다.
데이터는 해당 테이블에로드 된 후 우리는 쿼리 실행

SELECT COUNT(1) FROM temperature WHERE weatherstation_id = '1234ABCD' 

그래서 실제로 우리가 기본 카산드라 저장 행의 열 번호를 요구하고있다.

1) O (1) 작업입니까?
2) 그렇지 않은 경우 - cassandra 스토리지 행의 계산 열에서 O (1)을 달성하는 방법은 무엇입니까? 카운터 사용?

(나는 카산드라 v2.0.11을 사용하고 있습니다)

는 파티션을 스캔과 열의 수를 계산해야하기 때문에 그것은, 오 (1) 작동하지 않습니다 당신

답변

3

감사드립니다. 일정한 시간을 원하면 다른 방법으로 추적해야합니다. 카운터 열을 사용할 수 있지만 먼저 this을 읽어야합니다.

+0

나는 파티션 내의 열 개수가 파티션 메타 데이터 또는 그와 비슷한 것으로 저장되지 않는다는 것에 상당히 놀랐다 –

+1

@ fuggy_yama 열 개수 저장은 도움이되지 않습니다. 파티션의 데이터는 잠재적으로 여러 SSTable 및 Memtable에 분산 될 수 있으며 계수를 결합해야합니다. 불행히도 동일한 열이 둘 이상의 위치에 존재할 수 있기 때문에이 개수를 더할 수 없습니다. –

+0

좋은 점 @MichaelMior –

0

저는 이런 문제에 대해 롤업 방식을 사용하고 있습니다. 이벤트를 테이블에 저장 한 다음 정기적으로 작업을 실행하여 데이터에 대해 필요한 모든 통계를 집계 한 다음 다른 테이블에 삽입하십시오. 두 번째 테이블은 캐시처럼 작동하므로 웹 서버를 실행중인 경우 즉시 해당 통계를 제공 할 수 있습니다. 원하는 통계가있는 행에 직접 연결되는 파티션 키를 사용하면 O (1) 액세스 시간이됩니다. 단점은 롤업 테이블이 주어진 순간에 정확한 카운트를 가지지 않을 것이지만, 분산 컴퓨팅을 사용하면 정답에 가깝기 때문에 일반적으로 충분합니다.

+0

(내 경우에는 100 % 정확한 카운트가 필요하지 않음)하지만 통계를 계산하려면 예약 된 hadoop 작업을 실행해야합니다. - hadoop 작업이 비싸지 않습니까? –

+1

처리중인 테이블의 크기가 클 경우 Hadoop 작업의 비용이 높아질 수 있습니다. 롤업을하는 경우 각 업데이트에서 동일한 데이터를 다시 스캔하지 않아야합니다. Hadoop 외에도 스파크와 같은 다른 접근법이 있습니다. –

+0

특히 Spark Streaming을 보면 지정된 시간 내에 카운트를 업데이트 할 수 있습니다. –