在统计分析过程中,不同处理方式,相差巨大。

如果是逐条比较,然后处理,(将每次比较的数据存储在临时表),效率非常差,如果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 去完成我的逻辑。

结构发现效率从数量级上得到了提高。 

 

posted on 2010-10-25 15:38  lucika.china  阅读(4374)  评论(8编辑  收藏  举报