2017-12-28 31 views
0

저는 Python (DataStax) 드라이버와 CQL BatchStatements [1]를 통해 Cassandra 3.12에 삽입하고 있습니다. 작은 수의 파티션 (10-20)을 생성하는 기본 키를 사용하면 모든 것이 잘 작동하지만 데이터는 노드간에 균일하게 분배되지 않습니다.Partition Too Large 오류를 일으키는 기본 키 카디널리티가 있습니까?

예를 들어 시간 외에 시간이나 클라이언트 IP와 같이 상위 카디널리티 열을 포함하는 경우 행 수와 행 길이가 같더라도 일괄 처리 삽입으로 인해 너무 큰 파티션 오류가 발생합니다.

상위 카디널리티 키가 많을수록 작은 파티션이됩니다. 더 많은 파티션을 생성하는 키가이 오류를 어떻게 초래합니까? 내가 읽은 모든 것을 일괄 삽입은 하나의 파티션을 포함하는 배치로, 안티 패턴이 될 수 있다는 것을 알 수 있지만


[1], 난 아직이 사건에 대한 비동기 또는 현재의 삽입에 비해 가장 높은 처리량을 참조하십시오.


CREATE TABLE test ( date date, time time, cid text, loc text, src text, dst text, size bigint, s_bytes bigint, d_bytes bigint, time_ms bigint, log text, PRIMARY KEY ((date, loc, cid), src, time, log) ) WITH compression = { 'class' : 'LZ4Compressor' } AND compaction = {'compaction_window_size': '1', 'compaction_window_unit': 'DAYS', 'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'};

+0

파티션 키로 옮긴 열의 크기는 얼마입니까? –

+0

@AlexOtt 위의 표에서 날짜 (유형 날짜)를 시간 소인 유형 열로 바꿉니다. 데이터와 시간 열을 모두 포함하면 동일한 문제가 발생합니다. 카디널리티를 참조하는 이유는 시간을 추가하면 더 많은 파티션이 만들어지기 (해상도 때문 임) 행 크기가 변경되지 않기 때문입니다. 나는 많은 파티션이 필요하다고 생각하지 않지만 기본 키와 오류 사이의 관계를 이해하려고합니다. – MattK

답변

2

난 당신이 Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large 오류를 의미하는 것 같아요?

이는 하나의 일괄 처리로 데이터의 기본 50KB입니다 매개 변수 batch_size_fail_threshold_in_kb의 - 그리고 cassandra.yml에 batch_size_warn_threshold_in_kb 통해 5KB 임계 값에 일찍에서 경고 (http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/configuration/configCassandra_yaml.html 참조)도 있습니다.

데이터 모델을 공유 할 수 있습니까? 컬럼을 추가하는 것만으로 파티션 키가 바뀌지 않는다는 것을 의미합니다. 클러스터링 컬럼을 추가하여 기본 키를 변경했을 수도 있습니다. 힌트 : PRIMARY KEY (a,b,c,d)은 파티션 키로 a 만 사용하고 PRIMARY KEY ((a,b),c,d)은 파티션 키로 a,b을 사용합니다. 간과하기 쉬운 실수입니다.

그 외에도 추가 열에는 약간의 공간이 필요합니다. 이제 임계 값에 쉽게 도달 할 수 있으므로 배치 크기를 줄이면서 다시 한도에 맞 춥니 다. 일반적으로 위에서 언급 한 것처럼 하나의 파티션에 영향을주는 upserts 만 배치하는 것이 좋습니다. 또한 비동기 쿼리를 사용하고 다른 코디네이터에게 병렬 요청을 만들어 속도를 좀 더 높입니다.

+0

데이터 모델을 게시 할 것이지만이 경우에는 열을 추가하지 않고 하나를 다른 것보다 높은 카디널리티가있는 PK로 옮깁니다. 행 너비는 동일하게 유지됩니다. – MattK

+0

위의 표가 추가되었습니다. – MattK

+0

문제는 실제로 삽입되는 배치의 크기가 아니며 결과로 생성되는 파티션의 크기가 아닙니다. – MattK