交通
更新时间:
本章节以简化的业务场景来介绍车辆通行的最佳实践。
业务场景和要求
本例中简化的业务场景:记录主要交通路口(卡口)的车辆通行信息。要求:
每日有一亿的实时增量数据,数据需要存储五年。
可实时查询每个路口车辆通行情况。例如:某一时间段通过该路口的车辆总数、车辆详单信息等。
可按车辆拍照号码查询一段时间内的车辆的详单信息。
表的逻辑设计
车辆信息表(t_fact_vehicle_info)
字段名 | 字段类型 | 说明 |
---|---|---|
uuid | varchar | 唯一标识 |
access_time | varchar | 接收时间 |
gate_number | varchar | 卡口编码 |
device_num | varchar | |
pass_time | varchar | 过车时间 |
vehicle_number | varchar | 号牌号码 |
vehicle_num_type | varchar | 号牌种类 |
speed | double | 行驶速度 |
picture_url | varchar | |
pt_month |
表的物理设计
按车辆拍照进行HASH一级分区,可均匀的将数据分布到所有分区上。
按卡口编号设置聚集列。
二级分区按月存储,存储五年(60个月的数据),设置二级分区数为61。
创建表组
根据业务场景和要求,创建以下表组和表:
create tablegroup app_group;
创建t_fact_vehicle_info表
CREATE TABLE t_fact_vehicle_info (
uuid varchar NOT NULL COMMENT '唯一标识',
access_time varchar DEFAULT '0' COMMENT '接收时间',
gate_number varchar DEFAULT '0' COMMENT '卡口编码',
device_num varchar DEFAULT '0' COMMENT '',
pass_time varchar DEFAULT '0' COMMENT '过车时间',
vehicle_number varchar DEFAULT '' COMMENT '号牌号码',
vehicle_num_type varchar DEFAULT '' COMMENT '号牌种类',
speed double DEFAULT 0 COMMENT '行驶速度',
picture_url varchar DEFAULT '' COMMENT '',
pt_month bigint COMMENT '',
PRIMARY KEY (uuid,vehicle_number,pt_month)
)
PARTITION BY HASH KEY (vehicle_number) PARTITION NUM 256
SUBPARTITION BY LIST KEY (pt_month)
SUBPARTITION OPTIONS (available_partition_num = 61)
CLUSTERED BY (gate_number)
TABLEGROUP app_group
OPTIONS (UPDATETYPE='realtime')
COMMENT '过车信息';
查询SQL
查询某车牌号码某一段时间内的详单数据:
select * from t_fact_vehicle_info
where vehicle_number='xxxxx'
and pass_time between '2017-10-10 09:00:00'
and '2018-03-01 10:00:00'
and pt_month between 20171010 and 20180301;
查询30分钟内某一路口通过车辆总数信息:
select count(*) from t_fact_vehicle_info
where gate_number='xxxxx'
and pass_time between '2018-03-01 09:00:00' and '2018-03-01 09:30:00'
and pt_month =20180301;
文档内容是否对您有帮助?