交通
更新时间:
本章节以简化的业务场景来介绍车辆通行的最佳实践。
业务场景和要求
本例中简化的业务场景:记录主要交通路口(卡口)的车辆通行信息。要求:
每日有一亿的实时增量数据,数据需要存储五年。
可实时查询每个路口车辆通行情况。例如:某一时间段通过该路口的车辆总数、车辆详单信息等。
可按车辆拍照号码查询一段时间内的车辆的详单信息。
表的逻辑设计
车辆信息表(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 256SUBPARTITION BY LIST KEY (pt_month)SUBPARTITION OPTIONS (available_partition_num = 61)CLUSTERED BY (gate_number)TABLEGROUP app_groupOPTIONS (UPDATETYPE='realtime')COMMENT '过车信息';
查询SQL
查询某车牌号码某一段时间内的详单数据:
select * from t_fact_vehicle_infowhere 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_infowhere gate_number='xxxxx'and pass_time between '2018-03-01 09:00:00' and '2018-03-01 09:30:00'and pt_month =20180301;
该文章对您有帮助吗?