数据挖掘技术在电信计费系统中的应用.docx
《数据挖掘技术在电信计费系统中的应用.docx》由会员分享,可在线阅读,更多相关《数据挖掘技术在电信计费系统中的应用.docx(36页珍藏版)》请在冰点文库上搜索。
数据挖掘技术在电信计费系统中的应用
摘要
本毕业论文所介绍的是数据挖掘技术在电信计费系统中的应用。
数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、事先不知道的、但又是潜在有用的信息和知识的过程。
随着网络的高速发展,一些大型厂商推出了服务器出租这项业务。
为了使得出租商快捷、方便以及高效的统计出用户的登录信息及应缴费情况,本论文开发了一个电信计费系统。
本系统采用C/S架构,在UNIX环境下以C++为主要的开发语言开发完成。
客户端的功能包括定时从服务器日志文件采集用户数据,匹配登入/登出信息,向服务器发送数据;服务端的功能包括接收客户端发送过来的数据,存储数据和整合数据等。
关键词:
毕业设计;电信计费系统;数据匹配;数据整合
TheApplicationofDataMiningTechnologyintheTelecomTollSystem
Abstract
Describedinthisthesisistheapplicationofdataminingtechnologyinthetelecommunicationsbillingsystem.Dataminingisimpliedfromalargenumberofincomplete,noisy,fuzzy,randomdatainwhich,notknowninadvance,butpotentiallyusefulinformationandknowledge.WiththerapiddevelopmentoftheNetwork,somelargecompaniessuchasChinaTelecomlaunchedtheserverrentbusiness.Inordertostatisticuserlogininformationandchargemorefast,convenientlyandefficiently,aTelecomtollsystemisdevelopedinthispaper.
ThissystemisprogrammedbyC++languagewithC/SarchitectureinUNIXoperatingsystem.Thefunctionsinclientportincludereadinguserinformationfromserverlogfile,matchingdataandsendingdatatoaserver.Thefunctionsinseverportincludereceivingdatafromclient,datastorageandintegratingdata.
Keywords:
Graduationdesign,theTelecomtollsystem,Datamatch,Dataintegration
第1章绪论
1.1系统背景
在电信的业务中,有一种Unix实验室出租业务。
只要用户向电信运营商申请一个Unix帐号,就可以远程登录Unix实验室,并使用Unix系统。
用户使用电信运营商提供的Unix实验室的服务需要缴纳一定的费用,电信运营商需要一套数据采集系统,把用户登录实验室的时间长度数据采集起来,便于在指定的时间范围内作为对用户的收费依据。
要求数据采集系统必须采集如下信息:
登录用户名,登录的时间,登出的时间,登录总的在线时间,登录的实验室IP,用户的终端IP等信息。
系统需要开发这样一个通用的数据采集系统程序来采集Unix机器记录的用户登入和登出的原始记录,并将这些记录解析匹配成用户的登录记录,然后发送给数据采集服务器,在服务器端将这些数据以日期为单位保存在数据库中,然后整合这些数据形成日报表,月报表和年报表。
1.2系统原理
任何用户登录Unix系统,Unix系统都会记录用户的登录信息,所有用户登入/登出的信息都保存在Unix的系统日志文件中。
数据采集系统就是通过读取Unix系统日志文件中用户登入/登出信息,并找出成对的登入/登出记录,得到用户登录实验室的登入时刻、登出时刻、登录时间长度等电信用户收费需要使用的数据,最后把匹配处理好的数据保存成电信工作人员可以阅读的文本文件,做为电信收费依据。
用户登录Unix系统的日志记录文件在Unix的/var/adm目录下,文件名是wtmpx,日志记录文件是一个二进制文件,在Unix中可以使用last指令查看,last命令格式为:
last[-a][-nnumber|-number][-ffilename][name|tty]
wtmpx文件中一条登录记录包含372字节,每条记录包含的数据项格式说明如下表1-1所示:
(其中黄色背景标识的数据项就是要采集的数据项)
位置范围
字节长度
含义
000-031
32
/*用户登录名*/
032-035
4
/*inittabid*/
036-067
32
/*devicename(console,lnxx)*/
068-071
4
/*进程ID*/
072-073
2
/*登录类型7-登入,8登出*/
074-075
2
/*processtermination*/
076-077
2
/*exitstatus*/
2
/*这是C数据类型补齐产生的空位*/
080-083
4
/*登录时刻*//*单位是秒*/
084-087
4
/*andmicroseconds*/
088-091
4
/*sessionID,usedforwindowing*/
092-111
20
/*reservedforfutureuse*/
112-113
2
/*significantlengthofut_host*/
114-371
257
/*登录IP*/
【表1:
用户登录记录数据项格式】
登录记录总数计算公式为:
登录记录总数=日志文件大小/372。
数据名
数据含义
是否需要采集
备注说明
logname
用户登录名
是
匹配同一次登录会话的必须数据之一
pid
进程ID
匹配同一次登录会话的必须数据之二
type
登录类型7-登入,8登出
Type的值在1-8之间,但只处理7与8两种情况
logtime
登录时刻*//*单位是秒
是
要采集的数据,logtime是登入或登出时刻
logip
登录IP
是
要采集的数据
表1-2:
要读取的原始记录数据
数据名
数据含义
备注说明
logname
用户登录名
logintime
登入时刻
logouttime
登出时刻
durations
登录时间长度
logip
登录终端的ip地址
表1-3:
匹配登录记录数据
用户的登录信息数据在每一台机器上匹配好后需要发送到服务器来,服务器接收到这些匹配好的数据记录后将其保存在数据库中,形成用户登录记录明细表。
然后我们的程序需要定期的整理出日报表,月报表和年报表。
在数据库中保存的用户登录记录明细表结构如下:
数据名
数据含义
备注说明
logname
用户登录名
logintime
登入时刻
logouttime
登出时刻
durations
登录时间长度
logip
登录终端的ip地址
labip
用户登录的实验室IP
整理成日报表后形成如下数据项:
数据名
数据含义
备注说明
logname
用户登录名
logip
登录终端的ip地址
DAY_TIME
日登录时间长度
Labip
用户登录的实验室IP
Month
用户登录月份
整理成月报表后形成如下数据项:
数据名
数据含义
备注说明
logname
用户登录名
Logip
登录终端的ip地址
MONTH_TIME
月登录时间长度
Labip
用户登录的实验室IP
Year
用户登录年份
整理成年报表后形成如下数据项:
数据名
数据含义
备注说明
Logname
用户登录名
Logip
登录终端的ip地址
YEAR_TIME
年登录时间长度
Labip
用户登录的实验室IP
第2章需求分析
2.1功能概述
系统主要实现以下核心功能:
数据读取,数据匹配,数据发送,数据接收,数据存储,数据整合。
2.1.1数据读取
该功能模块的主要任务是读取Unix机器的用户登录记录文件,将文件的信息解析为程序对象,以方便匹配模块的匹配。
2.1.2数据匹配
该模块的主要任务是将数据读取模块读取到的数据按照登入/登出的关系匹配成一条完整的登录记录。
2.1.3数据发送
该模块的主要任务是建立客户端网络连接,将匹配好的用户登录记录以字符串的形式发送到服务器。
2.1.4数据接受
该模块的主要任务是建立服务器端网络连接,从客户端读取匹配好的用户登录记录字符串。
2.1.5数据存储
该模块的主要任务是将数据接收模块接收到的数据保存到指定的数据库表中。
2.1.6数据整合
该模块的主要任务是将数据库中保存的用户登录记录明细表的数据整合成日报表,月报表和年报表。
2.2系统描述
2.2.1数据采集
用例名称
数据采集
功能简述
管理员运行程序,完成数据采集的功能
前置条件
程序已正确安装并部署
基本流
1.管理员启动服务端程序
2.管理员启动客户端程序
3.客户端程序读取上次未匹配的登入记录
4.客户端程序读取用户登录数据文件
5.客户端程序得到用户登入/登出记录列表
6.客户端程序将用户的登入和登出记录按照对应关系匹配成完整的登录记录
7.客户端程序将不能成功匹配的登入记录写到文件中保存
8.客户端程序将匹配好的登录记录发送到数据采集服务端
9.服务端程序接收采集的数据
10.服务端程序将数据写到服务端文件中保存下来
分支与异常
第1步,若启动服务端程序失败,则报告异常。
第2步,若启动客户端程序失败,则报告异常。
第3步,若上次未匹配的登入记录文件不存在,则跳过到第3步。
第4步,若读取用户登录数据文件失败,则报告异常。
第7步,若指定的写出目录不存在,则创建目录。
第7步,若创建目录或写文件失败,则报告异常。
第8步,若发送数据失败,则定时重传。
第10步,若写入文件失败,则报告异常。
后置条件
无
备注
无
2.2.2数据读取
用例名称
数据读取
功能简述
程序读取系统数据文件和上次未匹配的登入记录,形成用户登录记录列表。
前置条件
客户端程序启动
基本流
1.根据系统配置信息确定上次未匹配的登入记录文件的位置。
2.读取上次未匹配的登入记录,形成用户登录记录列表。
3.根据系统配置信息确定用户登录数据文件的位置。
4.读取数据文件,将文件内容解析成用户登录记录。
5.将上一步中解析得到的用户登录记录添加到列表中。
6.返回用户登录记录列表。
分支与异常
第2步,若上次未匹配的登入记录文件不存在,则跳过到第3步。
第4步,若用户登录数据文件不存在,则报告异常。
后置条件
无
备注
无
2.2.3读取上次未匹配的登入记录
用例名称
读取上次未匹配的登入记录
功能简述
程序读取上次未匹配的登入记录,形成用户登录记录列表。
前置条件
客户端程序启动
基本流
1.根据系统配置信息确定上次未匹配的登入记录文件的位置。
2.读取文件内容,将数据解析成用户登入记录。
3.创建内存列表,保存读取到的登入记录数据。
4.清空未匹配的登入记录文件。
分支与异常
第2步,若上次未匹配的登入记录文件不存在,则结束此用例。
第2步,若读取文件失败,则报告异常。
第4步,若清空文件失败,则报告异常。
后置条件
无
备注
无
2.2.4读取用户登录数据文件
用例名称
读取用户登录数据文件
功能简述
程序读取用户登录数据文件,形成用户登录记录列表。
前置条件
客户端程序启动
基本流
1.根据系统配置信息确定数据文件位置。
2.备份数据文件,并删除原始数据文件。
3.根据系统配置信息确定上次未匹配的登入记录文件的位置。
4.读取上次未匹配的登入记录,形成用户登录记录列表。
5.读取数据文件,将文件内容解析成用户登录记录。
6.将上一步中解析得到的用户登录记录添加到列表中。
7.返回用户登录记录列表。
分支与异常
第2步,若找不到数据文件,则报告异常。
第2步,若备份数据失败,则报告异常。
第3步,若上次未匹配的登入记录文件不存在,则跳过到第4步。
第4步,若读取备份数据文件失败,则报告异常。
第6步,若指定的写出目录不存在,则创建目录。
第6步,若创建目录或写文件失败,则报告异常。
第7步,若指定的写出目录不存在,则创建目录。
第7步,若创建目录或写文件失败,则报告异常。
后置条件
无
备注
无
2.2.5数据匹配
用例名称
数据匹配
功能简述
程序读取用户登入/登出记录列表,按照登入/登出的对应关系匹配成完整的用户登录记录,并将本次未匹配的登入记录写到指定文件。
前置条件
已经获得用户登入/登出记录列表
基本流
1.访问用户登入/登出记录列表,按照登入/登出的对应关系匹配登录记录。
2.将未匹配的登入记录写到文件中。
分支与异常
后置条件
无
备注
无
2.2.6匹配登录记录
用例名称
匹配登录记录
功能简述
将用户登入/登出记录按照对应关系匹配成用户登录记录,以便计算用户登录时长。
前置条件
已经获得用户登入/登出记录列表
基本流
1.定义两个列表分别用来保存登入记录和登出记录。
2.循环访问用户登入/登出记录列表,将登入记录和登出记录分检出来,分别存入登入记录列表和登出记录列表。
3.循环访问登出记录列表,每找到一条登出记录后循环访问登入记录列表,找到与之对应的登入记录,将两条对应的记录组合成用户登录记录,并将这两条记录从列表中删除。
4.循环直至所有的登出记录都处理完成。
分支与异常
后置条件
无
备注
无
2.2.7保存未匹配的登入记录
用例名称
保存未匹配的登入记录
功能简述
将匹配之后剩余的登入记录数据保存到文件中,以便下次匹配。
前置条件
匹配登录记录完成
基本流
1.将匹配完成后,登入记录列表中剩余的记录写到文件中保存。
分支与异常
第1步,若找不到指定文件,则创建。
第1步,若创建文件失败,则报告异常。
后置条件
无
备注
无
2.2.8数据发送
用例名称
数据发送
功能简述
采集系统客户端将匹配好的数据通过网络发送给服务器。
前置条件
用户登录记录已经匹配完成
基本流
1.建立到服务器的网络连接。
2.遍历匹配的用户登录记录集合,拿到一条匹配的用户登录数据记录。
3.将匹配的用户登录数据记录按照指定格式发送。
4.循环2-3步,直到所有匹配的登录记录处理完成。
5.关闭网络连接。
分支与异常
第1步,若网络连接失败,则报告异常。
第2步,若写数据失败,则报告异常。
后置条件
无
备注
无
2.2.9数据接收
用例名称
数据接收
功能简述
采集系统服务器接收从客户端传送过来的数据。
前置条件
服务器程序启动,客户端完成匹配,并已发送数据。
基本流
1.开启服务程序。
2.获得网络连接。
3.开启新的线程为客户服务。
4.获得输入流和输出流。
5.包装流对象。
6.循环从输入流中读取字符串,保存在本地列表中。
7.成功读取一行字符串后向服务器发送成功传送标志。
8.循环5-6步,直到所有字符串接收完成。
9.关闭流对象,关闭网络连接,终止线程。
分支与异常
第1步,若开启服务失败,则报告异常。
第2步,若获得网络连接失败,则报告异常。
第4步,若获得流对象失败,则报告异常。
第6步,若读取数据失败,则报告异常。
第7步,若写出数据失败,则报告异常。
后置条件
无
备注
无
第3章系统概要设计
3.1总体设计
3.1.1业务设计
这个是项目的大体流程图,还没涉及到具体的细节。
大体的流程如图所示,先读取数据即把数据从日志文件中读取出来,之后把放入内存集合中的数据进行匹配成需要的数据,把匹配好的集合发送到服务端。
说明:
1)业务流程中几个存储文件的命名规则:
1系统日志文件由外部传递给程序,程序需要判定是否存在然后才能采集。
2未匹配登入数据项集合的存储路径由外部传递给程序,文件名采用logins.dat。
2)日志登入/登出数据项读取规则
1系统日志文件中的数据项有很多,但并不是所有数据项都需要采集的只有满足如下条件的数据项才是需要采集的:
2登录名不能以点号(.)开头,以点号开头的一般是登录程序本身的日志数据项,不需要采集。
3登录类型必须是7(登入)或8(登出),登录类型具体说明见下面列表:
登录Type值
登录type值说明
C定义的宏
0
#defineEMPTY
1
#defineRUN_LVL
2
#defineBOOT_TIME
3
#defineOLD_TIME
4
#defineNEW_TIME
5
--初始化进程
#defineINIT_PROCESS
6
--登录进程
#defineLOGIN_PROCESS
7
--用户进程(登入)
#defineUSER_PROCESS
8
--终止进程(登出)
#defineDEAD_PROCESS
表2-1:
登录类型定义
3.1.2系统模块
物理上系统分为采集客户端(被采集机器)和采集服务器两部分,在采集客户端包含数据采集模块,数据匹配分析模块和数据发送模块;在采集服务器端包含数据接收模块,数据存储模块和数据显示模块,各模块的主要功能和职责如下:
1,数据采集模块:
该模块的主要功能职责是读取Unix机器上的用户登录日志文件的内容,将其转化为登录记录对象,将这些对象存储在STL集合中并传给数据匹配合分析模块来分析。
该模块的输入数据是Unix机器的日志文件/var/adm/wtmpx,输出数据是若干个登录记录对象(保存在集合中)。
2,数据匹配和分析模块:
该模块的主要功能职责是将数据采集模块采集到的用户登录记录数据按照登录/登出的关系匹配成一个完整的登录/登出记录,并计算出该用户本次登录的时长,然后将这些完整的登录/登出记录传送给数据发送模块。
该模块的输入数据是原始的登录记录对象,输出数据是匹配好的登录/登出记录对象。
3,数据发送模块:
该模块的主要功能职责是将匹配好的登录/登出记录用网络传送的发式发送到采集系统服务器。
4,数据接收模块:
该模块的主要功能职责是从网络中读取采集客户端发送来的登录/登出数据。
5,数据存储模块:
该模块得主要功能职责是将数据接收模块接收到的数据按照指定的格式写入数据库中,保存为用户登录记录明细表。
6,数据整合模块:
将数据库中保存的用户登录记录明细表的数据整理成日报表,根据日报表整合出月报表,根据月报表整合出年报表。
3.2接口设计
3.2.1外部接口
系统读取用户登录记录文件,获得用户登录信息。
系统读取上次未匹配的登入记录文件,获取未匹配的登入记录数据。
系统将匹配好的数据写入指定数据库表中。
系统整合出月报表和年报表。
3.2.2内部接口
数据读取模块与数据匹配模块间的接口:
输入:
解析好的用户登入/登出记录列表。
输出:
无
数据匹配模块与数据发送模块间的接口:
输入:
匹配好的用户登录记录列表。
输出:
无
数据发送模块与数据接收模块间的接口:
输入:
匹配好的用户登录记录数据项
输出:
接收成功与否的消息
数据接收模块与数据保存模块间的接口:
输入:
匹配好的用户登录记录列表
输出:
无
数据保存模块与数据库间接口:
输入:
匹配好的用户登录记录列表
输出:
无
数据整合模块与数据库间接口:
输入:
用户登录记录明细
输出:
用户登录记录日报表,月报表和年报表
3.2.3数据结构设计
根据系统需求,设计出如下数据实体:
1,LogRec:
登入/登出记录类,用来表示一条原始的用户登入/登出记录。
2,MatchedLogRec:
匹配的登录记录类,用来表示一条匹配的用户登录记录。
以下分别对这两个实体类的设计作出说明:
登入/登出记录数据类
LogRec类图:
LogRec类成员变量说明:
成员变量定义
成员变量说明
备注
charlogname[32]
用户登录名
intpid
用户登录的进程ID
shorttype
登录记录类型
7=登入;8=登出
intlogtime
用户登入/登出时刻(秒)
原日志中数据单位是秒
charlogip[257]
用户登录IP
第4章系统详细设计
4.1系统架构综述
系统由以下几个功能模块组成:
数据读取模块,数据匹配模块,数据发送模块,数据接收模块,数据保存模块和数据整合模块,每个模块的核心功能如下:
数据读取模块:
负责从用户登录记录文件和未匹配登录记录文件中读取用户的登录记录数据,将其转化为LogRec对象,然后传递给数据匹配模块匹配。
数据匹配模块:
负责将用户登录记录数据,按照登入/登出的关系匹配起来,形成匹配的用户登录记录数据(MatchedLogRec对象),并计算出每次登录的时间长度。
数据发送模块:
将匹配好的用户登录记录通过网络发送到采集系统服务器。
数据接收模块:
服务器端接收匹配好的用户登录记录数据。
数据保存模块:
将接受到的用户登录记录数据保存到数据库的用户登录记录明细表中。
数据整合模块:
将用户登录记录明细表中的数据整合成日报表,月报表和年报表。
4.2静态结构设计
4.2.1数据实体类
根据需求分析,我们设计出以下数据实体类:
LogRec:
登入/登出记录类,用来表示一条原始的用户登入/登出记录。
MatchedLogRec:
匹配的登录记录类,用来表示一条匹配的用户登录记录。
以下分别对这两个实体类的设计作出说明:
4.2.2登入/登出记录数据类
登入/登出记录类(LogRec)类图:
4.2.3登入/登出记录类(LogRec)成员变量说明
成员变量定义
成员变量说明
备注
charlogname[32]
用户登录名
intpid
用户登录的进程ID
shorttype
登录记录类型
7=登入;8=登出
intlogtime
用户登入/登出时刻(秒)
原日志中数据单位是秒
charlogip[257]
用户登录IP
4.3总体类图
【客户端类图】
【服务端类图】
4.3.1Client类
Client类