大体分为两个方面:
1.客户端 负责采集各个区域产生的数据信息分为5个模块
1.1 配置模块
1.2 日志模块
1.3 采集模块
1.4 备份模块
1.5 网络模块
2.服务器 接收数据
1.1 配置模块
1.2 日志模块
1.3 入库模块
1.4 备份模块
1.5 网络模块
BIDR类 用来分装采集好的数据
接口
Gather接口 客户端采集模块
负责采集指定文件中的数据(AAA服务器产生的文件)
需要实现的方法:
Collection<BIDR> gather();
采集文件样例:
#briup1660|037:wKgB1660A|7|1239110900|44.211.221.247
#briup4418|037:wKgB4418A|7|1239138480|251.196.223.191
#|037:wKgB1660A|8|1239203860|44.211.221.247
...
..
问题:
1.怎么获得文件路径
2.了解每一行数据的意思
2.1 数据中使用的是|进行分割
2.2 数据一共分为俩种
遵循7上8下的规则
包含 7 的数据 表示用户上线
包含 8 的数据 表示用户下线
包含7的数据
数据分为五个部分
第一部分:登录的用户名字(去掉#号)
第二部分:NAS服务器的名称
第三部分:一定是7
第四部分:上线的时间(单位是秒)
第五部分:登录时的IP
2.4 包含8的数据
数据分为五个部分
第一部分:一定是个符合 #
第二部分:NAS服务器的名称
第三部分:一定是8
第四部分:下线的时间(单位是秒)
第五部分:登录时的IP
3.如何读写数据
4.如何封装数据
5.采集的数据分俩种情况
第一种情况数据:
用户上线了同时也下线了
第二种情况数据:
用户上线了但是还没有下线
6.俩种数据情况怎么处理
上面描述的第一种数据:
封装好对象之后就准备传给服务器端
上面描述的第二种数据:
进行数据的备份,在一下次采集中,需要把这个备份的数据重新读出来使用,因为用户可能在一下次采集中下线了
7.第二次读取数据的时候,如何从第一次读完数据的下一行开始读
可以记录一下本次总共读取了多少个字节,下一次可以直接跳过这么多个字节,接着读就可以了
8.在读取过程中或者处理过程中,如果出现了异常,需要把数据进行备份
9.注意重要信息的日志记录
Client接口 客户端网络模块
负责把采集好的数据发给服务器
需要实现的方法:
void send(Collection<BIDR> c)
问题:
1.如何得到连接服务器的相关信息
2.如何得到采集好的数据
3.如何把数据发送给服务器
4.如果发送数据失败怎么处理
5.注意重要信息的日志记录
Server接口 服务器端网络模块
负责接收客户端传过来的数据
需要实现的方法:
Collection<BIDR> revicer();
void shutdown();
问题:
1.如何获得服务器启动时候用的相关信息
2.如何关闭关闭服务器
3.如何接收客户端传过来的信息
4.如何处理客户端并发的问题
5.接收到数据之后一下步怎么做
6.数据的接收或者处理过程备份的问题
7.注意重要信息的日志记录
DBStore接口 服务器端入库模块
负责接收到的数据插入到数据库中
需要实现的方法:
void saveToDB(Collection<BIDR> c)
问题:
1.如何获得连接数据库的相关信息
2.怎么把数据插入到数据库中
3.插入数据时候的效率问题
4.什么样的数据对应哪一种表
Logger接口 公共的日志模块
负责记录系统运行过程的一些重要信息
需要实现的方法:
void debug(String msg);
void info(String msg);
void warn(String msg);
void error(String msg);
void fatal(String msg);
问题:
1.怎么来实现日记记录
2.了解日志级别
3.怎么设置日志的级别
4.怎么获得日志对象
5.怎么控制日志的格式
6.怎么控制日志输出到控制台和指定文件中
BackUP接口 公共的备份模块
负责备份一些没有处理完的数据
需要实现的方法:
void store(String filePath, Object obj,
boolean append)
Object load(String filePath, boolean del)
问题:
1.如何获得备份文件存放的目录信息
2.如何把数据备份到文件
3.如何读取文件中的备份数据
4.如何实现备份数据时候的追加或者是覆盖
5.如何控制读取备份数据后文件是否需要删除
Configuration接口 公共的配置模块
该模块相当于一个工厂
负责
1.产生各个模块对象
2.读取各个模块所需的信息,并且把信息注入到每个模块中
注:这时候需要每个模块都实现接口WossModule
3.如果某个模块A中需要用到配置模块,那么就需要把自己(因为自己就是配置模块)注入到这个模块A中
注:这时候需要模块A实现接口ConfigurationAWare
需要实现的方法:
Logger getLogger();
BackUP getBackup();
Gather getGather();
Client getClient();
Server getServer();
DBStore getDBStore();
问题:
1.怎么获得每个模块的相关信息
2.如何创建每个模块的对象
3.怎么把每个模块需要的数据注入到模块中
4.什么时候可以把自己(配置模块本身)注入到需要的模块中
WossModule接口
例如:模块A中需要使用一些参数(比如读取xml的路径、连接数据的地址等等),模块A就需要实现WossModule接口,那么这个模块A就有一个方法:
init(Properties p)
将来我们就可以调用这个init方法,把数据注入到模块A中
ConfigurationAWare 接口
Configuration是配置模块接口
例如:模块A中需要使用到配置模块,模块A就需要实现ConfigurationAWare接口,那么这个模块A就有一个方法:
setConfiguration(Configuration c)
将来我们就可以调用这个方法将配置模块对象注入给模块A
数据库:
1.有31张表
t_detail_1
..
t_detail_31
表中的列:
(
aaa_login_name VARCHAR2(30),
login_ip VARCHAR2(32),
login_date DATE,
logout_date DATE,
nas_ip VARCHAR2(32),
time_duration NUMBER(10)
)
2.每张表对应一个日子
3.不同的数据需要插入到不同的表里面
例如:1号(不关注年和月)产生的数据,就需要把数据插入到第1张表中,15号产生的数据,就需要插入到第15张表里面
4.建表语句
使用PL/SQL建表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
‘CREATE TABLE t_detail_‘||TO_CHAR(i)||
‘(
aaa_login_name VARCHAR2(30),
login_ip VARCHAR2(32),
login_date DATE,
logout_date DATE,
nas_ip VARCHAR2(32),
time_duration NUMBER(10)
)‘;
END LOOP;
END;
/
使用PL/SQL删除表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
‘DROP TABLE t_detail_‘||TO_CHAR(i);
END LOOP;
END;
/
原文:http://www.cnblogs.com/HeeKo/p/5940405.html