{"page":"/blog/rtb-bidder-architecture","modified":"2026-11-10","license":"https://creativecommons.org/licenses/by/4.0/","columns":["Data","Access pattern","Common choices (latest release)","Why this choice"],"rows":[["Campaigns, line items, creatives","Read on every request; changes every few seconds","In-process index built from a relational database","No network hop on the hot path"],["User profiles and segments","Point reads at full QPS; bulk writes from batch jobs","Aerospike (8.2.0.1, 28 Oct 2026); Amazon DynamoDB","Predictable low latency on flash at billions of keys"],["Frequency counters","Read and increment per impression, expire after a window","Redis (8.10.3, 26 Oct 2026) or the profile store itself","Atomic increments with time-to-live"],["Event stream","Append-only, very high write rate, replayable","Apache Kafka (4.4.0); Amazon Kinesis Data Streams","Decouples the bidder from slow consumers"],["Raw event archive","Write once, scan for analytics and audits","Amazon S3 or another object store, Parquet files","Cheap, columnar, partitioned by hour"],["Reporting aggregates","Sub-second slice-and-dice for dashboards","Apache Druid (38.0.0, 1 Oct 2026); ClickHouse (26.10, 24 Oct 2026)","Columnar storage with time partitioning"],["Budget ledger","Exact totals per campaign, many concurrent writers","Relational database fed by the event stream","Money needs consistency, not microseconds"]],"sourceUrls":[[],["https://github.com/aerospike/aerospike-server/releases"],["https://github.com/redis/redis/releases"],["https://downloads.apache.org/kafka/"],[],["https://github.com/apache/druid/releases","https://github.com/ClickHouse/ClickHouse/releases"],[]]}