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