当前位置:首页>自动驾驶>【场景挖掘】自动驾驶复杂场景挖掘(二):事件驱动的分层语义图谱实践!

【场景挖掘】自动驾驶复杂场景挖掘(二):事件驱动的分层语义图谱实践!

  • 2026-03-21 01:29:43
【场景挖掘】自动驾驶复杂场景挖掘(二):事件驱动的分层语义图谱实践!


引言

上一篇文章中,我们分享了基于状态机的时序匹配规则,通过标准化的特征工程与多阶段时序匹配,实现了低代码、精准、灵活且强大的复杂事件提取能力,成功解决了从海量帧级感知数据中,高效挖掘变道、cut-in、刹车等基础驾驶事件的核心问题。

但在实际工程落地过程中我们发现,若所有复杂场景都依赖这种帧级时序匹配方式提取,不可避免会出现逻辑重复、规则冗余的问题——比如挖掘“变道后cut-in”“cut-in导致刹车”等复合场景时,需要重复编写时序匹配逻辑;不同场景的事件关联的逻辑无法复用,迭代新场景时需要重新开发,大幅增加了开发与维护成本。

基于此,我们结合工程实践,设计了事件驱动的分层语义图谱方案,将上一篇提到的状态机时序事件提取能力,与语义图谱的灵活关联能力深度融合,形成「帧级计算-事件抽象-图谱关联」的完整自动驾驶场景挖掘体系。该方案既保留了状态机对时序事件的精准提取优势,又通过图谱解决了事件关联、场景复用的核心痛点,实现了从“单一事件提取”到“复杂场景高效挖掘”的升级,同时降低了场景挖掘的上手门槛与维护成本。

本文将从设计动因、行业选型对比、核心思想、建模实践、查询落地、工程优化五个维度,和大家详细拆解这套方案的落地细节,承接上篇的状态机实践,形成可直接复用的自动驾驶复杂场景挖掘方法论。


一、为什么需要事件驱动的分层语义图谱?

上一篇我们提到,基于状态机的时序匹配机制,能将模糊的业务需求拆解为有序的状态转移,精准提取出变道、cut-in、刹车、横穿等基础驾驶事件,解决了“从帧级数据到事件级抽象”的核心问题。但在实际场景挖掘中,纯状态机方案和传统存储方案仍存在明显痛点:

1.1 纯状态机方案:逻辑冗余,关联能力不足

状态机的核心能力是时序匹配与事件提取,其优势在于精准、灵活,但在复杂场景挖掘中,存在三个核心短板:

  • 逻辑复用性差:挖掘复合场景时,需要重复编写多事件的时序匹配逻辑,比如“变道后cut-in”“超车后刹车”,每类复合场景都要单独开发,存在大量冗余;
  • 事件关联困难:想要溯源“某类刹车事件的前置触发事件”、统计“变道事件常伴随的其他事件”,需要手动关联多组状态机规则,逻辑繁琐且易出错;
  • 维护成本高:新增一个场景维度,就要修改或新增状态机规则,迭代速度慢,且容易影响原有场景的提取逻辑。

1.2 传统SQL表存储:复合场景挖掘存在天然短板

当前自动驾驶场景挖掘的公开实践中,多数方案以湖仓一体架构为核心存储底座:非结构化原始数据(雷达点云、图像、视频)存储在对象存储(OSS/S3),结构化数据/元数据存储在SQL表(ClickHouse/Hive/PostgreSQL等)。SQL表具备成熟、稳定、通用的优势,适合数据管理、清洗、筛选与聚合分析,但在复杂场景挖掘,尤其是多事件关联、时序行为分析中,仍存在明显的适配性不足:

  1. 多事件关联逻辑繁琐:一个简单的“cut-in+刹车”复合场景,需要关联自车表、障碍物表、事件表、帧级属性表等多张表,依赖多层嵌套JOIN与窗口函数,查询语句冗长,可读性、可维护性差;
  2. 时序行为表达不直观:要描述“他车从相邻车道→跨越车道线→进入自车前方”的时序演变,SQL需要通过大量帧号判断、子查询实现,逻辑与人类的业务直觉背离,开发与调试成本高;
  3. 场景扩展成本高:新增一种事件关联关系、一个场景维度,往往需要新增表、新增字段,同时修改所有关联查询语句,风险高、迭代效率低。

1.3 行业现状与方案定位:湖仓为底,图谱补优

本文提出一种事件驱动分层语义图谱方案并非抛弃湖仓一体的SQL表架构,而是与对象存储、SQL表、状态机形成互补,各司其职、分层协作:

  • 对象存储(湖仓):承担非结构化/大文件原始数据存储(雷达点云、图像、视频流、高精度地图切片),发挥其海量存储、低成本的优势;
  • SQL表(数仓):承担结构化原始数据+元数据存储(帧级感知结果、坐标、速度、设备ID、文件路径、采集时间),同时发挥数据管理、清洗、筛选、聚合分析的核心功能,作为整个体系的结构化数据底座;
  • 状态机:承担帧级时序匹配、基础事件提取的职责,解决“从帧级数据到事件级抽象”的核心问题,保证事件提取的精准性;
  • 语义图谱:承担事件关联、复合场景挖掘、语义理解的职责,解决SQL表关联繁琐、状态机逻辑冗余的痛点,提升了表达能力,场景挖掘的效率与灵活性。

这种分层协作的方式,既沿用了行业成熟的湖仓一体技术底座,又通过图谱弥补了复杂场景挖掘的短板,是兼顾落地性与实用性的工程选择。

1.4 核心对比:图谱 vs 传统SQL表(自动驾驶场景挖掘)

维度
传统SQL表/数仓(湖仓一体)
事件驱动分层语义图谱
对我们的价值
核心表达
行、列、表结构,侧重结构化数据管理与聚合分析
实体、关系、路径、时序,侧重语义关联
天然适配“多实体+关系+时序”的驾驶场景
复杂场景查询
多层JOIN+嵌套子查询,难写难维护,易出错
简单路径匹配,贴近业务直觉,逻辑清晰
查询复杂度下降80%,降低开发与维护成本
时序行为描述
依赖窗口函数/帧号判断,表达生硬、不直观
按属性特性选择List/区间存储,天然表达状态演变
变道、cut-in等时序行为一目了然,便于理解
事件间关联
跨表联查,性能随数据量下降明显
事件间直接建边,关联查询高效,秒级响应
因果、时序相邻等复合场景可快速挖掘
扩展能力
新增场景=加表/加字段+修改所有关联SQL
新增场景=加事件/加边,无需修改原有图谱结构
新场景迭代速度提升数倍,降低扩展风险
适用层
结构化原始数据、元数据存储,清洗、聚合分析(ODS-DWD)
事件关联、场景检索、语义理解(ADS)
分层互补,不重复造轮子,兼顾稳定与灵活
上手门槛
筛选组合简单,但深入理解帧级逻辑,才能编写复杂场景查询
懂业务即可编写简单Cypher,许多场景无需关注细节,复杂场景仍难编写
相当

1.5 核心诉求:分层解耦,复用提效

基于以上痛点与行业现状,我们的核心诉求很明确:通过分层解耦,让专业的组件做专业的事,减少逻辑冗余,提升场景挖掘的效率与复用性

  • 帧级的时序匹配、特征计算、基础事件提取,交给状态机完成(下沉到计算层);
  • 事件的实体关联、阶段拆解、事件间因果/时序关联,交给语义图谱完成(上浮到关联层);
  • 非结构化原始数据存储交给对象存储,结构化原始数据/元数据存储、清洗、聚合分析交给SQL表完成(下沉到底层存储层);
  • 最终的场景查询,只需要基于事件级的图谱做简单的路径匹配,实现“低代码”“高复用”的复杂场景挖掘。

二、核心设计思想:分层降维,各司其职

事件驱动的分层语义图谱的核心设计思想是分层降维事件一等公民,并与传统数仓ODS-DWD-DWS-ADS分层体系、湖仓一体架构、上篇的状态机框架深度融合,形成一套工业级的自动驾驶场景挖掘架构。

2.1 整体分层架构:从帧级数据到场景理解

整个架构分为四层,各层各司其职、无冗余且高度复用,实现从帧级数据到复杂场景理解的全链路覆盖:

  1. 原始数据层(湖仓一体)
    • 非结构化存储:对象存储(OSS/S3)存储雷达点云、图像、视频流等原始大文件数据;
    • 结构化存储:SQL表(ClickHouse/Hive)存储帧级结构化感知数据(坐标、速度、车道ID)、元数据(文件路径、采集时间、设备ID、场景标签),为整个体系提供结构化数据基础;
  2. 事件提取层(数仓DWD/DWS+状态机):基于上篇的状态机时序匹配机制,对SQL表中的帧级结构化数据做清洗、特征工程、状态转移匹配,提取出带关键帧、主体、置信度的基础驾驶事件,同时完成事件与实体的基础关联,形成“事件-实体”的结构化中间数据;
  3. 语义图谱层(数仓ADS+分层图谱):将事件作为一等公民,与自车、他车、车道、事件阶段等实体一起建图,通过带时序属性的边表达“实体-事件”“事件-阶段”“事件-事件”的关联关系,形成事件驱动的分层语义图谱,这是整个方案的核心;
  4. 场景挖掘应用层:基于语义图谱做简单的Cypher路径匹配,实现基础事件查询、复合场景挖掘、事件因果溯源、关键节点统计等需求,直接支撑算法训练、评测复盘、场景库构建等业务。

2.2 核心原则:3个“统一”,规避过度设计

为了保证图谱的简洁性、可维护性和查询易用性,我们在设计时制定了3个核心原则,避免过度抽象和冗余建模:

  1. 实体统一:整个图谱的实体类型固定,不随场景新增而随意扩展,核心包含自车(Ego)、他车/障碍物(Object)、车道/交通设施(Infra)、事件(Event)、事件阶段(Stage)5类,覆盖99%的自动驾驶场景挖掘需求;
  2. 时序统一:时序信息(帧号/时间戳)的存储方式按属性特性区分:对变化敏感、需逐帧分析的属性(如速度、位置、加速度),以List(帧号列表+对应值列表)挂载在边属性中;对变化频率低、阶段性稳定的属性(如车道位置、红绿灯状态),可存储为区间值(start_frame/end_frame+属性值),兼顾存储效率与查询便捷性;实体仅存静态信息,且所有帧号与底层状态机、数仓的帧号完全对齐,避免时序错位;
  3. 边类型统一:边的类型仅保留实体属性、实体-事件、事件-阶段、事件-事件4类核心类型,不做过度拆分,兼顾表达能力和查询简洁性。

三、事件驱动的分层语义图谱建模实践

建模是图谱落地的核心,本部分将从实体设计、边设计两个维度,结合自动驾驶的典型场景(变道、cut-in),给出可直接复用的建模方案,所有模型均支持Neo4j/NebulaGraph等主流图数据库,配套Cypher示例可直接运行。

先cut-in再cut-out场景语义图谱(简化示意)

3.1 实体设计:5类核心实体,静态信息归一化

所有实体仅存储静态/全局信息,动态变化和时序信息均通过边表达,且整个图谱中同一实体仅创建一次,避免冗余。5类核心实体的设计规范和示例如下:

实体类型
核心属性
设计说明
示例
Ego(自车)
id(唯一)、车型、车身参数
整个片段仅1个,存静态信息
(ego:Ego {id: "ego_001", model: "xxx", length: 4.8})
Object(他车/障碍物)
id(唯一)、类型(car/truck/pedestrian)、静态尺寸
每个目标1个,区分主体类型
(obj:Object {id: "obj_123", type: "car", width: 1.8})
Infra(车道/交通设施)
id(唯一)、类型(lane/traffic_light)、属性(自车道/左邻车道/红灯)
交通基础设施,存固有属性
(lane:Infra {id: "lane_001", type: "lane", attr: "self_lane"})
Event(事件)
id(唯一)、类型(lane_change/cut-in/brake)、主体、置信度、全局起止帧
事件一等公民,存核心全局信息
(e:Event {id: "ev_456", type: "cut-in", subject: "obj_123", confidence: 0.98, start_frame: 100, end_frame: 120})
Stage(事件阶段)
id(唯一)、名称(lateral_movement/cross_boundary/recenter)
所有事件复用,仅存阶段名称
(s:Stage {id: "stage_001", name: "cross_boundary"})

关键设计点:事件实体作为核心,需包含全局起止帧主体,这是连接实体和事件的关键;事件阶段实体做通用化设计,所有同类事件复用同一套阶段,无需为每个事件单独创建阶段。

3.2 边设计:4类核心边,时序信息轻量化存储

边是图谱表达动态变化关联关系的核心,结合工程实际需求,我们按属性特性采用两种轻量化存储方式,既避免边数量爆炸,又保证场景分析的精准性:

  • 变化敏感、需逐帧分析的属性(速度、位置、加速度):用List存储「帧号列表+对应属性值列表」,单条边覆盖完整时序,保留逐帧细节;
  • 变化频率低、阶段性稳定的属性(车道位置、红绿灯状态):用区间值存储「start_frame/end_frame+value」,简化结构、提升存储效率;

所有边均为有向边,保证关系表达的唯一性,4类核心边的设计规范、示例和使用场景如下:

3.2.1 实体属性边:动态属性轻量化存储(核心优化)

设计目的:表达自车、他车、交通设施的动态属性变化,通过“按属性特性选存储方式”的策略,平衡“时序细节保留”与“存储/查询效率”。

边类型HAS_XXX(XXX为属性名,如HAS_SPEED/HAS_POSITION/HAS_COLOR)

核心属性(List存储,适用于变化敏感属性)

  • frame_list:帧号列表(升序排列),如[100,101,102,...,120]
  • value_list:对应帧号的属性值列表,与frame_list一一对应,如速度列表[85,84,83,...,75]
    核心属性(区间存储,适用于低频稳定属性)
    • 优先为安全分析、行为建模核心属性(如速度、位置、加速度)选择List存储,保证分析精度;
    • List长度建议控制在“单事件周期内的帧数量”(如变道事件100帧),避免单条边List过长。
  • start_frame/end_frame:属性稳定区间的起止帧;
  • value:区间内的属性值/均值;
    建模原则(工程化落地)
  • 辅助性、阶段性属性(如车道归属、红绿灯状态)选择区间存储,减少图谱冗余;

示例1:自车100-105帧速度(List存储,变化敏感)

(ego:Ego {id: "ego_001"})-[:HAS_SPEED {  frame_list: [100,101,102,103,104,105],  value_list: [85,84.5,84,83.5,83,82.5]}]->()

示例2:他车100-120帧车道位置(区间存储,低频稳定)

(obj:Object {id: "obj_123"})-[:IN_LANE {  start_frame: 100, end_frame: 105, value: "left_adjacent"}]->(lane:Infra {id: "lane_002"})(obj:Object {id: "obj_123"})-[:IN_LANE {  start_frame: 106, end_frame: 120, value: "self_lane"}]->(lane:Infra {id: "lane_001"})

示例3:红绿灯100-120帧颜色(区间存储,低频稳定)

(tl:Infra {id: "tl_001", type: "traffic_light"})-[:HAS_COLOR {  start_frame: 100, end_frame: 120, value: "red"}]->()

3.2.2 实体-实体边:表达实体间的静态/动态关联(新增核心类别)

设计目的:表达不同实体之间的关联关系(自动驾驶场景最核心的实体关联),这类关系通常随帧变化,因此需携带时序属性,是挖掘“自车-车道、他车-自车、车道-车道”关联场景的关键。 

实体-实体边类型举例

边类型
业务含义
适用场景
时序存储方式
IN_LANE
实体(自车/他车)在某车道
他车切入/切出自车道、变道
区间存储
ADJACENT_TO
车道间相邻
左/右邻车道关联、变道路径分析
静态(无时序)
FOLLOW
他车跟随自车
跟车场景、加塞前的跟随状态
区间存储
OVERTAKE
他车超越自车
超车场景、超车后cut-in
区间存储
NEAR_TO
实体靠近交通设施
自车靠近红绿灯/停止线
区间存储

核心属性:

  • 动态关联(如IN_LANE/FOLLOW):start_frame/end_frame(关联关系的起止帧)+ value(可选,如车道归属状态);
  • 静态关联(如ADJACENT_TO):无时序属性(车道相邻关系为固定物理属性); 
    建模原则
  • 动态关联必须携带start_frame/end_frame,避免“静态关联”误表达“动态时序关系”;
  • 同一实体间的动态关联按帧区间拆分(如他车100-105在左邻车道、106-120在自车道,拆分为两条IN_LANE边)。

示例1:他车100-120帧车道归属(动态关联,区间存储)

// 100-105帧:他车在左邻车道(obj:Object {id: "obj_123"})-[:IN_LANE {  start_frame: 100, end_frame: 105, value: "left_adjacent"}]->(lane_adj:Infra {id: "lane_002", type: "lane"});// 106-120帧:他车切入自车道(cut-in核心关联)(obj:Object {id: "obj_123"})-[:IN_LANE {  start_frame: 106, end_frame: 120, value: "self_lane"}]->(lane_self:Infra {id: "lane_001", type: "lane"});

示例2:车道间相邻(静态关联,无时序)

// 自车道与左邻车道相邻(lane_self:Infra {id: "lane_001", type: "lane"})-[:ADJACENT_TO {direction: "left"}]->(lane_adj:Infra {id: "lane_002", type: "lane"});// 自车道与右邻车道相邻(lane_self:Infra {id: "lane_001", type: "lane"})-[:ADJACENT_TO {direction: "right"}]->(lane_adj_right:Infra {id: "lane_003", type: "lane"});

示例3:他车100-110帧跟随自车(动态关联,区间存储)

(obj:Object {id: "obj_123"})-[:FOLLOW {  start_frame: 100, end_frame: 110, value: "follow_ego"}]->(ego:Ego {id: "ego_001"});

3.2.2 实体-事件边:表达事件与参与实体的关联

设计目的:明确某一事件由哪个实体发起、发生在哪个环境中,实现“事件-实体”的快速溯源。

核心边类型

  • INITIATE:实体发起事件(如他车发起cut-in、自车发起变道);
  • HAPPEN_IN:事件发生在某一交通设施中(如cut-in事件发生在自车车道)。
    核心属性:无(关联关系为全局,时序信息由事件实体本身承载)
  • 示例:obj_123在lane_001(自车道)发起cut-in事件ev_456
(obj:Object {id: "obj_123"})-[:INITIATE]->(e:Event {id: "ev_456", type: "cut-in"})(e:Event {id: "ev_456", type: "cut-in"})-[:HAPPEN_IN]->(lane:Infra {id: "lane_001", attr: "self_lane"})

3.2.3 事件-阶段边:表达事件的时序阶段拆解

设计目的:对有明确阶段的复杂事件(如变道、cut-in)做阶段拆解,保留事件的关键时序节点,支撑“事件阶段溯源”“关键帧统计”等需求,承接上篇状态机的多阶段状态转移逻辑。

边类型HAS_STAGE

核心属性start_frame(阶段开始帧)、end_frame(阶段结束帧)、key_frame(阶段关键帧,可选)

建模原则:阶段与上篇状态机的状态转移一一对应,仅保留核心阶段(一般3-4个),不做帧级拆分。

示例:变道事件包含“横向移动、跨越边界、再次居中”三个阶段

// 先定义通用阶段实体(仅创建一次)(s1:Stage {id: "s1", name: "lateral_movement"}),(s2:Stage {id: "s2", name: "cross_boundary"}),(s3:Stage {id: "s3", name: "recenter"});// 变道事件关联各阶段(e:Event {id: "ev_789", type: "lane_change"})-[:HAS_STAGE {start_frame: 100, end_frame: 110}]->(s1),(e)-[:HAS_STAGE {start_frame: 111, end_frame: 119, key_frame: 115}]->(s2),(e)-[:HAS_STAGE {start_frame: 120, end_frame: 130}]->(s3);

3.2.4 事件-事件边:表达事件之间的时序/因果关联

设计目的:这是图谱实现复合场景挖掘的核心,表达事件之间的时序、因果、共现关系,替代传统的多事件联表查询,大幅简化复合场景的查询逻辑。核心边类型

  • TIME_ADJACENT:时序相邻(A结束后N帧内发生B),属性:interval
  • CAUSE:因果关系(A导致B);
  • CO_OCCUR:同时发生。示例:变道后5帧内cut-in,cut-in导致刹车
(e1:Event {type: "lane_change"})-[:TIME_ADJACENT {interval: 5}]->(e2:Event {type: "cut-in"}),(e2)-[:CAUSE]->(e3:Event {type: "brake"});

3.3 典型场景建模:cut-in事件完整图谱示例

结合以上实体和边的设计,我们以他车cut-in自车车道这一典型场景为例,给出完整的图谱建模Cypher示例,该示例可直接复制到Neo4j中运行,形成可视化的场景图谱:

// 1. 创建核心实体CREATE  (ego:Ego {id: "ego_001", model: "test_model"}),  (obj:Object {id: "obj_123", type: "car", width: 1.8}),  (lane_adj:Infra {id: "lane_002", type: "lane", attr: "left_adjacent"}),  (lane_self:Infra {id: "lane_001", type: "lane", attr: "self_lane"}),  (e:Event {id: "ev_456", type: "cut-in", subject: "obj_123", confidence: 0.98, start_frame: 100, end_frame: 120}),  (s1:Stage {id: "s1", name: "approaching_boundary"}),  (s2:Stage {id: "s2", name: "crossing_boundary"}),  (s3:Stage {id: "s3", name: "centered_in_front"});// 2. 创建实体属性边(单实体动态属性)CREATE  // 自车速度(List存储,变化敏感)  (ego)-[:HAS_SPEED {    frame_list: [100,101,102,103,104,105],    value_list: [85,84.5,84,83.5,83,82.5]  }]->(),  // 他车坐标(List存储,变化敏感)  (obj)-[:HAS_POSITION {    frame_list: [100,101,102,103,104,105],    value_list: [[10.1,20.2],[10.3,20.4],[10.5,20.6],[10.7,20.8],[10.9,21.0],[11.1,21.2]]  }]->();// 3. 创建实体-实体边(核心cut-in关联)CREATE  // 车道相邻关系(静态)  (lane_self)-[:ADJACENT_TO {direction: "left"}]->(lane_adj),  // 他车车道归属(动态,区间存储)  (obj)-[:IN_LANE {start_frame: 100, end_frame: 105, value: "left_adjacent"}]->(lane_adj),  (obj)-[:IN_LANE {start_frame: 106, end_frame: 120, value: "self_lane"}]->(lane_self),  // 他车cut-in前跟随自车(动态)  (obj)-[:FOLLOW {start_frame: 100, end_frame: 105, value: "follow_ego"}]->(ego);// 4. 创建实体-事件边CREATE  (obj)-[:INITIATE]->(e),  (e)-[:HAPPEN_IN]->(lane_self);// 5. 创建事件-阶段边CREATE  (e)-[:HAS_STAGE {start_frame: 100, end_frame: 105, key_frame: 103}]->(s1),  (e)-[:HAS_STAGE {start_frame: 106, end_frame: 110, key_frame: 108}]->(s2),  (e)-[:HAS_STAGE {start_frame: 111, end_frame: 120, key_frame: 115}]->(s3);// 6. 创建事件-事件边(cut-in导致刹车)CREATE  (e_brake:Event {id: "ev_002", type: "brake", subject: "ego_001", start_frame: 110, end_frame: 125}),  (e)-[:CAUSE]->(e_brake);

四、高效查询实践:List/区间属性的便捷查询

针对不同存储方式的时序属性,我们提供贴合工程实际的Cypher查询方法,无需复杂逻辑即可提取指定帧/区间的属性值,新手也能快速上手。

4.1 基础查询:提取指定帧的属性值

需求1:查询自车102帧的速度值(List存储属性)

MATCH (ego:Ego {id: "ego_001"})-[r:HAS_SPEED]->()WHERE 102 IN r.frame_list// 找到102帧在frame_list中的索引,提取对应value_list的值WITH ego, r, indexOf(r.frame_list, 102) AS idxRETURN ego.id, r.value_list[idx] AS speed_102frame;

需求2:查询他车108帧的车道位置(区间存储属性)

MATCH (obj:Object {id: "obj_123"})-[r:IN_LANE]->(lane:Infra)WHERE r.start_frame <= 108 AND r.end_frame >= 108RETURN obj.id, lane.attr AS lane_position, r.value AS lane_status;

4.2 复合场景查询:核心业务场景实战(cut-in→cut-out/减速→加速)

需求1:查询某辆车先cut-in(切入)后cut-out(切出)的复合事件

业务背景:挖掘“他车切入自车车道后又快速切出”的风险场景,需同时满足“同一主体+cut-in结束后10帧内触发cut-out+时序关联”。

前置建模(创建cut-in/cut-out事件及关联关系)
// 1. 创建核心实体(自车、他车、事件)CREATE  (ego:Ego {id: "ego_001", model: "test_model"}),  (obj:Object {id: "obj_123", type: "car", width: 1.8}),  (e_cutin:Event {id: "ev_cutin_001", type: "cut-in", subject: "obj_123", start_frame: 100, end_frame: 110}),  (e_cutout:Event {id: "ev_cutout_001", type: "cut-out", subject: "obj_123", start_frame: 115, end_frame: 125});// 2. 建立事件-事件时序关联(cut-in结束后5帧触发cut-out,interval=5)CREATE  (e_cutin)-[:TIME_ADJACENT {interval: 5}]->(e_cutout);// 3. 建立实体-事件关联CREATE  (obj)-[:INITIATE]->(e_cutin),  (obj)-[:INITIATE]->(e_cutout),  (e_cutin)-[:HAPPEN_IN]->(lane:Infra {id: "lane_001", attr: "self_lane"}),  (e_cutout)-[:HAPPEN_IN]->(lane:Infra {id: "lane_003", attr: "right_adjacent"});
复合查询语句(精准匹配cut-in→cut-out场景)
MATCH  // 匹配同一主体的cut-in事件  (obj:Object)-[:INITIATE]->(e1:Event {type: "cut-in"}),  // 匹配同一主体的cut-out事件,且与cut-in时序相邻  (obj)-[:INITIATE]->(e2:Event {type: "cut-out"}),  (e1)-[r:TIME_ADJACENT]->(e2)WHERE  // 限定cut-in结束后10帧内触发cut-out(风险场景阈值)  r.interval <= 10 AND  // 确保事件主体一致(避免不同车辆的cut-in/cut-out误匹配)  e1.subject = e2.subjectRETURN  obj.id AS vehicle_id,  e1.id AS cutin_event_id,  e1.start_frame AS cutin_start,  e1.end_frame AS cutin_end,  e2.id AS cutout_event_id,  e2.start_frame AS cutout_start,  r.interval AS interval_between_events;
查询结果示例:
vehicle_id
cutin_event_id
cutin_start
cutin_end
cutout_event_id
cutout_start
interval_between_events
obj_123
ev_cutin_001
100
110
ev_cutout_001
115
5

需求2:查询cut-in事件期间自车先减速后加速的复合场景

业务背景:分析“他车cut-in导致自车先减速避险,随后恢复加速”的典型场景,需结合「事件关联」+「速度属性时序分析」。

步骤1:前置建模(补充自车速度List属性)
// 为自车添加100-125帧的速度属性(模拟先减速后加速:85→70→80)CREATE  (ego:Ego {id: "ego_001"})-[:HAS_SPEED {    frame_list: [100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],    value_list: [85,83,80,78,75,72,70,71,73,75,77,78,79,80,81,82]  }]->();
步骤2:复合查询语句(事件+属性时序分析)
MATCH  // 匹配cut-in事件  (e:Event {type: "cut-in", id: "ev_cutin_001"}),  // 匹配自车速度属性(List存储)  (ego:Ego {id: "ego_001"})-[r:HAS_SPEED]->()WHERE  // 事件帧区间与速度帧区间重叠  e.start_frame <= last(r.frame_list) AND e.end_frame >= head(r.frame_list)WITH e, ego, r,  // 1. 提取cut-in事件区间内的所有速度值(100-110帧)  [i IN range(0, size(r.frame_list)-1)    WHERE r.frame_list[i] BETWEEN e.start_frame AND e.end_frame    | {frame: r.frame_list[i], speed: r.value_list[i]}] AS cutin_speed_list,  // 2. 筛选减速阶段(速度持续下降,帧号100-106)  [x IN cutin_speed_list WHERE x.frame BETWEEN 100 AND 106] AS decelerate_phase,  // 3. 筛选加速阶段(速度持续上升,帧号107-110)  [x IN cutin_speed_list WHERE x.frame BETWEEN 107 AND 110] AS accelerate_phaseWHERE  // 判定“先减速后加速”:减速阶段末速度 < 减速阶段初速度,加速阶段末速度 > 加速阶段初速度  last(decelerate_phase).speed < head(decelerate_phase).speed AND  last(accelerate_phase).speed > head(accelerate_phase).speedRETURN  e.id AS cutin_event_id,  decelerate_phase AS decelerate_detail, // 减速阶段详情(帧号+速度)  accelerate_phase AS accelerate_detail, // 加速阶段详情(帧号+速度)  // 计算减速/加速的幅度  head(decelerate_phase).speed - last(decelerate_phase).speed AS decelerate_amplitude,  last(accelerate_phase).speed - head(accelerate_phase).speed AS accelerate_amplitude;
查询结果示例:
cutin_event_id
decelerate_detail
accelerate_detail
decelerate_amplitude
accelerate_amplitude
ev_cutin_001
[{frame:100,speed:85},{frame:101,speed:83},...,{frame:106,speed:70}]
[{frame:107,speed:71},...,{frame:110,speed:77}]
15
6

4.3 统计查询:计算事件区间内的速度变化特征

需求:统计cut-in→cut-out全流程中自车的速度极值与均值

MATCH  // 匹配cut-in→cut-out事件链  (e1:Event {type: "cut-in", id: "ev_cutin_001"})-[r:TIME_ADJACENT]->(e2:Event {type: "cut-out", id: "ev_cutout_001"}),  // 匹配自车速度属性  (ego:Ego {id: "ego_001"})-[rs:HAS_SPEED]->()WITH e1, e2, rs,  // 确定cut-in→cut-out的完整帧区间  e1.start_frame AS total_start,  e2.end_frame AS total_end,  // 提取完整区间内的速度值  [i IN range(0, size(rs.frame_list)-1)    WHERE rs.frame_list[i] BETWEEN e1.start_frame AND e2.end_frame    | rs.value_list[i]] AS total_speed_listRETURN  total_start AS event_chain_start,  total_end AS event_chain_end,  avg(unnest(total_speed_list)) AS avg_speed, // 全程平均速度  min(unnest(total_speed_list)) AS min_speed, // 全程最低速度(避险减速极值)  max(unnest(total_speed_list)) AS max_speed, // 全程最高速度  // 计算速度波动率(标准差/均值)  stdev(unnest(total_speed_list)) / a


五、工程落地的关键优化策略

一套方案能否在工业级场景中落地,除了核心建模和查询,还需要考虑性能、可维护性、鲁棒性等工程问题。结合我们的实践经验,给出5个关键的工程优化策略,避免图谱陷入“建模优美但落地困难”的困境。

5.1 时序属性分层存储:按业务敏感度选存储方式(核心工程策略)

从工程落地角度,时序属性的存储方式需结合业务分析需求数据特性灵活选择:

  • 安全分析核心、变化敏感的属性(速度、位置、加速度、方向盘角度):必须用List存储,保证逐帧分析的精度,支撑事故溯源、行为建模等核心场景;
  • 辅助分析、低频稳定的属性(车道归属、红绿灯状态、车辆类型):优先用区间存储,减少图谱边数量(可降低60%-80%的边冗余),提升查询效率;
  • List长度控制:单条边的List长度建议≤500帧,超过则按帧区间拆分(如1-500帧、501-1000帧),避免单条边数据量过大导致查询卡顿。

5.2 增量构建图谱,避免全量重算

自动驾驶的感知数据是持续产生的,图谱无需全量重建,而是基于增量数据做增量构建:

  1. 底层湖仓通过时间分区存储新增帧级结构化数据和非结构化数据的元数据;
  2. 状态机仅对新增分区的结构化数据做时序匹配,提取新增事件;
  3. 图谱仅将新增事件、实体属性(List/区间)、事件关联关系做增量插入,避免全量重算带来的性能损耗。

5.3 严格的时序对齐,避免数据错位

整个体系的帧号/时间戳必须严格对齐,这是状态机和图谱融合的关键:

  1. 底层数仓、状态机、图谱均使用绝对帧号(而非相对帧号);
  2. List中的frame_list必须升序排列,且value_list与frame_list严格一一对应;
  3. 图谱的边属性帧号,需与事件实体的帧号做校验,避免时序错位。

5.4 针对性建索引,提升查询性能

为图谱的核心字段建立索引,大幅提升查询速度,索引仅需建立一次,后续增量构建无需重复创建:

  1. 实体索引:为所有实体的id字段建立唯一索引(如:Ego(id)/:Event(id));
  2. 事件索引:为事件的type/subject/start_frame字段建立复合索引(如:Event(type, subject, start_frame));
  3. 边属性索引:为核心实体属性边的frame_list/start_frame字段建立索引,加速帧号筛选。

5.5 避免过度抽象,保持图谱简洁

图谱的核心目标是简化查询,而非“追求抽象的完美”,因此需严格避免过度抽象:

  1. 实体类型不超过5类,边类型不超过10类,拒绝为小众场景新增特殊实体/边;
  2. 事件阶段仅保留核心3-4个,不做帧级的细粒度拆分;
  3. 事件间的关联关系仅保留时序、因果、共现3类,不做复杂的语义拆分。

六、总结与展望

承接上篇

介绍了数据挖掘工程中实际使用的一种时序匹配方法,结合使用声明语言和命令式语言,简洁、低门槛、使用灵活

数据挖掘团队,公众号:智驾具身数据挖掘【场景挖掘】自动驾驶复杂场景挖掘(一):时序匹配规则实践

基于状态机的时序匹配规则,提出了事件驱动的分层语义图谱方案,形成了「湖仓一体存储 + 状态机事件提取 + 图谱语义关联」的完整场景挖掘体系,实现了从“单一事件提取”到“复杂场景高效挖掘”的升级。

  1. 核心价值:该方案通过分层解耦,让湖仓(对象存储+SQL表)、状态机、图谱各司其职,既解决了纯状态机逻辑冗余、关联能力不足的问题,又弥补了传统SQL表在复合场景挖掘中的短板;同时结合工程实际,按属性的“变化敏感度/频率”选择List/区间存储方式,既保证核心属性的分析精度,又降低图谱冗余、提升查询效率;
  2. 建模原则:以“事件为一等公民”,设计了5类核心实体和5类核心边(新增实体-实体边),时序属性按业务特性分层存储,所有时序信息与底层数仓/状态机严格对齐,保证图谱的简洁性和可维护性;
  3. 工程落地:给出了典型场景的建模示例、不同存储属性的查询语句和5个关键的工程优化策略,方案可直接适配Neo4j/NebulaGraph等主流图数据库,与湖仓一体架构深度融合,无冗余且高度复用。

6.1 系列方案的整体优势

结合上篇的状态机和本篇的分层语义图谱,整个自动驾驶复杂场景挖掘方案具备4个核心优势

  • 精准性:状态机的多阶段时序匹配+核心属性List存储,保证了事件提取和分析的精准性;
  • 灵活性:图谱的关系表达能力,保证了复合场景挖掘的灵活性;
  • 易用性:事件级的查询逻辑+分层存储策略,大幅降低了新手的上手门槛;
  • 可扩展性:状态机的声明式场景定义和图谱的轻量化建模,保证了方案对新场景的快速适配。

6.2 现存核心痛点与未来探索方向

尽管当前方案已解决“复杂场景关联难、逻辑冗余”的核心问题,但在规模化工程落地中仍面临两个关键挑战:

  1. 查询编写的复杂性:复杂场景的Cypher语句编写对非图数据库专业人员(业务、测试、产品同学)仍有较高门槛——即便是“他车从左邻车道切入自车道且自车先减速后加速”这类典型场景,也需要编写多轮匹配、时序筛选的Cypher逻辑,难以实现“人人可参与场景挖掘”的目标;
  2. 语义信息的认知负荷:随着实体类型、边类型、事件属性的持续丰富(如新增交通标识、天气等实体,新增“避让”“逼停”等事件),开发人员对海量语义信息的管理、理解和复用成本显著提升,易出现“属性重复定义、边类型语义冲突、事件关联逻辑不统一”等问题。

基于以上痛点,后续也将在「降低场景挖掘的门槛与认知负荷」展开探索,核心大方向包括:

  • 语义知识的标准化管理:建立统一的语义知识体系(实体/边/事件的定义、属性规范、关联规则),让工程师和AI都能清晰理解自动驾驶场景的语义逻辑,降低认知负荷;
  • 自然语言到查询DSL的转化:设计贴合自动驾驶场景的领域特定语言(DSL),实现从自然语言场景描述到标准化DSL的转化,且保证工程师可直观核验DSL是否符合预期;
  • 多查询语言的适配生成:基于标准化DSL,自动转化为可执行的Cypher、SQL等查询语句,打通“自然语言描述→标准化DSL→可执行查询”的全流程,兼顾灵活性与可核验性。

除此之外,我们也将持续探索自动化事件关联、可视化图谱配置、实时化场景挖掘、多模态融合等方向,不断完善自动驾驶复杂场景挖掘的全链路能力。

6.3 结语

自动驾驶的场景挖掘是一个“从数据到信息,从信息到知识,从知识到场景”的过程,状态机和事件驱动的分层语义图谱,正是这个过程中的两个核心抓手。

本篇文章完成了“图谱建模与查询实践”的核心拆解,后续系列将持续分享自动驾驶场景挖掘的工程化实践经验,敬请关注。

本文所有建模和查询示例正在构建开源版本,有兴趣的小伙伴可在评论区留言!


By:世界五百强车企自动驾驶数据挖掘团队,致力于通过工程手段让dirty的work变得不dirty,with efficiency!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-26 08:20:50 HTTP/2.0 GET : https://e.mffb.com.cn/a/482696.html
  2. 运行时间 : 8.541612s [ 吞吐率:0.12req/s ] 内存消耗:4,521.04kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=800be2546eabe2fa27423496d500ce68
  1. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/runtime/temp/600e51726691ba7063b44bb89d9aaaff.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000447s ] mysql:host=127.0.0.1;port=3306;dbname=e_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000535s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.100589s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.100677s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000645s ]
  6. SELECT * FROM `set` [ RunTime:0.100509s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000663s ]
  8. SELECT * FROM `article` WHERE `id` = 482696 LIMIT 1 [ RunTime:0.100795s ]
  9. UPDATE `article` SET `lasttime` = 1774484450 WHERE `id` = 482696 [ RunTime:7.438292s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.100725s ]
  11. SELECT * FROM `article` WHERE `id` < 482696 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.100747s ]
  12. SELECT * FROM `article` WHERE `id` > 482696 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.100706s ]
  13. SELECT * FROM `article` WHERE `id` < 482696 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.102243s ]
  14. SELECT * FROM `article` WHERE `id` < 482696 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.102637s ]
  15. SELECT * FROM `article` WHERE `id` < 482696 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.102387s ]
8.547590s