正在给长途货车公司做项目,在3000辆货车上安装了采集器,能采集汽车的当前gps位置,载重, 剩余油量,车速,报警等信息,每30秒采集一次,每天采集3000万条信息,推送到车辆动态信息表,表结构如下:
cheliang_dongtai_xinxi(
   主键,    
   车牌号,
   车辆注册地行政区划,
   车辆当前gps经度信息,
   车辆当前gps纬度信息, 
    车速,0为停驶,大于零则为具体车速,
    载重,
    剩余油量,                                                              记录时间,
各种报警信息                   
)      
 
我们的应用,需针对每一辆车,查询及分析以下信息:
1.查询每辆车的行为轨迹信息,并用地图展示车辆当前及历史行驶轨迹                 
2.根据剩余油量的增减情况 ,分析每辆车的加油情况,
3.分析每辆车的总体油耗情况。
4.车辆预报警信息,如油量耗尽,车辆超载等。  
5. 根据车辆当前位置的不断变化,根据指定算法,计算车辆行驶里程信息。
6. 货车从装货开始,每到一个站点卸一次货,直到卸货完毕,完成整个过程叫一个趟次,相邻两次卸货的行驶过程叫一个趟段。根据采集信息,分析出每辆车的趟次及趟段信息。 
  
 
不知道怎么设计表结构,包括上述采集表,及为了分析而建立的中间分析表,望各位前辈指教。
客户对车辆轨迹信息有一定的实时性要求,对趟段和趟次要求允许一天延迟。        
查询时,主要按时间区间,查询每一辆车的上述信息。我的初步思路是,
1. 对上表车辆动态信息表设计,想到以下几种方法
   a. 按车牌号分区,再按时间按季度分区,但有3000辆车,这样就得分3000个主分区,还有时间子分区,是不是太多了?
   b. 或只按车辆分区,再在时间上加索引,或只按时间分区,在为车牌号建立索引
   c. 车辆注册地行政区划分区,再按时间或车牌分区
感觉哪一种都不合适,网各位前辈指点怎么分区,或有什么其它办法。
 
2.对需求1,直接查询动态信息表
3.对需求2、3、4、5,分别建立独立的表,从原始表抽出发生对应事件的采集时点的信息,并结合历史信息进行计算,将结果放到表中供业务查询
4. 对需求6,建立两张表,趟次表及趟段表,并从原始动态表抽取对应时点数据存储到该表中供业务查询        
 
不知上述思路是否可行,在线焦急等待中,望各位前辈不吝赐教。

解决方案 »

  1.   

    每30s采集一次,对数据库的访问很大。
    0.所有信息一个表空间即可(除非再有其他需求)。
    1.把车辆信息单独一个表(因为车辆注册地行政区划分区,不变化,对吗?你讲的不是很清楚)。
    2.gps信息单独一个表。
    这样,要查经纬度及速度。速度要快的多。
      

  2.   

    好熟悉了,做车联网2年多了,无奈上家公司(厦门xx客车)太TM的欺骗人了,所以离职了,转做sybase iq数据仓库,离开oracle了想想JT808交通部的协议闭着眼睛都清楚,哈哈1.查询每辆车的行为轨迹信息,并用地图展示车辆当前及历史行驶轨迹                 30秒一条频率还行,一般设计大数据量的话,从时间分区入手,没有必要做复合分区,估计下数据量,制定合理的时间分区,一个月或者一个季度分区,然后做个memcached缓存当前最新记录
      

  3.   

    3.分析每辆车的总体油耗情况。
        这个很简单吧,分组统计,每天统计一次,然后其它统计在这个基础上统计4.车辆预报警信息,如油量耗尽,车辆超载等。
        根据808里的格式解析统计好了,分为明细和汇总表
      
    5. 根据车辆当前位置的不断变化,根据指定算法,计算车辆行驶里程信息。
       这个有点难,我写过很多代码来做这个算法,感觉数据的清洗比较重要,用plsql实现起来还算是有难度。看记录仪的数据精确度如何和数据的质量情况了,一般每天晚上跑job,解析出车辆的各种信息,实时的计算对数据库性能影响较大
       6. 货车从装货开始,每到一个站点卸一次货,直到卸货完毕,完成整个过程叫一个趟次,相邻两次卸货的行驶过程叫一个趟段。根据采集信息,分析出每辆车的趟次及趟段信息。
        这个车辆在国标里应该叫行驶记录,停止20分钟以上的,等红绿灯的必须过滤掉,反正算法稍复杂,也是半夜去解析的,一句话,设计的时候考虑性能,会生成每天每车的各种情况的明细表,然后查询的时候根据明细表去计算