2、行情数据特征分析:高频、海量、实时性要求、数据格式(Level1/Level2)
做行情系统优化,第一件事不是看代码,而是看数据。
我见过太多团队,一上来就撸起袖子写缓存、调参数,结果连数据长什么样都没搞清楚。说白了,你不了解你的对手,怎么打赢这场仗?
行情数据有四个核心特征:高频、海量、实时性要求高、数据格式复杂。咱们一个一个拆开看。
2.1 高频:每秒几千笔,不是开玩笑
先说说频率。A股全市场每天大概产生几亿笔行情数据。注意,我说的是「笔」,不是「条」。每一笔成交、每一档委托,都是一条独立的消息。
我个人习惯用这个数字来估算:沪深两市合计,峰值每秒能到 3000~5000 笔。如果是股指期货或者期权,频率更高,能上万。
这意味着什么?
- 你的系统每毫秒都要处理好几笔数据
- 网络延迟、内存分配、GC 停顿,任何一点抖动都会被放大
- 传统的「请求-响应」模型根本扛不住,必须用事件驱动
2.2 海量:一天几个 TB,存哪都是问题
再聊聊量级。全市场 Level2 行情,一天原始数据大概在 1~2 TB 左右。如果加上快照、逐笔成交、逐笔委托,轻松突破 5 TB。
你想想看,一天 5 TB,一个月就是 150 TB。这还只是原始数据,没算索引、副本、备份。
所以,行情系统的存储设计,核心就一句话:热数据放内存,冷数据放磁盘,温数据用 SSD 兜底。
| 数据层级 | 存储介质 | 典型容量 | 访问频率 |
|---|---|---|---|
| 热数据(当日) | 内存 / Redis | 几十 GB | 毫秒级 |
| 温数据(近 7 天) | SSD / 内存映射文件 | 几 TB | 秒级 |
| 冷数据(历史) | HDD / 对象存储 | 几十 TB | 分钟级 |
2.3 实时性要求:延迟是硬指标,不是软约束
行情系统的实时性,不是「尽量快」,而是「必须快」。
交易所的行情推送,从产生到到达用户终端,端到端延迟通常要求在 10 毫秒以内。对于高频交易客户,这个数字甚至要压到 1 毫秒以下。
为什么会这么严格?因为行情延迟直接等于交易成本。你比别人晚 1 毫秒看到价格,可能就错过了最佳买卖点。
所以,优化实时性,本质上是在跟物理极限赛跑:
- 网络层面:用 RDMA 替代 TCP,减少协议栈开销
- 内存层面:用堆外内存、内存池,避免 GC 停顿
- CPU 层面:绑定核心、避免上下文切换
2.4 数据格式:Level1 vs Level2,差别在哪?
最后说说数据格式。国内行情主要分两种:Level1(基础行情) 和 Level2(深度行情)。
Level1 是免费的,每 3 秒推送一次快照,包含五档买卖盘、最新价、成交量等基础信息。数据量小,延迟要求也相对宽松。
Level2 是付费的,每笔成交、每笔委托都会推送。数据量是 Level1 的几十倍,但信息也更丰富:
- 十档买卖盘(甚至全量委托队列)
- 逐笔成交明细(每一笔交易的时间、价格、数量)
- 逐笔委托明细(每一笔挂单的撤单、成交、新增)
我个人习惯用这个比喻:Level1 是看照片,Level2 是看视频。照片只能看到某个瞬间的静态画面,视频能看到整个过程的变化。
| 对比维度 | Level1 | Level2 |
|---|---|---|
| 推送频率 | 3 秒一次 | 逐笔推送(毫秒级) |
| 数据量 | 小(每只股票几十字节) | 大(每只股票几百到几千字节) |
| 信息深度 | 五档买卖盘 | 十档买卖盘 + 逐笔成交 + 逐笔委托 |
| 使用场景 | 普通散户、行情展示 | 量化交易、高频策略 |
2.5 知识体系总览
说了这么多,咱们用一张图来总结一下行情数据的核心特征。这张图是我自己画的结构图,方便你理解各个特征之间的关系:
嗯,这张图把四个特征和对应的优化方向都串起来了。你仔细看,每个特征都不是孤立的——高频带来海量,海量又加剧了实时性压力,而数据格式决定了你用什么策略去处理。
所以,做行情系统优化,不能只看一个点。你得从全局出发,理解数据从哪里来、到哪里去、中间经历了什么。
公众号:蓝海资料掘金营,微信deep3321