实时统计核心是平衡更新节奏、响应延迟与资源开销;80%问题源于设计阶段未厘清“实时”边界(毫秒/秒级/准实时)、“统计”口径及系统承载力。
SQL实时统计不是靠单条SELECT语句堆出来的,核心在于数据更新节奏、查询响应延迟、资源开销三者的平衡。真正落地时,80%的问题出在设计阶段——没想清楚“实时”到底要多实、“统计”到底要算什么、“系统”到底能扛住什么。
不同业务对“实时”容忍度差异极大。下单后10秒内
看到销量变化,和风控场景下200ms内判断交易异常,技术方案完全不一样。
一查就慢,90%是因为没约束时间范围或没利用索引。实时统计不是“查全部”,而是“查最新一段”。
WHERE event_time >= NOW() - INTERVAL '60 seconds',配合event_time上的B-tree索引(pay_status, city, pay_time)
用户刷屏看仪表盘,后端却每秒执行5次一样的SUM(CASE WHEN …),这是典型的设计浪费。
minute_order_summary,含ts_min, city, paid_cnt, amount_sum
REFRESH MATERIALIZED VIEW CONCURRENTLY;MySQL可用触发器+汇总表(注意高并发写冲突);Doris/StarRocks直接建物化视图自动维护stat:city_orders:20250520:14,TTL设为65秒,既防穿透又保新鲜没有监控的实时统计,等于没上线。延迟涨了、数据断了、结果不准了,没人知道。
SELECT MAX(event_time) FROM events,如果超过15秒没更新,立刻告警基本上就这些。不复杂,但容易忽略细节。真正的实战能力,不在写多炫的窗口函数,而在想清楚“谁要什么、什么时候要、能等多久、错一点行不行”。