1. 逐笔数据特征与压缩需求分析
逐笔数据是行情系统中最细粒度、信息量最大的一类数据,通常包括逐笔成交(Trade)与逐笔委托(Order)两条独立流。理解它的字段结构、时间序列特性和规模增长规律,是选择压缩存储格式的前提。本节先把这个“被压缩对象”讲清楚,再从中推导出压缩格式必须满足的核心需求。
一、字段结构:定长骨架 + 稀疏可变部分
以沪深交易所 Level-2 逐笔数据为例,逐笔成交的典型字段包括:证券代码、成交时间(精确到毫秒或微秒)、成交价格、成交数量、成交金额、买卖方向(主动买/主动卖)、成交编号、买方委托编号、卖方委托编号等。逐笔委托则包含证券代码、委托时间、委托价格、委托数量、买卖方向、委托类别(市价/限价/本方最优等)、委托编号等。
从存储角度看,这些字段可以分成三类:定长数值字段(价格、数量、编号)、枚举字段(方向、委托类别,取值极少)、关联字段(买卖双方委托编号,用于撮合还原)。其中价格和数量虽然数值范围大,但相邻记录间变化很小;方向、类别等枚举字段重复率极高;委托编号则近似单调递增。这三类特征分别对应增量编码、字典编码和差分编码的适用场景,是后续格式选型的直接依据。
二、时间序列特性:有序、成簇、可差分
逐笔数据天然按时间有序到达,同一证券的连续记录时间戳间隔往往在微秒到毫秒级,且大量记录共享同一时间戳(同一笔撮合产生多条成交)。这意味着时间戳字段做差分后,绝大多数差值是小整数甚至 0,非常适合变长整数编码。同时,逐笔成交与逐笔委托之间存在撮合关联:一笔成交对应一条买方委托和一条卖方委托,通过委托编号可以还原订单生命周期。压缩格式若破坏了这种关联顺序,历史回溯时的重放成本会显著上升。
三、数据规模与增长趋势
规模是压缩需求最直接的驱动力。以 A 股全市场为例,单日逐笔成交记录量在数千万到上亿条量级,逐笔委托量通常为成交量的 2~4 倍。若每条记录按 40~60 字节的紧凑二进制估算,单日原始数据约在数十 GB 量级,一年累积可达 TB 级。若采用文本格式(如 CSV/JSON),体积会再膨胀 3~5 倍,且解析开销大。因此,压缩格式的选择直接决定了存储成本、传输带宽和查询响应时间三条曲线。
增长趋势还带来一个隐性要求:格式必须支持追加写入与分片。逐笔数据是持续流入的,若格式要求全量重写才能压缩,就无法支撑在线归档。按证券、按日期、按小时分片,再对每个分片独立压缩,是兼顾压缩比与可维护性的常见做法。
四、业务场景对格式的核心需求
不同场景对压缩格式的诉求并不一致,需要分开看:
- 低延迟查询:策略回测和实时监控需要按证券、按时间窗口快速定位记录。这要求格式支持块级索引和随机跳转,而不是只能从头顺序解压。列式存储配合块内偏移索引,通常能把单次查询的解压范围限制在几十 KB 内。
- 历史回溯:监管审计和复盘要求完整还原订单生命周期,成交与委托的关联编号必须保真,记录顺序不能因压缩而重排。因此格式应保留原始时间序,或至少提供可重建顺序的元数据。
- 存储成本:冷数据归档以压缩比为首要目标,可以接受较高的解压延迟。此时字典编码、增量编码、位打包等手段可以叠加使用,把单条记录压到原始体积的 1/5 甚至更低。
- 可扩展性:格式需支持按分片并行读写,便于横向扩容;同时应保留 schema 版本信息,以应对交易所字段调整。