2012-07-29 4 views
2

사용자 프로필이있는 파일을 5M 프로필이있는 cassandra에 씁니다. 쓰기 작업이 성공적으로 완료되었습니다. 내 열 패밀리의 행 수를 계산하고 싶습니다. cassandra 열 패밀리의 행 수를 계산하는 방법

Keyspace keyspaceOperator = HFactory.createKeyspace(KEY_SPACE, cluster); 
CqlQuery<String,String,Long> cqlQuery = new CqlQuery<String,String,Long>(keyspaceOperator, se, se, new LongSerializer()); 
cqlQuery.setQuery("SELECT COUNT(*) FROM up"); 
QueryResult<CqlRows<String,String,Long>> result = cqlQuery.execute(); 
System.out.println(result.get().getAsCount()); 

그러나 다음 코드는 나에게 출력은 항상 10000 내가 잘못 뭐하는 거지? 그리고 cli에서 어떻게이 작업을 할 수 있습니까?

답변

1

지금은 사용할 수 없습니다. 쿼리 당 10K 행의 기본 제한이 있습니다. 이 티켓 (CASSANDRA-3702)이 아직 있지만 아직 해결되지 않았습니다.

+0

이것은 4415의 복제본입니다. – Julias

1

다른 대안은 RangeSlicesQuery를 통해 반복하는 것입니다. 나는 행과 총 칼럼을 계산하는 "인구 조사"프로그램을 만들었습니다. here's a version for long types. 그러나 이것이 빈번한 활동이라면, 일반적인 지혜는 트랙을 유지하기 위해 별도의 카운터 컬럼을 사용하는 것 같습니다. some discussion here.

1

개수를 제한하기 만하면됩니다. 당신은 카운트가 지금까지 1E9을 가서 기대하지 않는 경우,

SELECT COUNT(*) FROM up LIMIT 1000000000; 

을하지만 (도 및 RangeSlicesQuery) COUNT 전혀 성능이 좋은, 심지어 될 운명이 아니라는 것을 알고. 이들은 본질적으로 관계형 데이터베이스에서 "순차적 스캔"과 같습니다. 카운터는 분산 시스템에서 이런 종류의 문제를 해결하는 더 좋은 방법입니다.

1

예를 들어 here을 참조하십시오.

코드를 자유롭게 사용할 수 있습니다. AstyanaxHector에서 나왔으며 우리는 Cassandra 고객이 Java 인 것을 발견했습니다.

관련 문제