Adas告警设计 V1:
sql
CREATE TABLE `video_adas_alarm` (
`alarmDate` DATE COMMENT "报警日期:yyyy-MM-dd",
`customAarmCode` varchar DEFAULT NULL COMMENT '报警唯一编码',
`clientid` INT DEFAULT NULL COMMENT '客户id',
`terminal_id` INT DEFAULT NULL COMMENT '车辆id',
`alarmLevel` int DEFAULT NULL COMMENT '报警级别:一二三',
`alarmType` int DEFAULT NULL COMMENT '报警类型',
`alarmEvent` INT DEFAULT NULL COMMENT '报警类型:事件',
`terminal_code` varchar DEFAULT NULL COMMENT '设备编码',
`alarmTime` datetime DEFAULT NULL COMMENT '报警时间',
`adasTerminalCode` varchar DEFAULT NULL COMMENT 'ADAS报警设备编码',
`adaslat` double DEFAULT NULL COMMENT '纬度',
`adaslng` double DEFAULT NULL COMMENT '经度',
`alarmBsDate` datetime DEFAULT NULL COMMENT '报警标识时间',
`alarmMark` varchar DEFAULT NULL COMMENT '报警标识',
`alarmid` INT DEFAULT NULL COMMENT '报警ID',
`annexCount` tinyint DEFAULT NULL COMMENT '附件个数',
`batteryPower` INT DEFAULT NULL COMMENT '电池电量',
`beforeCarSpeed` INT DEFAULT NULL COMMENT '前车速度',
`beforePerCarDistance` INT DEFAULT NULL COMMENT '前车/行人距离',
`bjtimefz` INT DEFAULT NULL COMMENT '报警时间阀值',
`carSpeed` INT DEFAULT NULL COMMENT '当前车速',
`csbjtype` INT DEFAULT NULL COMMENT '超速报警类型',
`deviateType` INT DEFAULT NULL COMMENT '偏离类型',
`dir` INT DEFAULT NULL COMMENT '方向',
`elevation` INT DEFAULT NULL COMMENT '海拔',
`fatigue` INT DEFAULT NULL COMMENT '疲劳程度 数值越大表示疲劳程度越严重,仅在报警类型为 0x01 时有效',
`flagStatus` INT DEFAULT NULL,
`fz1` INT DEFAULT NULL,
`fz2` INT DEFAULT NULL,
`glat_xz` double DEFAULT NULL,
`glng_xz` double DEFAULT NULL,
`gpslat` double DEFAULT NULL COMMENT '纬度',
`gpslng` double DEFAULT NULL COMMENT '经度',
`identityNo` varchar DEFAULT NULL COMMENT '驾驶员从业资格证号',
`logger_speed` double DEFAULT NULL COMMENT '行驶记录速度',
`logoCategory` INT DEFAULT NULL,
`logoData` INT DEFAULT NULL,
`posinfo` varchar DEFAULT NULL,
`rcvDate` datetime DEFAULT NULL COMMENT '报警接收时间',
`roadLimiting` INT DEFAULT NULL COMMENT '道路限速',
`roadType` INT DEFAULT NULL COMMENT '道路类型',
`serialNumber` INT DEFAULT NULL COMMENT '报警序号',
`tireNum` INT DEFAULT NULL COMMENT '轮胎编号',
`tirePressure` INT DEFAULT NULL COMMENT '胎压',
`tireTemp` INT DEFAULT NULL COMMENT '胎温',
`vhcstate` INT DEFAULT NULL COMMENT '车辆状态',
`fileNames` varchar DEFAULT NULL,
`level_type` varchar DEFAULT NULL
) ENGINE=OLAP
UNIQUE KEY(alarmDate, customAarmCode)
PARTITION BY RANGE(alarmDate) ()
DISTRIBUTED BY HASH(`customAarmCode`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"bloom_filter_columns"="customAarmCode,clientid,terminal_id,alarmLevel",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.history_partition_num" = "1",
"dynamic_partition.start" = "-4096",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "1"
);
考虑到有根据 id 查询并跟新的需求,重新设计为:
低级数列,如:性别、级别、类型等采用位图索引:
sql
ALTER TABLE video_adas_alarm ADD INDEX idx_adas_alerm_alarmLevel (alarmLevel) USING BITMAP;
ALTER TABLE video_adas_alarm ADD INDEX idx_adas_alerm_alarmType (alarmType) USING BITMAP;
ALTER TABLE video_adas_alarm ADD INDEX idx_adas_alerm_alarmEvent (alarmEvent) USING BITMAP;
**注意:**Bitmap索引在Aggregate表仅支持Key列
性能对比
索引类型 | 适用场景 | 查询加速效果 | 存储开销 |
---|---|---|---|
前缀索引 | 排序键范围查询 | 5-10倍 | 无 |
倒排索引 | 文本模糊匹配/非主键过滤 | 40倍 | 高 |
BloomFilter | 高基数列精确过滤 | 3-5倍 | 低 |
Bitmap | 低基数列聚合统计 | 10倍 | 中 |
创建分区:
sql
ALTER TABLE video_adas_alarm
ADD PARTITION p20250709
VALUES [("2025-07-09"), ("2025-07-10"));
相关业务 DTO 解释
java
public int alarmid; //报警ID
public int flagStatus ; //标志状态
public int alarmEvent; //报警事件/类型
public int alarmLevel; //报警级别
public int alarmType; //报警类型 1 adas 2 dsm 3 胎压 4 盲区监测报警 5 激烈驾驶 6 GPS信号异常报警
public int beforeCarSpeed; //前车速度
public int beforePerCarDistance; //前车/行人距离
public int deviateType; //偏离类型
public int logoCategory; //道路标识识别
public int logoData; //道路标识数据
public int carSpeed; //当前车速
public int elevation; //海拔
public double adaslat; //纬度
public double adaslng; //经度
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
public Date alarmDate; //报警日期
public int vhcstate; //车辆状态
public String adasTerminalCode; //设备编码
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
public Date alarmBsDate; //报警标识时间
public int serialNumber; //报警序号
public int annexCount; //附件数量
public int tireNum; //轮胎编号
public int tirePressure; //胎压
public int tireTemp; //胎温
public int batteryPower; //电池电量
public String customAarmCode; //自定义报警编码
public int terminal_id; //设备自增编码
public String terminal_code; //设备自增编码
public double gpslat; //gps纬度
public double gpslng; //gps经度
public int clientid;
public int fatigue; //疲劳程度 数值越大表示疲劳程度越严重,仅在报警类型为 0x01 时有效
public int fz1; //阀值1
public int fz2; //阀值2
public int csbjtype; //超速报警类型
public int bjtimefz; //报警时间阀值
public String alarmMark; //报警标识
public double logger_speed; //行驶记录速度
public int dir; //方向
// 道路类型编号
//0x01 高速路
//0x02 都市高速路
//0x03 国道
//0x04 省道
//0x05 县道
//0x06 乡村道路
//0x07 其他道路
//0x08- 0xFF 保留
public int roadType; //道路类型
public int roadLimiting; //道路限速值
//是否副设备 false主设备 ,true 副设备
public boolean deputy;
public String prover;//协议版本 河北省标报警判断添加
sql
CREATE TABLE `video_adas_rule_alarm` (
`alarmDate` DATE COMMENT "报警日期:yyyy-MM-dd",
`customAarmCode` varchar DEFAULT NULL COMMENT '报警唯一编码',
`clientid` varchar DEFAULT NULL COMMENT '客户id',
`terminal_id` varchar DEFAULT NULL COMMENT '车辆id',
`level_type` varchar DEFAULT NULL COMMENT '报警类型',
`identityNo` varchar DEFAULT NULL COMMENT '从业资格证编码',
`alarmLevel` int DEFAULT NULL COMMENT '报警级别:一二三',
`terminal_code` varchar DEFAULT NULL COMMENT '设备编码',
`alarmType` int DEFAULT NULL COMMENT '报警类型',
`alarmEvent` INT DEFAULT NULL COMMENT '报警类型:事件',
`alarmBsDate` datetime DEFAULT NULL COMMENT '报警标识时间',
`rcvDate` datetime DEFAULT NULL COMMENT '接收时间',
`startTime` datetime DEFAULT NULL COMMENT '报警开始时间',
`endTime` datetime DEFAULT NULL COMMENT '报警结束时间',
`FalseAlarmTime` datetime DEFAULT NULL COMMENT '时间',
`alarmCount` INT DEFAULT NULL COMMENT '报警次数',
`carSpeed` INT DEFAULT NULL COMMENT '当前车速',
`gpslat` double DEFAULT NULL COMMENT 'gps纬度',
`gpslng` double DEFAULT NULL COMMENT 'gps经度',
`glat_xz` double DEFAULT NULL COMMENT '纬度修正',
`glng_xz` double DEFAULT NULL COMMENT '经度修正',
`posinfo` varchar DEFAULT NULL COMMENT '位置信息',
`handleTime` datetime DEFAULT NULL COMMENT '处理时间',
`finishTime` datetime DEFAULT NULL COMMENT '完成时间',
`handleUserId` INT DEFAULT NULL COMMENT '处理人ID',
`handleUserName` varchar DEFAULT NULL COMMENT '处理人',
`handleMethod` varchar DEFAULT NULL COMMENT '处理方式',
`handleContent` varchar DEFAULT NULL COMMENT '处理内容',
`handleState` INT DEFAULT NULL COMMENT '处理状态 0未处理 1自动处理 2人工处理',
`fileNames` varchar DEFAULT NULL,
`vhcstate` INT DEFAULT NULL COMMENT '车辆状态',
`elevation` INT DEFAULT NULL COMMENT '海拔',
`fz1` INT DEFAULT NULL COMMENT '阀值1',
`fz2` INT DEFAULT NULL COMMENT '阀值2',
`csbjtype` INT DEFAULT NULL COMMENT '超速报警类型',
`remark` varchar DEFAULT NULL COMMENT '备注',
`positive` tinyint DEFAULT NULL COMMENT '(误报) 0.否 1.是',
`handleResult` tinyint DEFAULT NULL COMMENT '(处理结果)1.正在处理 2.处理成功 3.下发成功 4.下发失败 5. 应答失败',
`roadType` INT DEFAULT NULL COMMENT '道路类型',
`roadLimiting` INT DEFAULT NULL COMMENT '道路限速值',
`alarmMark` varchar DEFAULT NULL COMMENT '报警标识',
`logoCategory` INT DEFAULT NULL COMMENT '道路标识识别',
`misreportedContent` varchar DEFAULT NULL COMMENT '误报原因',
`annexCount` tinyint DEFAULT NULL
) ENGINE=OLAP
UNIQUE KEY(alarmDate, customAarmCode)
PARTITION BY RANGE(alarmDate) ()
DISTRIBUTED BY HASH(`customAarmCode`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"bloom_filter_columns"="clientid,terminal_id,level_type,alarmLevel,identityNo",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.history_partition_num" = "1",
"dynamic_partition.start" = "-4096",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "1"
);
创建索引
sql
ALTER TABLE video_adas_rule_alarm ADD INDEX idx_adas_rule_alerm_alarmLevel (alarmLevel) USING BITMAP;
ALTER TABLE video_adas_rule_alarm ADD INDEX idx_adas_rule_alerm_alarmType (alarmType) USING BITMAP;
ALTER TABLE video_adas_rule_alarm ADD INDEX idx_adas_rule_alerm_alarmEvent (alarmEvent) USING BITMAP;
限制副本过多:
sql
ALTER TABLE video_adas_alarm SET ("cumulative_compaction_min_deltas" = "5");
ALTER TABLE video_adas_alarm SET ("cumulative_compaction_max_deltas" = "50");
-- 限制最大版本数
ALTER TABLE video_adas_alarm SET ("max_tablet_version_num" = "500");