Read path is now ClickHouse — entity event queries are 12× faster
We finished the Phase 4 read-path cutover. Content event queries that used to hit Postgres now run against ClickHouse with sub-second p95 across the 48M-article research corpus on our local stack (May 2026, before the production launch).
The platform’s content event read path is now backed by ClickHouse for every public API consumer. The historical mix of Postgres-direct queries scattered across services has been consolidated behind two service abstractions — ContentAnalyticsService for analytical reads and EntityGraphService for graph traversals.
What changed for you:
- Entity event queries (
GET /entities/:id/events) now return in <800ms p95 across that local research corpus — previously 9–14 seconds for high-volume entities. - Mention timeseries (
GET /entities/:id/mentions/timeseries) goes from sequential Postgres window functions to a single ClickHouse aggregate. No API surface change. - Cooccurrence queries are no longer rate-limited. They were costing ~3 seconds each on PG; CH is in tens of milliseconds.
What didn’t change:
- All API contracts are byte-identical. No client work required.
- Pricing for these ops is unchanged — light search remains 20cr, deep dive remains 300cr.
- Write path is still Postgres for now (Phase 4.5 cutover is in flight; events emit to Kafka and are consumed by ClickHouse downstream).
If you’ve been seeing timeouts on high-volume entity endpoints, they should be gone. If they aren’t, tell us — we want the receipts.