집계는 합계가 아니라 함수다: 중복·지연·장애를 버틴 ClickHouse 설계
An Aggregate Is a Function, Not a Sum
Kafka로 들어온 영수증을 ClickHouse에 저장하고 매출 보고서를 만드는 시스템에서 저자는 네 번의 시도를 거쳤다. 삽입 시 합산은 중복을 영원히 두 번 세고, 넓은 테이블 재계산은 4,600만 행을 읽어 50만 8천 행만 쓰며, 키 기억은 메모리에 들어가지 않고, 읽기 시 계산은 보고서 하나에 35억 행을 읽는다. 해법은 집계를 문서의 함수로 정의하는 것: 문서 키로 중복을 접고, 셀 단위로 재계산하며, 측정값은 셀 간에 합쳐진다.
재시도할 때마다 실패 전에 행을 먼저 썼기 때문에, 재시도할 때마다 사본이 하나씩 더 저장되었다. 문서가 여러 번씩 들어오기 시작했고, 중복 제거 자체가 중복을 만들어내고 있었다.