员工考勤分析(大数据量,挑战思考方式)

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

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

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

 

转载于:https://www.cnblogs.com/lucika-china/archive/2010/10/25/1860466.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值