集計は合計ではなく関数である
An Aggregate Is a Function, Not a Sum
KafkaとClickHouseでレシートを集計するシステムは、重複配信・遅延到着・パイプライン停止という3つの性質により4度の設計失敗を経験した。最終解は「セル」という最小単位の集計値を、文書から再計算可能な関数として保存する方式。再配信は文書キーで畳み込み、遅延文書はセルをdirtyにして次回再計算するだけで、キーを記憶する必要も全件読み直す必要もない。
集計は挿入されたものの累積和ではなく、その文書の関数である。