Partitioniere das Ledger nach Konto und Zeit, halte aktuelle Daten heiß und alte Daten kalt und behandle Rows als append-only, unveränderliches Ledger - sodass die Historie eines einzelnen Kontos eine kleine, indexierte Scheibe ist, niemals ein Scan über Milliarden Rows. Das Zugriffsmuster ist immer "ein Konto, ein Datumsbereich", also partitioniere passend dazu.
Architektur
Write ─▶ Ledger table (append-only, immutable)
partition by (account_hash, month)
│
┌────────┴─────────┐
HOT tier COLD tier
last 3 mo older
Postgres/SSD S3/Parquet, Glacier
│ │
index-seek keyset paginate ──▶ API (account+range)
