《2022年电信DMS项目数据采集与整合分析设计 .pdf》由会员分享,可在线阅读,更多相关《2022年电信DMS项目数据采集与整合分析设计 .pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、电信营运设计后台:数据采集与整合文档编号:Version 1.0 2008 年 05 月达内 IT 培训集团名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 31 页 -修改记录摘要日期修改原因版本2008-05-28 新建10 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 31 页 -一、数据采集一、UI 设计(无)二、数据采集类图设计(一)数据采集客户端1)类结构概要说明-类图2)类功能结构说明-时序图名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 31 页 -:CollectionLauchor:CollectionThread:DataColl
2、ector:LogDealer:LogRecord:MatchedRecord1:start()2:collect()16:deal(Vector)6:new11:new3:getNativeIP()4:initlog()5:mappingLogBuffer(String)8:parseLogBuffer(MappedByteBuffer,Vector,Vector)7:activate(String)10:passivate(Vector,String)9:match(Vector,Vector)12:new13:init()15:14:initSocket()17:send()3)配置文件
3、说明:为了保证系统得灵活性,在该系统中把服务器和本机有关的参数都通过属性文件配置,由程序动态读取。文件名确定为unix_server.properties 属性 key 属性 value 例子备注说明interval interval=60 采集的间隔时间,以分钟为单位ipip=192.168.0.20 采集点的 IP 地址。sourcefile sourcefile=f:usradmwtmpx 采集的源的文件名,包含目录destinationpath destinationpath=f:usrhistory 采集源的备份目录,目录后面必须加目录分隔符号。command command=cmd
4、/C move 数据源被采集的时候,先移动到备份目录,这个属性设置数据源文件移动的 shell 指令或 dos 指令。historyfile historyfile=history.dat 由于在采集的时候有的用户正在登录中,还没有登出,所以无法处理这种数据,这就是不能匹配成对的数名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 31 页 -据。这些数据必须保存起来,在下次采集的时候用来匹配,这个属性就是设置没有匹配成功的数据的保存文件名。该属性只指定文件名,目录采用上面指定的备份目录。serverip serverip=127.0.0.1 接收服务器IP serverport 接
5、收服务器端口。storefile storefile=store.dat 数据发送失败的临时存储文件。目录采用使用上面的指定的备份目录。4)类详细说明1.类 CollectionLaunchor采集主程序类,发动采集线程。a)Main 函数函数说明创建 CollectionThread 线程对象,并调用run 函数启动线程。参数args:环境变量参数返回类型void 函数流程说明创建线程 CollectionThread th=new CollectionThread启动线程th.start();b)注意:该启动器可以由用户发起为一个后台服务,也可以由Unix 的定时服务发起,我们采用使用Un
6、ix 发起的方式。用户后台服务发起的方式只需要把线程的运行方式改变成循环就是。2.类 CollectionThread采集线程,负责启动采集过程。封装一个采集线程。该类主要调用采集器类DataCollector进行数据采集。该类继承JDK 的Thread 类名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 31 页 -a)函数 run:函数说明就是主要创建DataCollector 对象,并调用其 collection 函数进行数据采集。该函数是 Thread 的 run 函数覆盖函数.参数void 返回类型void 流程说明产生 DataCollector对象调用数据采集函数co
7、llect释放资源线程关闭 returnb)函数 start():函数说明负责启动线程,该函数来自Thread 线程类,该函数继承自JDK 标准类Thread。参数void 返回类型void.c)注意:该线程是否循环决定采集器启动的方式是否利用Unix 的定时启动功能,如果采用Unix 的定时功能,则该线程采集完毕自动关闭清空。3.类 DataCollector 负责采集环境的处理与数据采集,分析处理。所有的采集任务有该类完成,主要获取本机IP,复制备份并清空日志文件,读名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 31 页 -取日志文件,解析日志文件,匹配处理日志登录/登出记
8、录获取用户登录时间,在线用户下次匹配。a)函数 getNativeIP 函数说明读取要采集服务器的IP,该 IP 用属性文件配置。参数void 返回类型String 返回属性文件中配置的本机的IP 地址数据b)函数initlog()函数说明负责调用Runtime 执行 mv shell 指令进行日志文件的备份并清空原始文件。备份的文件名wtmpx+年(4 位)+月(2 位)+日(2 位)+时(2 位),比如 wtmpx2008053013.参数void 返回类型String 返回的是采集数据源的备份文件(包含路径)注意:利用 Unix 系统的 Kenerl 函数读取的时候,该文件必须采用x 结
9、尾,在这里用java处理就不需要。调用move /var/adm/wtmpx /.指令清空登录历史纪录c)函数 mappingLogBuffer 函数说明函数原型:public MappedByteBuffer mappingLogBuffer(String fileName)主要把备份的日志文件映射为本地内存缓冲,便于后面解析。参数String filename 备份日志文件名返回类型MappedByteBuffer 本地文件映射缓冲MappedByteBuffer 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 31 页 -创建/var/adm/wtmpx 日志文件的File
10、InputStream 流得到FileChannel通过 FileChannel 得到日志文件的内存映射 MappedByteBuffer已知要采集的日志文件名 filenamed)函数 parseLogBuffer,函数说明函数原型:private void parseLogBuffer(MappedByteBuffer logbuffer,Vector logins,Vector logouts)负责解析缓冲的内存结构,利用参数返回两个Vector 结构对象,一个存放登录数据,一个存放登出数据。参数MappedByteBuffer logbuffer 要解析的本地内存缓冲。Vector l
11、ogins 返回解析后的登录数据。Vector logouts 返回解析后的登出数据返回类型void 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 31 页 -已知日志数据内存映射MappedByteBuffer对象logbuffer,login 与logout 两个Vector 存放解析结构的结构按照wtmpx文件的二进制格式解析日志数据把解析好的数据形成LogRecord 对象把登录数据放入Vector 类型的 login结构,把登出数据放入 Vector 类型的 logout 结构判定日志数据结束返回 logout,login 两个Vector 类型的结构文件没有结束文件
12、结束【参考】数据登录登出的判别标准。#define EMPTY 0#define RUN_LVL 1#define BOOT_TIME 2#define OLD_TIME 3#define NEW_TIME 4#define INIT_PROCESS 5#define LOGIN_PROCESS 6-登录进程#define USER_PROCESS 7-用户进程#define DEAD_PROCESS 8-终止进程【参考】WTMPX 文件的结构。位置范围字节长度含义000-03132/*user login name*/032-0354/*inittab id*/036-06732/*devi
13、ce name(console,lnxx)*/名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 31 页 -068-0714/*process id*/072-0732/*type of entry*/074-0752/*process termination*/076-0772/*exit status*/2/*这是 C 数据类型补齐产生的空位*/080-0834/*time entry was made*/*seconds*/084-0874/*and microseconds*/088-0914/*session ID,used for windowing*/092-1112
14、0/*reserved for future use*/112-1132/*significant length of ut_host*/114-371257/*remote host name*/e)函数 activate 函数说明函数原型:private Vector activate(String loginFilename)throws InitException 负责把上次未匹配的数据读取为Vector 结构。便于后面匹配。参数是存放上次未匹配的登录日志记录,返回Vector 结构,其中元素类型LogRecord。参数String loginFilename:保存上次未匹配的数据的文
15、件名。该文件在属性配置文件中设置。返回类型Vector 上次未匹配的所有登录数据。流程图:已知要读取的数据文件名 filename读取数据到Vector 结构文件存在判定存在不存在名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 31 页 -f)函数 match,函数说明函数原型:private Vector match(Vector logins,Vector logouts)throws MatchedException 负责匹配登录/登出数据,并返回用户登录时间数据。参数是两个Vector类型的登录/登出数据结构,元素类型是LogRecord,返回的是匹配好的用户登录时长记
16、录,数据类型是Vector,其中元素类型是MatchedRecord,详细说明请参考 MatchedRecord 类的说明。参数Vector logins 登录数据Vector logouts 登出数据返回类型Vector 匹配生成的用户登录时长数据流程已知 login,logout 两个Vector 类型的数据结构循环 logout 结构按顺序得到 logout 中LogRecord 类型的登出对象在login 中查找最近的匹配用户与IP计算登录时间产生 MatchedRecord对象,并放入 Vector 类型的结构名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 31 页
17、-g)函数 passivate,函数说明函数原型:private void passivate(Vector logins,String loginFilename)throws InitException 负责把这次没有匹配好的登录记录保存成文件,以便下次采集的时候匹配。参数是没有匹配好的登录记录,类型是Vector,其中元素类型是LogRecord.参数Vector logins 没有匹配成功的登录数据String loginFilename 保存没有成功的登录数据的文件名,在属性配置文件中设置。返回类型void 流程图:已知需要保存的Vector 类型login 结构和文件名filena
18、me打开文件保存结构,并关闭文件h)函数 collect,函数说明函数原型:public void collect()throws CollectionException 负责整个采集过程。这是该类中的唯一的一个public 函数,主要供采集线程调用。参数void。返回类型void 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 31 页 -获取本地 IP getNativeIP初始化日志文件 initlog日志文件内存映射mappingLogBuffer登出数据匹配 match读取上次未匹配的数据 activate注入 LogDealer 类型的 logdealer 对象调用
19、 logdealer 的deal函数进行数据处理保存未匹配数据passivate解析日志parseLogBuffer4.LogRecord 类,负责登录/登出数据封装。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 31 页 -成员属性名成员属性说明user 用户登录名visittime 用户登录/登出时间userip 用户 IP labip 实验室服务器IP 5.MatchedRecord 类,负责匹配好的数据的封装。成员属性名成员属性说明user 用户登录名logintime 用户登录时间logouttime 用户登出时间labip 实验室服务器IP userip 用户的
20、IP duration 用户登录的时长数据6.CollectionListener 接口,规范采集好的数据的处理方式。a)抽象函数 deal,函数说明函数原型:void deal(Vector matches);负责匹配好数据的处理,返回void,参数是Vector 类型,元素类型是MatchedRecord,是匹配好的所有登录时长数据。参数Vector matches 已经匹配好的生成用户登录时长数据。名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 31 页 -返回类型void 7.LogDealer 类,负责匹配好数据的发送处理,如果发送失败,则数据被保存。该类主要实现Co
21、llectionListener 接口。a)函数 init 函数说明函数原型:private void init()throws InitException 主要初始化服务器参数,服务器参数使用属性文件配置,主要包含。IP,port,destinationpath,storefile。参数void 返回类型void 流程图:已知服务器连接参数属性文件加载属性文件获取 ip与port名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 31 页 -b)函数 initSocket 函数说明函数原型:public void initSocket()throws LinkException
22、主要初始化网络连接。如果初始化失败,则产生异常。参数void 返回类型void c)函数 send 函数说明函数原型:public void send(ObjectOutputStream oos,MatchedRecord data)throws SendException 主要负责数据发送。该函数调用前先读取历史发送失败数据合并。参数ObjectOutputStream oos:发送数据的网络流。MatchedRecord data:要发送的数据。包含上次发射失败未发射的数据。返回类型void d)函数 receive。函数说明函数原型:public int recieve(DataInp
23、utStream dis)throws RecieveException 接受服务器发送过来的标记。为避免数据发送失败产生数据丢失,服务器接受数据保存成功后发送一个成功标记,给客户采集点。该函数负责接受该标记。参数DataInputStream dis:网络接受流。返回类型int 服务器是否处理成功的标记,0:表示处理成功,否则是失败。e)函数 store。函数说明函数原型:public void store(String path,String file,V ector matches)throws IOException 当数据发送若干次失败后,客户采集点就会把数据存储到临时文件中,在下次
24、采集的时候在读取出来合并发送,该函数就是把发送失败的数据保存到临时文件。参数String path,临时保存文件的路径。String file,临时保存文件名。Vector matches,发送失败后剩余的要保存的数据。返回类型void f)函数 load。函数说明函数原型:public Vector load(String path,String file)throws IOException 发送失败的数据被临时保存起来,便于下次发送。该函数就是加载上次未发送成功的数据。参数String path:临时保存文件的路径。String file:临时保存文件名。返回类型Vector:读取的上次
25、未保存成功的数据。名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 31 页 -g)函数 deal 函数说明函数原型:public void deal(Vector matches)该函数是公有的函数。封装整个发送过程。参数Vector matches 采集匹配成功的用户登录时长数据。返回类型void 流程图:打开服务器连接发送数据关闭连接打开连接判定保存数据失败读取历史发送失败数据并合并现在数据成功发送判定成功保存未发送成功的数据失败名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 31 页 -(二)数据采集服务器端1)数据库等环境参数设计属性 key 属性 va
26、lue 例子备注说明port port=9999 采集的服务器端口driver driver=com.mysql.jdbc.Driver 数据库驱动程序类名url url=jdbc:mysql:/127.0.0.1:3306/netctoss?characterEncoding=gb2312 数据库连接URL。user user=root 数据库连接用户名password password=louisyyy 数据库连接口令2)数据实体类(原则上对应数据结构的实体表)1.类 Detail,该类的设计在后面还要使用。但在本模块中使用的字段如下:成员属性名成员属性说明user 用户登录名logint
27、ime 用户登录时间logouttime 用户登出时间labip 实验室服务器IP userip 用户的 IP duration 用户登录的时长数据Detail 类对应数据库中对应的t_detail_x31 张表。3)类结构概要说明-类图名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 31 页 -4)类功能结构说明-时序图:ServerLauncher:DataRecieverTh:CollectionTh:DBEnvInit:DetailDAO:Detail1:start()4:start()2:initDAO()3:initSocket()5:getDBParamter()
28、6:7:getConnection(Properties)8:12:insert(Detail)10:new9:recieve()11:名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 31 页 -5)详细说明1.ServerLauncher类:服务器数据接受器启动器,主要负责启动服务器接受线程。a)函数 main 函数说明主要创建 DataRecieverTh 对象,并调用起其start 函数启动线程。参数args:环境变量参数返回类型void 2.DataRecieverTh 类,服务器接受主线程。是一个线程类,继承JDK 的标准线程类Thread。主要负责接受客户连接,并为
29、每个客户启动一个数据接收线程来进行客户数据接收。a)成员说明:成员属性名成员属性说明collectionth 定义的一个Vector 的数据结构,便于管理每个客户采集点。serversocket 服务器 Socket 对象。b)函数 initSocket,函数说明函数原型:private void initSocket()负责网络服务器的初始化。参数void 返回类型void c)函数 run:函数说明函数原型:public void run()覆盖 Thread 中的函数,负责接收客户连接,并建立客户处理线程并启动线程,并在collectionth 中记录该客户线程处理对象。参数void 返
30、回类型void 3.CollectionTh 类,每个客户数据接收处理类。该类主要接收采集器发送过来名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 31 页 -的数据,接收成功后发送一个成功标志,然后保存接收的数据。该类继承Thread。a)成员属性说明成员属性名成员属性说明socket 每个客户 Socket 的代理 socket。inputstream 客户 socket 输入网络流。outputstream 客户 socket 输出网络流。dao 专门负责把接受的数据写入到数据库。b)函数 run:接收线程过程,主要调用 receive 私有函数。c)函数 receive
31、:函数说明函数原型:public Detail recieve()throws RecieveException 通过 inputstream 读取数据,并发送成功标记,然后调用全局的dao 保存数据。参数void 返回类型Detail 接受到的客户采集的一个数据。为保证数据的稳定性,没有采用一次发送所有的数据的相当龊的发送方式。d)sendFlag 函数:函数说明函数原型:public void sendFlag(int flag)throws IOException 向客户端发送一个整数类型的标记。参数int 表示数据是否接受并成功处理的标记。0 表示成功。-1 表示失败。返回类型void
32、 4.DBEnvInit 类,数据库环境初始化类,该类封装了两个函数工具,完成对数据库的连接。名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 31 页 -a)函数 getDBParamter,函数说明函数原型:public static Properties getDBParamter()负责从属性文件读取数据库连接参数。参数void 返回类型Properties:用字符串Hash 表的方式返回数据连接参数,包含:驱动类,连接URL,连接帐号,连接口令。b)函数 getConnection。函数说明函数原型:public static Connection getConnect
33、ion(Properties prop)负责根据连接属性打开与数据库的连接参数Properties prop;数据库连接参数返回类型Connection:返回一个对数据库的连接。注意:该工具可以提供对数据源的支持,在后继版本中提供数据源与Hibernate 的支持描述。5.DetailDAO 类,提供对 Detail 数据库的插入等操作访问。a)函数 insert 负责把接收到的数据插入到数据库。函数说明函数原型:public void insert(Detail detail)负责把一个用户登录数据写入到数据库。参数Detail detail:一条用户登录数据。返回类型void 函数说明函数
34、原型:public void insert(List list)负责把多个用户登录数据写入到数据库。参数List list:多个用户登录数据。名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 31 页 -返回类型void 6.BasicDAO 泛型类a)封装对数据库访问最常用的规范。在后面的DAO 类,缺省必须实现该接口。注意:该设计中缺少一个日志类,请自行设计,或采用apache中 log4j.jar 三、数据表结构设计(一)原始采集用户登录时长明细表(details_x)其中 x 是 1-31 字段英文名字段汉字名类型约束条件说明loginname 登录名Varchar(20
35、)loginip 登录 IP Varchar(24)logintime 登录时间Timestamp logouttime 登出时间Timestamp labip 实验室 IP Varchar(24)duration 登录时长long 名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 31 页 -二、数据整合一、UI 设计二、数据采集类图设计1.类结构概要说明1)数据配置环境参数设计属性 key 属性 value 例子备注说明driver driver=com.mysql.jdbc.Driver 数据库驱动程序类名url url=jdbc:mysql:/127.0.0.1:3306
36、/netctoss?characterEncoding=gb2312 数据库连接URL。user user=root 数据库连接用户名password password=louisyyy 数据库连接口令dayrule dayrule=4 每日整合时间规则。monthrule_day monthrule_day=16 每月整合时间规则-天monthrule_hour monthrule_hour=4 每月整合时间规则-时interval interval=1 时整合规则-整合的单位间隔时间2)数据实体类结构(原则上对应数据库表)3)数据整合类名师资料总结-精品资料欢迎下载-名师精心整理-第 24
37、 页,共 31 页 -2.类功能结构说明名师资料总结-精品资料欢迎下载-名师精心整理-第 25 页,共 31 页 -:ServerLauncher:DataIntegratorTh:IntegrationFactory:IntegrationByClient:DBEnvInit:ConnectionPool:BasicIntegrateDAO1:start()2:getIntegrationClientDAO()9:3:new8:10:integrate()4:getConnection(Properties)5:getConnection()6:7:11:integratByHour(int
38、,int,int,int)12:13:integratByDay(int,int,int)14:15:integratByMonth(int,int)16:17:integratByDayIP(int,int,int)18:19:integratByHourIP(int,int,int,int)20:21:integratByMonthIP(int,int)22:3.类详细说明1)ServerLauncher 类:整合启动程序类。1.函数 main 函数说明创建 DataIntegratorTh 线程对象,并调用run 函数启动线程。参数args:环境变量参数返回类型void 2)DataIn
39、tegratorTh 类:整合线程,主要完成整合的调用。1.函数 run 函数说明函数原型:public void run()负责根据整合规则,并调用相应的整合函数对数据进行整合。参数void 名师资料总结-精品资料欢迎下载-名师精心整理-第 26 页,共 31 页 -返回类型void 3)Integration 接口:整合接口规范1.函数 init 函数说明函数原型:public void init()throws IntegrateInitException;对整合的规则配置参数进行初始化参数void 返回类型void 2.函数 integrate 函数说明函数原型:public void
40、 integrate(int type)throws IntegrationException;负责根据整合规则,并调用相应的整合函数对数据进行整合。参数int type 指按时,天,月三种类型整合。返回类型void 3.函数 release 函数说明函数原型:public void release();负责释放整合过程中产生的临时数据。参数void 返回类型void 4)IntegrationByCall类:整合的存储过程调用实现,实现Integration 接口。目前版本中没有实现。5)IntegrationByClient:整合的 Java 调用实现。是目前版本的实现手段。名师资料总结-
41、精品资料欢迎下载-名师精心整理-第 27 页,共 31 页 -6)IntegrationFactory 类:利用工厂模式产生的一个类,负责产生整合对象。1.函数 getIntegrationCallDAO该函数目前不实现。2.函数 getIntegrationClientDAO:函数说明函数原型:public static Integration getIntegrationClientDAO()读取配置参数,产生IntegrationByClient对象,并初始化,并返回给该函数的调用者。该函数的设计请参考Java 模式设计中构建模式之工厂模式。该模式的好处可以屏蔽具体实现类。参数void
42、返回类型Integration,就是整合对象。与具体的实现类无关。7)DBEnvInit 类:见数据采集存储中的说明。8)ConnectionPool 类:该类的设计是故意设计的,主要想认识一下连接池的设计原理,与实现方法。1.函数 getConnection 函数说明函数原型:public Connection getConnection()throws DBException 从连接池中获取一个连接,在目前版本中,池的大小固定为1。在实际实现过程中采用1 的池。参数void 名师资料总结-精品资料欢迎下载-名师精心整理-第 28 页,共 31 页 -返回类型Connection,就是连接对
43、象。2.函数 open 函数说明函数原型:private void open()throws DBException 负责调用 DBEnvInit 中的函数来打开连接,并形成池。参数void 返回类型void 3.函数 close 函数说明函数原型:public void close()负责关闭池中的某个连接,由于目前版本设计一个连接,关闭就直接关闭所有连接,没有设计参数。参数void 返回类型void 9)BasicIntegrateDAO负责所有整合的实现,该类中应该实现一个数据库连接注入:1.函数:integratByHour 函数说明函数原型:void integratByHour(i
44、nt year,int month,int day,int hour)throws IntegrationException;负责按用户进行时整合。参数int year,数据整合的年int month,数据整合的月int day,数据整合的天int hour,数据整合的时返回类型void 2.函数:integratByDay 函数说明函数原型:void integratByDay(int year,int month,int day)throws IntegrationException;负责按用户进行天整合。参数int year,数据整合的年名师资料总结-精品资料欢迎下载-名师精心整理-第
45、29 页,共 31 页 -int month,数据整合的月int day,数据整合的天返回类型void 3.函数:integratByMonth 函数说明函数原型:void integratByMonth(int year,int month)throws IntegrationException;负责按用户进行月整合。参数int year,数据整合的年int month,数据整合的月返回类型void 4.函数:integratByHourIP 函数说明函数原型:void integratByHourIP(int year,int month,int day,int hour)throws I
46、ntegrationException;负责按实验室服务器进行时整合。参数int year,数据整合的年int month,数据整合的月int day,数据整合的天int hour,数据整合的时返回类型void 5.函数:integratByDayIP 函数说明函数原型:void integratByDayIP(int year,int month,int day)throws IntegrationException;负责按实验室服务器进行天整合。参数int year,数据整合的年int month,数据整合的月int day,数据整合的天返回类型void 6.函数:integratByMo
47、nthIP 函数说明函数原型:void integratByMonthIP(int year,int month)throws IntegrationException;负责按实验室服务器进行月整合。参数int year,数据整合的年int month,数据整合的月返回类型void 注意:整合过程分两类:1 根据客户整合。2 根据实验室整合。由于整合过程就是数据库分组统计查询与数据插入操作,所以设计中其逻辑流名师资料总结-精品资料欢迎下载-名师精心整理-第 30 页,共 31 页 -程没有设计。三、数据表结构设计1.按用户统计整合的时记录表detaildays_x 其中 x 是 1-31 字段
48、英文名字段汉字名类型约束条件说明loginname 登录名Varchar(20)loginip 登录 IP Varchar(24)logouttime 登出时间Timestamp labip 实验室 IP Varchar(24)duration 登录时长long 2.按用户统计整合的天记录表detailmonths_x 是 1-12 字段英文名字段汉字名类型约束条件说明loginname 登录名Varchar(20)loginip 登录 IP Varchar(24)logouttime 整合时间Timestamp labip 实验室 IP Varchar(24)duration 登录时长lon
49、g 3.按用户统计整合的月记录表detailyears_x x 不定 x 表示年字段英文名字段汉字名类型约束条件说明loginname 登录名Varchar(20)Loginip 登录 IP Varchar(24)logouttime 整合时间Timestamp Labip 实验室 IP Varchar(24)Duration 登录时长long 4.按服务器整合的时记录表detaildays 字段英文名字段汉字名类型约束条件说明logouttime 整合时间Timestamp Labip 实验室 IP Varchar(24)Duration 登录时长long 5.按服务器整合的天记录表degtailmonths 字段英文名字段汉字名类型约束条件说明logouttime 整合时间Timestamp Labip 实验室 IP Varchar(24)Duration 登录时长Long 6.按服务器整合的月记录表detailyears 字段英文名字段汉字名类型约束条件说明logouttime 整合时间Timestamp Labip 实验室 IP Varchar(24)Duration 登录时长long 名师资料总结-精品资料欢迎下载-名师精心整理-第 31 页,共 31 页 -