赵旭辉
(辽宁铁道职业技术学院 辽宁 121000)
使用Mysql模拟列车运行完成车底数据统计任务初探
赵旭辉
(辽宁铁道职业技术学院 辽宁 121000)
摘要:应用MySQL的计划任务结合存储过程模拟列车车底的运行情况,能够及时掌握车底运用数据的动态变化,既保证数据统计的准确率,也使车底数据的统计、查询工作效率大幅提高,提升用户的使用体验。
关键词:MySQL 计划任务 存储过程 模拟 列车车底
在铁路运营管理过程中,需要对车底的具体运用情况进行统计,但是由于旅客列车车底运用管理的动态变化,致使该项统计工作存在逻辑复杂繁琐、运算量大、手动统计易出错、计算机统计耗时较长等问题。本项目探索使用MySQL计划结合存储过程来模拟日常列车运行情况,并采用阶段统计方法,较好地完成了大数量车底动态运用的快速统计要求,较大幅度提高了统计效率,提升了用户的使用体验。
列车车底周转运用是旅客列车日常运行管理的一项重要工作 ,涉及到车体运用的科学安排和使用效率。但是要对实时运行中的车底运用数据进行统计,却是一项十分复杂的工作。这是因为车底运用数据来自于多个层面信息的综合,尤其是客调命令会临时改变某列车的车底运用规律,使得列车车底数据经常发生变化,加之列车编组众多,统计数据量很大,使得这项工作,既繁锁易错,又费时费力。
以下涉及到列车车底日常统计相关的数据来源。
(1)列车编组图定信息与车底周转图:该图主要反映列车编组的基本属性(编组车次、乘务担当、车辆担当以及列车图定信息)及客运车底周转运用安排情况。如图1所示。
(2)列车车次与运行时刻信息:各列车车次的到发时刻信息。
(3)客运调度命令信息:主要是动态地对各列车编组或单独车次的车底运用进行的改变或调整。如图2所示为客调的列车调度命令列表。
针对上述资料,进行分析可知,每一张车底周转图通常由多个列车编组的车底周转使用信息组成,同一周转图上的各编组的图定基本信息(数量、车型)基本相同;但每个编组(车次)又有自己的独立的使用信息(定员、附注等可能有小幅变化)。调度命令信息的操作对象既可能是同一张周转图中的整个车体交路,也可能是其中某一编组,还可能只是某一个车次,调度命令会动态地改变数量、车底类型、定员、附注等,因此在进行数据统计时必须考虑相应调度命令的内容和作用时限等。
图1 列车编组与车底周转图
图2 客运调度命令
图3 主要数据表及其关系
根据上面分析,建立表groupGraph存储车底周转图信息,建立表groupBase对应列车编组表信息,建立表groupInfo存储周转图中的统一的图定信息,建立表groupRunInfo存储周转图中各车次的实际运行信息,建立表trainRun存储列车时刻与运行信息,建立表cmdInfo存储调度命令信息。各表间的关系如图3所示。
上述车底运用信息的统计涉及到复杂的数据库操作,如果应用其他语言进行程序设计,逻辑调用会十分复杂。另外由于调度命令的存在使得车底运用信息具有动态变化和不确定性,必须要获取各个车次每天的实际运行信息,才能进行准确统计。考虑使用MySQL提供的存储过程在服务器端进行复杂数据库处理,能加快数据处理速度,提高数据库使用效率。而且MySQL自5.1版本支持计划任务事件,利用计划任务事件可以定时自动执行的特点,结合存储过程模拟列车的实际运行情况,从而获得相关编组、车次的实际运行信息。
MySQL中开启计划任务的方法有两种:
一是执行命令SET EVENT_SCHEDULER=ON 临时开启计划任务,重新启动MySQL时需要重新设定。
二是修改my.ini文件。在MySQL程序的目录下找到my.ini文件,添加:EVEN_SCHEDULER =1。保存后重启MySQL服务即可实现永久开启计划任务。
在MySQL中使用SHOW VARIABLES LIKE 'EVENT_SCHEDULER'可以查看是否开启了计划任务功能。
开启计划任务后,还要根据项目需要,考虑建立如下存储过程:
(1)调度命令检查过程
在进行调度命令执行前,需要检查调度命令的时效性。即对调度命令记录进行鉴别,以确定该命令是否失效,并对失效的调度命令,设定失效标志。设定了失效标志的调度命令,将不再执行。由于调度命令内容灵活,这里对涉及到调度命令的类型,进行了全面分析并归纳总结,本项目将调度命令按执行时间分为两大类命令:
确定了调度命令的分类后,对于调度命令的检查也变得十分简单。对于一次性命令通过标志变量的设置,即可实现只执行一次的效果。而周期性命令,利用当前日期与周期n的取余运算,即可得出当日是否为该命令的执行日期。
该项计划任务在每天0:30分自动执行。
(2)调度命令执行过程
调度命令最初由具有管理权限的用户录入,进入命令表中的各条命令均在执行当日的凌晨自动执行。这个功能的实现方法就是将该存储过程设定为每日凌晨1点自动运行的计划任务。该任务通过遍历调度命令表(cmdInfo),查询在当天生效的调度命令,并依据命令内容对作用车次的实际图定信息表(groupRunInfo)进行加挂、甩挂、换挂等操作,同时在groupRunInfo表中对应的记录上标明适用的命令号,以备日统计使用。其执行流程如图4所示。
图4 调度命令执行流程
建立每日凌晨1点自动执行的计划任务,该任务调用ExecCMD存储过程,执行当日生效的调度命令,代码如下:
CREATE EVENT exeEveryDay01
ON SCHEDULE EVERY 1 DAY
STARTS '2015-11-01 01:00:00'
ON COMPLETION PRESERVE ENABLE
DO CALL ExecCMD( );
存储过程ExecCMD比较简单,这里不再给出代码。
(3)模拟列车运行过程进行日信息统计过程
该过程通过读取列车编组表(groupBase),确定当日运行的车次,依据列车实际图定信息表(groupruninfo),对当日的实际运行信息,进行日统计,并将统计信息追加存放于表dayStatistic中,即表dayStatistic中实际存放了每一天各车次实际运行的汇总信息。其执行流程如图5所示。
每日凌晨1点时,系统自动执行计划任务cmdPerformace,对存储在命令列表中的各个调度命令进行判断当时运行的车次是否发生改变,对于发生改变的车次,记录其改变信息,将变化后的信息按日期存入groupRunInfo表中,未有变动的车次信息直接存入groupRunInfo表中。在调度命令执行后,即可自动运行当日数据统计任务,对于当时的车次信息进行统计。
图5 模拟列车运行并进行每日统计流程
(4)月统计任务和年统计任务
月统计任务于每月1日凌晨2:00,对上一月的车次运行信息的日统计表(dayStatistic)数据进行月汇总,并存放于月统计表中(monthStatistc)。月统计存储过程名为monthStatistic。
CREATE EVENT exeMonth02
ON SCHEDULE EVERY 1 MONTH
STARTS '2015-01-01 02:00:00'
ON COMPLETION PRESERVE ENABLE
DO CALL monthStatistic( );
年统计过程定于每年的1月1日的凌晨3:00运行,其工作对象是存储于月统计表中的上一年度的数据,将其进行年度汇总,并存放于年统计表中(yearStatistic)。年统计存储过程名为yearStatistic。
CREATE EVENT exeYear03
ON SCHEDULE EVERY 1 YEAR
STARTS '2015-01-01 03:00:00'
ON COMPLETION PRESERVE ENABLE
DO CALL yearStatistic( );
(5)动态统计与查询
这一功能的实现仍然通过调用存储过程实现。该过程接收两个参数用于确定查询的起止时间信息。系统用户提供的起止信息依据时间跨度进行时间分段,分别从年汇总表、月汇总表和日汇总表中抽取符合时间要求的信息,放入临时表中,进行再次进行汇总统计。并将生成的符合要求的统计信息存放于事先定义好的固定表queryStatistic中返回给用户使用。由于事先进行了年月日的基础信息统计,所以这一过程的动态查询非常迅速,实现了较高的查询效率。另外,用户还可对查询到的数据还可以进一步地进行筛选,实现高级查询。此过程十分简单,不再详述。
使用Mysql的定时计划结合存储过程对于完成像列车运行数据统计等一类具有运行规律,但运行信息又时常变动的对象非常有效。该方案应用存储过程进行固定的信息处理同时结合了计划任务定时自动的特点,实现对真实运行情况的现实模拟操作,掌握了对信息的动态变化。在统计分析阶段,也利用计划任务的自动执行特点,阶段性、化整为零地分解了较大时间范围内复杂的数据统计任务,降低了最终用户查询时的统计工作量,加速了最终结果的呈现速度,提高了统计效率,提升了用户体验。另外存储过程工作于服务器端,充分发挥了服务的强大运算效能,减少了客户端的运算,实现了瞬时统计出结果,极大地提升用户的使用体验。此方法对于类似对象的日常运行情况也能实现按规则自动化管理,值得借鉴和运用。
参考文献:
[1]吕苗苗,倪少权,陈钉均,张骥.新旧交替列车运行图客车车底周转图智能编制方法研究[J].铁道学报.2012.10
[2]孔祥盛. MySQL核心技术与最佳实践[M].北京:人民邮电出版社.2014
Statistics Collection of the Train Carriages Using the Mysql Simulation System of Train Operation
Zhao Xu-hui
(Liaoning Railway Vocational and Technical college Liaoning 121000 China)
Abstract:MySQL event scheduler and stored procedure can simulate the running of the train carriage. It is beneficial to grasp the dynamic, ensure the accuracy of the statistical data and improve the carriage data statistics, the work efficiency and the user experience.
Key words:MySQL event scheduler stored procedure simulation the train carriage
文献标识码:中国分类号:U29A
文章编号:1673-1816(2016)01-0071-05
收稿日期:2015-11-14
作者简介:赵旭辉(1974-),男,汉,辽宁朝阳人,硕士,副教授。