2. 金融数据模型设计:实体与关系定义、属性建模、事件与状态区分、时序数据建模要点

金融知识图谱的核心竞争力在于对复杂金融世界的精确抽象。数据模型设计直接决定了链路延迟、查询效率与推理能力。本章从实体与关系定义、属性建模、事件与状态区分、时序数据建模四个维度,构建一套适用于低延迟场景的金融数据模型范式。

2.1 实体与关系定义

金融领域的实体具有强监管、多身份、高动态特征。实体定义需遵循“唯一标识 + 类型分层 + 生命周期”原则。

2.1.1 核心实体类型

实体大类 典型实体 唯一标识策略 低延迟关注点
机构 银行、券商、基金、保险、交易所 LEI + 内部统一编码 机构层级扁平化,避免递归查询
产品 股票、债券、衍生品、基金、理财产品 ISIN / CUSIP + 产品类型前缀 产品属性预聚合,减少运行时计算
人员 高管、交易员、分析师、实控人 身份证哈希 + 角色标签 身份图谱预索引,支持毫秒级穿透
账户 交易账户、托管账户、资金账户 账户号 + 账户类型 账户与产品/机构关系固化,避免动态关联
事件 公告、交易、分红、违约、评级调整 事件ID + 时间戳 + 事件类型 事件作为独立节点,支持时序剪枝

2.1.2 关系类型与方向

关系定义采用“主语-谓语-宾语”三元组范式,谓语需标准化为有限集合。低延迟场景下,关系应具备以下特征:

  • 有向性:所有关系默认有向,反向关系通过预定义逆关系实现。
  • 类型化:关系类型不超过50种,避免语义过载。
  • 权重化:关键关系携带置信度或强度权重,支持图算法快速剪枝。
低延迟设计原则: 关系存储采用邻接表 + 属性列存,避免图遍历时的随机IO。高频关系(如“持有”、“交易”)单独建立索引分区。
实战案例: 某券商图谱将“实际控制人”关系从递归查询改为直接存储最终控制人,查询延迟从120ms降至3ms。

2.2 属性建模

属性是实体的静态特征,但在金融场景中,属性具有高频更新、多源异构、时效敏感等特点。属性建模需区分“基础属性”与“动态属性”。

2.2.1 属性分层策略

属性层级 定义 存储方式 更新频率 低延迟要求
L1 基础属性 实体唯一标识、名称、类型、创建时间 行存 + 主键索引 极少变更 毫秒级点查
L2 业务属性 注册资本、注册地址、行业分类、法人 列存 + 二级索引 月度/季度 支持批量更新
L3 动态属性 评级、风险等级、持仓市值、流动性指标 时序列存 + TTL 日频/实时 写入吞吐 > 10万/s
L4 衍生属性 关联交易金额、集中度指标、异常评分 物化视图 / 预计算 按需刷新 查询时零计算

2.2.2 属性版本控制

金融属性具有强回溯需求。采用“属性快照链”模式:

// 属性版本节点结构
{
  "entity_id": "ORG_20240301_001",
  "attribute": "credit_rating",
  "value": "AAA",
  "effective_time": 1709251200,
  "expire_time": 1711929600,
  "source": "S&P_20240301",
  "version": 12
}
避坑提示: 不要将所有属性版本存储在同一个属性字段中。高频更新的属性(如股价、汇率)应独立为时序节点,避免属性表膨胀导致查询退化。

2.3 事件与状态区分

金融知识图谱中,“事件”与“状态”是两种本质不同的数据形态。混淆二者会导致模型混乱、查询延迟飙升。

2.3.1 核心区别

维度 事件 (Event) 状态 (State)
本质 发生在某个时间点的动作或事实 实体在某个时间段的持续特征
时间特征 点时间,不可变 时间段,可变更
存储模型 事件节点 + 时间戳 属性快照 / 时序序列
查询模式 时间范围扫描 + 事件类型过滤 时间点快照查询 / 趋势分析
典型例子 “2024-03-01 公司A 发布年报” “2024年3月 公司A 信用评级为AAA”
低延迟策略 事件分区 + 预聚合索引 状态缓存 + 预计算快照

2.3.2 事件驱动状态更新

事件是状态变更的触发器。设计“事件→状态”映射规则,避免状态计算在查询时实时推导:

  1. 事件入图:事件节点写入后,触发异步规则引擎。
  2. 规则匹配:根据事件类型、实体ID、时间窗口匹配预定义规则。
  3. 状态更新:规则引擎计算新状态,写入状态快照表。
  4. 缓存失效:通知缓存层更新对应实体的状态缓存。
性能指标: 事件入图到状态更新完成,端到端延迟控制在50ms以内(P99)。采用事件流处理框架(如Kafka Streams)实现状态增量更新。

2.4 时序数据建模要点

金融知识图谱中,时序数据占比超过70%。时序建模质量直接决定链路延迟与存储成本。

2.4.1 时序数据分类

时序类型 数据特征 采样频率 存储策略 查询场景
高频行情 毫秒级Tick,数据量大 1ms - 1s 列存 + 压缩 + 分区 实时行情、回放
中频交易 逐笔成交、订单簿 1s - 1min 时序数据库 + 预聚合 交易分析、风控
低频指标 财务数据、评级、宏观指标 日/周/月 关系属性 + 快照 基本面分析、归因
事件序列 公告、新闻、舆情 分钟级 事件节点 + 时间索引 事件驱动分析

2.4.2 时序建模核心要点

  • 时间分区:按时间范围分区存储,高频数据按天/小时分区,低频数据按月分区。查询时自动剪枝无关分区。
  • 降采样策略:预计算1min、5min、1h、1d的聚合数据,满足90%的查询需求,避免实时扫描原始数据。
  • 时序索引:采用“时间戳 + 实体ID”复合索引,支持毫秒级时间范围查询。
  • 数据保留策略:原始高频数据保留7天,聚合数据保留1年,低频指标保留10年。过期数据自动归档至冷存储。
  • 时序对齐:不同频率的时序数据在查询时自动对齐到统一时间轴,避免时间窗口不匹配导致的错误。
实战案例: 某量化基金图谱将行情数据按“日期+股票代码”分区,配合预计算日频指标,查询延迟从800ms降至15ms,存储成本降低60%。

2.5 数据模型整体架构

下图展示金融知识图谱数据模型的整体架构,涵盖实体、关系、属性、事件、状态、时序数据的组织方式:

金融知识图谱数据模型架构 金融知识图谱数据模型架构 实体层 (Entity Layer) 机构 产品 人员 账户 事件 关系层 (Relation Layer) 持有 (Holds) 交易 (Trades) 控制 (Controls) 评级 (RatedBy) 属性层 (Attribute Layer) L1 基础属性 L2 业务属性 L3 动态属性 L4 衍生属性 时序层 (Time Series Layer) 高频行情 (Tick) 中频交易 (Order) 低频指标 (Daily) 事件序列 (EventLog) 说明:四层架构自上而下依赖,实体通过关系连接,属性挂载在实体上,时序数据独立分层存储

2.6 低延迟链路数据流

下图展示数据从采集到查询的完整链路,突出低延迟设计的关键节点:

低延迟链路数据流 低延迟链路数据流 数据采集 API / 消息队列 / 文件 数据清洗 去重 / 校验 / 标准化 模型映射 实体 / 关系 / 属性 / 时序 存储引擎 图库 / TSDB 查询层 (Query Layer) 图查询 / 时序查询 / 混合查询 / 预计算查询 缓存层 (Cache Layer) 热点实体缓存 / 预计算结果缓存 / 属性快照缓存 说明:数据流从左到右,查询流从上到下。缓存层拦截90%的重复查询,保障P99延迟 < 10ms

2.7 本章小结

  • 实体与关系:采用“唯一标识 + 类型分层”策略,关系标准化为有限集合,支持有向权重化存储。
  • 属性建模:四层属性分层(L1-L4),动态属性独立为时序节点,属性版本控制支持回溯。
  • 事件与状态:事件是点时间不可变事实,状态是时间段持续特征。事件驱动状态更新,避免查询时实时计算。
  • 时序数据:按频率分类存储,预计算降采样数据,时间分区 + 复合索引保障低延迟查询。