电信采集总结

项目之初的一些了解:

一、电信采集数据的过程

 电信公司管理用户上网计费流程:

简化为:

采集数据——>进行备份——>客户端——>服务器——>入库


二、各个模块的实现以及在实现过程中遇到的一些小问题

#采集模块

所需要采集的数据结构如下:

#briup9064|037:wKgB9064A|7|1239184940|133.32.176.98

#briup7585|037:wKgB7585A|7|1239170150|19.147.112.98

#|037:wKgB9683A|8|1239733378|215.238.25.124

#用户名|3A服务器地址|上下线标记|时间戳|用户ip

7:上线

8:下线

具体实现过程:

 使用io流读取一个时间段内的所有用户上下线信息,进行解析,一旦读到一个上线信息,则保存到key为用户ip地址的map集合中,如果用户

在这个时间段内下线了,则保存完整信息给一个list集合,将map中该用户的上线信息清空,将完整信息传给网络模块,不完整数据进行备份。

那么下一次采集数据时,需要先判断备份文件中是否还存在信息,如果存在,则需重新添加到map中,在这里可以直接通过对象流的方式将不完整

数据map集合写到备份文件中,这样,读取备份文件可以直接读取一个集合,然后从这个集合开始继续解析数据。

 

#网络模块

使用socket编程将完整信息从客户端发送给服务器 。

#入库模块

 将服务器接收到的完整数据集合list,进行遍历,将一条一条的数据封装成一个个BIDR对象,然后存到数据库里,在入库过程中,

有一个需要注意的点:因为我们是根据时间戳的日期来存储对象,所以,在preparestatement处理sql语句时会出现游标上线的问题,

这是数据库 的默认配置,在数据库资源开关重复太频繁时就容易报这个错,我用了两种解决方式,第一种,使用数组根据日期保存31个

preparestatement,然后再获取数据时,根据时间戳的日期选择相对应的preparestatement执行sql语句。第二种就是最简单的,直接

在每执行完一条sql语句后就将preparestatement关闭。

 然后就是在入库过程中一旦发生异常,就回滚事务,并将未入库数据进行备份,因此,下一次入库时要先检查备份文件中是否有数据,如果
不为空的话,则需先将这些数据入库


#备份模块

 即将数据进行备份,在这个项目过程中,我备份了两次,分别是在采集和入库两个模块。

#日志模块

主要进行日志输出,查看当前操作信息,还可以自定义日志

#配置模块

读取配置文件中配置的各个类的信息,通过反射获取所有的类的实例,将这些实例存入map集合中,然后通过实例的名字可以拿到对应的实例,

也就是说,在其他类中不会直接创建类的实例,而是通过配置类拿到类的实例,避免了类与类之间的依赖关系


这个项目做的还不够完善,就只实现了数据采集功能,其他的以后补上







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值