在统计分析过程中,不同处理方式,相差巨大。
如果是逐条比较,然后处理,(将每次比较的数据存储在临时表),效率非常差,如果3000人,那可能逐条插入3000次。
这样的结果大家很清楚。
欢迎处理时间最大5秒
没有中间处理过程,如临时表。
拒绝游标,目的是杜绝手工比较。
-----------------------------------------------------------------------------------
这样一个需求
某公司,通过自动化,来记录员工每天的考勤,及员工在公司中的行走情况。
员工美经过一个办公室,都会收集到其信息。 数据格式:员工ID、时间、办公室ID
数据信息通过硬件自动采集,每3-5秒钟至少发送一次数据。这一环节不做更多介绍。
在进入公司的时候,先后经过两个门,依次为A,B,这里是有先后书序的。上班,先A,后B,下班先B后A。
进入后一个办公室的时间,即为离开前一个办公室的时间。
办公室的ID是唯一的。
规定:A:1,B:2,工厂里面的是2,3,4
最终收集到杂乱无章的数据,如工人甲,1,1,1,2,2,3,3,3,3,3,4,4..,5,5 ,2,2,1,1
这样这名工人就完成了进入工厂,到办公室,离开工厂。
现需要统计 进入工厂的时间:第一次进入A的时间,第一次进入B的时间。
对于每一个办公室,进入时间与离开时间
离开工厂的时间。
假设,将数据存储在数据库中,应如何实现。数据量比较大,每天至少是20万以上。
进入工厂的数据在表A中,表A有3个字段,员工(a)、记录仪ID(b),时间(c)。
办公室的数据在表B中,结构同表A。
A、B是原始数据表,C、D则是对应的分析之后的数据。
在任何地方,数据量的多少也是不确定的。
这样的需求如何实现?方式一定很多,如只通过数据库脚本,当然还可以通过程序来对数据进行分析。
对应的分析方法,比较简单,那就是对数据进行比较。但数据量较大,而且需要实时处理,3分钟为一周期。
处理周期不应大于3秒(假设从表A、B中选出并排序耗时<1秒)。
欢迎大家发表一下自己的思路,重要的是使用的什么算法。
-----------------------------------------------------------
我的处理是通过存储过程来实现的,每隔3分钟执行一次。
第一阶段:
最初的做法是将逻辑分析方法,翻译成sql语句,通过游标逐条遍历,比较。将结果存储在一个临时表里。
每次至少逐条插入2000条记录。
游标逐条遍历记录(即什么也不做),时间很快。因此时间花费在单条记录的插入上。
在游标最外层使用了事物,效率没有根本提高。通常在批量插入时,使用事物可以较大提高速度。但是事与愿违。
第二阶段:
原理,放弃使用游标。放弃人工逐条比较,即将逻辑分析方法 写在脚本中。
通过表连接让sql 去完成我的逻辑。
结构发现效率从数量级上得到了提高。