删除或更新信息,请邮件至freekaoyan#163.com(#换成@)

分布式用户痕迹采集存储系统*

本站小编 Free考研考试/2021-12-25

随着互联网技术的快速发展与普及,网络信息井喷式增长,在此复杂分布式环境中,海量用户产生杂乱无序的信息,门户类的网站信息繁多,首页导航、菜单、用户浏览网站过程中加载图片、视频、语音等多种类型的文件,并产生中间数据。大型企事业单位,如金融机构、公安等政府机关单位的网站都是自主研发,拥有大量的用户数据,市场上的商业统计分析软件不能根据企业的个性化需求做用户行为的分析,且大多数都采用黑盒模式进行用户行为的采集和分析,这种方式低效并且采集数据不够精准,不能完整捕获用户痕迹。本文设计了白盒模式的用户痕迹采集存储系统,记录用户操作数据和操作序列。记录可以更清楚了解用户行为习惯,精确地反映用户特征。用户访问行为和网站数据类型多样且分布在不同的服务器上。在诸多应用系统中,电商服务系统采集用户的行为信息尤为重要。然而现在用户行为采集方法普遍存在采集的数据不够精确、缺乏完整性的问题,无法反映用户特征,数据量庞大,存取效率低下。挖掘用户信息和潜在的知识成为分析用户行为的一个目标。
1 相关工作 互联网用户交互行为方式多样,传统的采集方式根据数据源的不同,当前的网站用户交互行为数据主要有4种采集方式:Web服务器日志、JavaScript页面标签、包嗅探器和代理服务器日志[1-3]。Web服务器日志方式中,用户发送页面请求到Web服务器,当Web服务器收到请求时,会将访问记录添加到日志中,获得不同客户端,不同用户的记录,但多个用户共享一个IP的情况下,则无法区分用户身份,当用户请求的信息缓存在本地,请求不会到达服务器,获取数据不完整。包嗅探器方式中,用户请求到达Web服务器之前,它先通过包嗅探器,然后嗅探器将请求发送到Web服务器,此过程无法获取缓存。不同于Web日志记录,JavaScript页面标签是基于前端的采集方法,当用户发起http请求时,JavaScript标记返回包含在页面显示时执行的特殊JavaScript代码,从访问者Cookie(包含访问时间、浏览器信息、工具供应商给予当前访问者的用户id等)检索详细信息,它们通过不同的服务器请求来传递,这使Cookie速度慢而且效率不高。一般在需要上报的位置组织数据、调用应用程序接口(API),将数据传给后端,比如百度统计、Google Analytics[4],但这种收集策略只能满足流量分析、来源分析等基础的分析。表 1对主流的4种采集方式进行了优缺点的对比分析。
表 1 四种采集方式的优缺点分析 Table 1 Advantage and disadvantage analysis of four collection methods
采集方式 优点 缺点
Web服务器日志 基本字段获取容易
半结构化数据,处理方便
能分析搜索引擎的爬虫记录
能体现文件下载内容
无法获取缓存
无法获取业务行为记录
只识别IP,识别用户不准确
跨域访问检测难
数据获取不完整
JavaScript页面标签 采集内容可自定义
记录前端用户行为数据
能处理Cookie缓存,
采集行为数据准确
用户的JavaScript设置影响数据收集
增加网站的脚本的负荷
无法获取文件下载记录
数据获取不完整
包嗅探器 获取数据实时性高
跨域访问检测容易
成本高
无法获取缓存,代理记录
用户隐私没保障
数据获取不完整
代理服务器日志 支持SSL的编码
支持Cookie的管理
支持JavaScript
动态创建的链接不指向代理时,数据获取不完整
采集慢,效率低


表选项






表 1可知,当前捕获用户数据的方式存在各种缺陷,通用的采集方法无法满足不同业务系统,分析用户数据本质是针对行业问题的不同场景,根据数据分析给予解决问题的辅助支持。不能完全获取所有的用户行为和数据,详细记录用户和网站的交互情况,在分析用户行为的过程中数据不完整,降低了用户偏好预测的准确性,得不到准确的用户分析[5]。为了解决面向互联网的用户交互痕迹捕获、存储和检索的问题,用户在访问网站的过程中,无需受限数据来源于服务端、代理端、客户端及所有和服务器交互的事件都会记录下来,并识别用户在此过程中的操作序列和操作的输入输出数据,前后台事件及时间等都能捕获并记录下来。用户数据可分为结构化数据和非结构化数据两类,数据类型的多样性和存储的差异性增加了数据的检索难度,数据的合理存储可以提高文件的访问效率,在云存储架构的基础上,实现各种数据采集、录入以及检索和应用。应用程序可以根据需求精确提取用户信息,对用户的操作,事件进行监听,捕获用户行为和操作序列,并记录在此操作过程中的相关数据,写入存储服务器,完成用户行为数据的采集。
2 用户访问行为建模 前端传过来的访问数据中,通过界面和API事件可以识别操作,将界面和控件以及事件名称进行关联映射[6],将相关的数据记录添加到上述的数据中,对后期做用户数据分析时来做事件聚合,前端记录带上事件名称。用户访问Web服务器过程中产生的交互/交易数据以及用户操作,采用界面窗口树来建模。用户在前端发起请求,服务器响应请求,进行一次API的调用,记录用户操作序列,界面的跳转即界面窗口树的边,界面作为界面窗口树的结点,精准捕捉用户行为,支持系统跟踪用户的偏好和访问习惯。数据采集是用户行为分析的前提[7],采集数据的准确性、完整性对后续分析有着至关重要的作用。每个用户访问的轨迹即为界面窗口树路径的一个实例。
定义1??界面结点元素用来描述网站上的某个控件的信息,界面结点元素Widgets定义为六元组(id, name, Type, Value, isVisible, isEditable),其中:id表示界面结点元素的编号;name表示界面结点元素名称;Type表示界面结点元素类型,Type:=Input|Output|getApi;Value表示界面结点元素当前取值;isVisible表示界面结点元素可见性,isVisible:=True|False; isEditable表示界面结点元素可修改性,isEditable:=True|False。
例如:登录界面输入文本框控件表示为(id,用户名,文本输入框,值,可见,可修改),初始时,第4个元素取值可为空。
定义2??菜单用来描述界面中菜单的信息,菜单Menu定义为(id, menuName, API序列),其中:id表示菜单的编号;menuName表示菜单的名称;API序列表示菜单Menu包含的API(功能)。
定义3?? API定义为一个六元组(id, APIName, Parmin, Parmout, Function, Widget序列),其中:id表示API的编号;APIName表示API的名称;Parmin={parm1, parm2, …, parmm}, m≥0,表示操作的输入参数序列,null表示输入参数序列为空;Parmout={parm1, parm2, …, parmn}, n≥0,表示该操作的输出参数序列,null表示输出参数序列为空;Function表示API对应的函数体;Widgets序列表示API对应的一组控件。
定义4??基本界面用来描述基本界面信息,基本界面BaseInterface定义为四元组(id, name, Menu, Widgets序列),其中:id表示基本界面的编号;name表示当前基本界面的名称;Menu表示基本界面中菜单,其中,菜单表示当前基本界面所包含的菜单,Menu可以为空;Widgets序列表示基本界面包含的界面元素,为当前基本界面所包含的界面元素,通常至少为一个或多个。
定义5??界面结点用来描述某个界面的信息,由基本界面或基本界面的叠加组合而成,基本界面是界面,界面叠加基本界面也是界面。界面结点InterfaceNode定义为四元组(id, name, BaseInterface, (Parent, Childs)),其中:id表示界面结点的编号;name表示界面的名称;BaseInterface序列表示当前界面结点包含的所有基本界面,即界面可以分解为若干个基本界面的叠加;(Parent, Childs)表示界面结点的直接父结点和直接子结点; Childs={InterfaceNode1, InterfaceNode2…, InterfaceNodem}(m≥0),目录结点的直接子结点的集合,其中InterfaceNodei(1≤im)为界面结点,m=0时,Childs为空。
定义6??界面结点与基本界面关系vbRelation用来表示界面结点InterfaceNode和基本界面BaseInterface之间的二元关系,表示为:InterfaceNode→BaseInterface,如果InterfaceNode包含BaseInterface,则二元关系InterfaceNode→BaseInterface成立。
定义7??界面结点与界面结点关系vvRelation用来表示界面结点InterfaceNode1和界面结点InterfaceNode2之间的二元关系,表示为:InterfaceNode1InterfaceNode2,如果界面结点InterfaceNode1经过事件跳转到界面结点InterfaceNode2,则二元关系InterfaceNode1InterfaceNode2成立。vvRelation∷=(InterfaceNode1, InterfaceNode2, e) 界面事件e定义为用户触发的事件,e::=API调用API调用序列。API可以是一个原子操作,可以是一个组合操作,也可以是复杂的组合操作序列,API的输入与输出一般由一组常用控件组成的一个交互窗体或窗口区域展现给最终用户。
定义8??界面结点与界面结点元素关系vwRelation用来表示界面节点InterfaceNode和界面节点元素Widgets之间的二元关系,表示为:InterfaceNodeWidgets,如果界面节点包含界面节点元素,则二元关系InterfaceNodeWidgets成立。
定义9??基本界面与菜单的关系bmRelation用来表示基本界面BaseInterface和菜单Menu之间的二元关系,表示为:BaseInterfaceMenu。如果BaseInterface包含Menu,则二元关系BaseInterfaceMenu成立。
定义10??基本界面与界面结点元素的关系bwRelation用来表示基本界面BaseInterface和界面结点元素Widgets之间的二元关系,表示为:BaseInterfaceWidgets,如果BaseInterface包含Widgets,则二元关系BaseInterfaceWidgets成立。
定义11??菜单与API的关系maRelation用来表示菜单Menu和API之间的二元关系,表示为Menu→API,如果Menu包含一个API,则二元关系Menu→API成立。
定义12?? API与界面节点元素的关系awRelation用来表示API和界面节点元素Widgets之间的二元关系,表示为APIWidgets,如果某个API映射一组Widgets,则二元关系APIWidgets成立。
定义13?? (界面窗口树Tree)以界面结点InterfaceNode为根结点的界面窗口Tree(InterfaceNode)定义为:如果InterfaceNode.Childs=?,则Tree(InterfaceNode)=InterfaceNode。
1) 如果InterfaceNode.Childs={InterfaceNode1, InterfaceNode2, …, InterfaceNodem}, m≥1,则Tr-ee(InterfaceNode)是以InterfaceNode为根结点和m棵树Tree(InterfaceNode1), Tree(InterfaceNode2), …, Tree(InterfaceNodem)按从左到右顺序构成的树,称Tree(InterfaceNode1), Tree(InterfaceNode2), …, Tree(InterfaceNodem)为Tree(InterfaceNode)的m棵子树。
2) 用Tree(InterfaceNode).id表示界面窗口树的编号,则Tree(InterfaceNode).id=InterfaceNode.id。
说明:Tree(InterfaceNode)在根结点InterfaceNode下从左到右的第1棵树是Tree(InterfaceNode1),第m棵树是Tree(InterfaceNodem)。图 1表示了界面结点元素、菜单、API、基本界面和结点之间的关系。
图 1 节点关系图例 Fig. 1 Sample of node relationship
图选项




算法1??控件触发。
用户每一个操作都有输入输出,对应着一组控件,用户的输入即为控件的输入值,作为API操作的输入参数。
function WidgCall(Widgets, InputValue)
Widgets.Value=InputValue return Widgets.Value end function
算法2?? API分解。
用户每一个操作的完成,都对应着一组控件序列,即该控件序列对应当前操作的API,每一个操作事件的输入参数值即为对应着的一组控件序列的输入值。
function APIDecom(API, InputValue)
API.Parmin=?
for i=1 to m do if isawRelation(Widgetsi, API)=True then
/*查表*/
WidgCall(Widgetsi, InputValuei)
API.Parmin=API.Parmin+Widgetsi.Value
end if
end for
return False
end function
算法3?? API触发算法。
用户和系统进行交互,用户在前端界面进行事件的触发,触发事件API,服务器接收到操作输入信息,响应前端,返回当前的系统时间,事件的触发时间用时间戳记录,并代入用户信息,作为用户痕迹记录。
function APICall(userId, API, InputValue)
APIDecom(API, InputValue)
API.Parmout=API.function(API.Parmin)
time Stamp=system Time
return API.Parmout, timeStamp
end function
算法4 ??窗口节点分解。
界面窗口树模型由界面节点及其之间的跳转关系组成。用户每一次操作都将触发API,并产生交互数据,数据和操作写入分布式存储检索系统中,记录用户痕迹。用户访问的界面和跳转可以通过用户痕迹检索,统计界面的访问频次和跳转。调用API即操作事件,该API属于某一菜单,这一菜单属于某一基本界面,通过遍历界面窗口树,确定窗口树中某一界面结点,并将该界面结点分解为若干基本界面,找到菜单属于的基本界面。系统监控事件API的触发,然后把API的输入和输出写入分布式存储检索系统,并返回触发的API的名称。一次交互/交易中,第1个API的名称在用户交互/交易检索时,作为起始API。
用户和系统进行交互,用户在前端界面进行事件的触发,触发事件API,服务器接收到操作输入信息,响应前端,返回当前的系统时间,事件的触发时间用时间戳记录,并代入用户信息,作为用户痕迹记录。
functionTreeNodeDecom(userId, API, Menu, timeStamp, InterfaceNode)
/*查表,找到菜单属于的基本界面,确定基本界面对应的某一界面结点*/
If isbmRelation(Menu, BaseInterface) & &
isvbRelation(BaseInterface, InterfaceNode=True then
/*触发API*/
APICall(userId, API, InputValue)
/*API的输入输出写入分布式存储检索系统*/
TreeInsert(userId, uploadTime, (fileName, FileType, Content)
/*返回触发的API的名称*/
return API.Name
end if
else return False
end function
算法5??窗口树路径生成。
以userId为根节点的用户行为树由m棵子树构成,窗口树路径即一次交互/交易行为的路径生成过程可以用递归过程实现。子树由界面节点构成,用户触发第1个API作为用户行为的起始操作,生成userId根节点,如果界面节点与给定的界面节点之间满足API触发的跳转关系,将该界面节点作为userId的子节点,并返回触发的第1个API的名称。在记录后面的每个界面节点时,先计算与上一个界面节点时间戳的时间间隔,若大于定义的最大时间间隔,则重新以userId为根节点生成一条新的有效访问路径,即直接将界面节点作为userId的子节点,若完成则生成一条用户交互/交易行为的窗口树路径,不断重复生成新的用户。
InterfaceNode==userId,userId作为特殊的节点,假设树Tree(userId)={Tree(InterfaceNode1), Tree(InterfaceNode2), …, Tree(InterfaceNodem)}, m≥1,若userId.Childs=?,则Tree(userId)=userId; 若userId.Childs={InterfaceNode1, InterfaceNode2, …, InterfaceNodem},则路径生成函数TreePath递归定义如下:
functionTreePath(userId, API, Menu, timeStamp, Tree)
TreeNodeDecom(userId,API,Menu,timeStamp,InterfaceNode1)
If i=1 then firstAPI=API.Name userId.Childs={InterfaceNode1}
end if
for i=1 to m do
/*比较时间戳,计算访问间隔*/
if InterfaceNodei.timestamp-
InterfaceNodei.parent.timestamp≥T_max then
/*以userId为根节点,生成用户访问路径*/
userId.Childs={InterfaceNodei}
end if
TreePath(userId, API, Menu, timeStamp,
Tree(InterfaceNodei))
end for
else return False
return firstAPI
end function
算法6 ??当前结点分解。
API对应着菜单,遍历界面结点,找到某一界面结点,确定它包含的某一基本界面,上述菜单属于该基本界面,则返回该界面结点,基本界面和菜单。这样,就可以确定API和菜单,基本界面,界面结点之间的对应。
functionNodeDecom(userId, API, Menu, InterfaceNode)
if isbmRelation(Menu, BaseInterface)&&
isvbRelation(BaseInterface, InterfaceNode)=True then
return InterfaceNode, BaseInterface, Menu
end if
return False
end function
算法7 ??当前结点检索。
检索用户交互/交易痕迹,输入用户信息和时间戳,通过已知的API事件操作,界面结点,可以在界面窗口树中检索到用户操作的界面节点,以及从分布式存储检索系统中检索到操作过程中产生的数据。
functionNodeQuery(userId, timeStamp, API, InterfaceNode)
uploadTime=timeStamp
/*当前结点分解, 确定API和菜单,基本界面,界面结点之间的对应*/
NodeDecom(userId, API, Menu, InterfaceNode)
ForestQuery(userId, uploadTime, distributeTrees)
end function
算法8??用户行为树检索。
在界面窗口树中检索用户交互/交易痕迹,通过检索起始API事件,检索对应的界面结点,再遍历此界面结点的子节点,找到满足此API调用跳转的界面结点,并对其进行以userId作为根结点的子树的递归检索。检索到在此API事件操作过程中相关的界面和数据。
设树Tree(InterfaceNode)={Tree(InterfaceNode1), Tree(InterfaceNode2), …, Tree(InterfaceNodem)}, m≥0,
若InterfaceNode.Childs=?,即m=0,则Tree(InterfaceNode)=InterfaceNode;
若InterfaceNode.Childs={InterfaceNode1, InterfaceNode2, …, InterfaceNodem},则
function TreeQuery(userId, timeStamp, Tree,
InterfaceNode)
/*获得历史行为中的第一个API*/
API=APIQuery(firstAPI)
NodeQuery(userId, timeStamp, InterfaceNode)
for i=1 to m do
/*查表*/
If vvRelation(InterfaceNode, InterfaceNodei,
APICall(userId, API, timeStamp)=True then
TreeQuery(userId, Tree, InterfaceNodei)
end if; end for
return Null
end function
设树Tree(userId)={ Tree(InterfaceNode1), Tree(InterfaceNode2), …, Tree(InterfaceNodem)},
m≥0,若userId.Childs=?,即m=0,则Tree(user-Id)=userId;
若userId.Childs={InterfaceNode1,
InterfaceNode2, …, InterfaceNodem},则
functionTreeQuery(userId, timeStamp, Tree,
InterfaceNode)
/*获得历史行为的第一个API */
API=APIQuery(firstAPI)
NodeQuery(userId, timeStamp, InterfaceNode);
for i=1 to m do
/*查表,满足跳转关系*/
If vvRelation(userId, InterfaceNodei,
APICall(userId, API, timeStamp))=True then Tree-Query(userId, InterfaceNodei)
end if; end for
return Null
end function
3 数据存储检索 传统的关系型数据库在存储数据时,采用的是行列二维结构来表示数据,每一行数据都具有相同的列字段,而这样的存储方式显示不适合上面的数据格式[8-9]。云存储中用户行为数据、日志数据都属于半结构化数据,所谓半结构化数据,就是结构变化的结构化数据,适合使用非关系型来做数据存储。一个实时的分布式搜索引擎和分析引擎,具有很强的数据搜索和聚合分析能力。通过识别数据类型,把存储系统建模为存储目录树,根据不同的数据类型存储到分布式云存储系统的不同位置中,数据分为结构化数据类型和非结构化数据类型[10-14]。分布式存储检索系统环境中文件系统模型由多棵存储目录树构成[15],每棵存储目录树包括:目录结点、服务器结点、叶子结点等。用户界面数据建模为界面窗口树,按照树的存储和界面结点之间的联系,存储在分布式数据库中,结构化的数据存储在数据库文件中,在存储目录树中找到存储位置的文件结点,即数据库文件所在的叶子结点,非结构化文件节点用来描述非结构化文件,按照动态目录树的规则存放在对应的位置,服务器日志存储在log日志文件中。结构化文件节点用来描述数据库文件,存储结构化数据,根据用户访问信息,存储在数据库中。存储目录结点用来描述存储服务器上的某个存储目录的信息,结构化数据文件作为叶子节点存在,应用程序传递参数指定存储位置创建数据库文件,通过统一的存储入口可以分类型,按要求存储用户数据。不同的文件存储在不同的位置,该方法使应用程序可以根据数据类型分类存储用户信息,自定义存储路径。
定义14??文件类型。文件分为结构化文件和非结构化文件,FileType::=StructFileUnStructFile,UnStructFile::=(Typename, FilePath),其中:Typename表示文件类型的名称,比如:jpg、mp3、txt、log、xml等;FilePath表示文件的存储目录结点与它的祖先结点之间的相对路径,StructFile∷=(Filename, DBServerNode.id, Data); Filename::=String; Filepath::=(ServerId,Property); DBServerNode.id为数据库服务器所在的服务器结点;Data::=(TableID, RecordID, keyName, Value)序列,其中,序列中四元组按时间排序;TableID::=String;RecordID::=String;KeyName∷=String;Value∷=IntegerStringArrayFloatDouble|BooleanObjectDate;用Last(Data)表示序列Data的最后一个四元组。
运行中产生的用户数据如果是非结构化文件数据,则通过如下接口进行用户数据的存储:
非结构化文件存储接口::=(userId, uploadTime, (fileName, UnStructFile, Content))。
运行中产生的用户数据如果是结构化文件数据,则通过如下接口进行用户数据的存储:
结构化文件存储接口::=(userId, uploadTime, (fileName, StructFile, API.Parmin, Content))
非结构化文件存储以单个文件形式存在于存储系统中,运行过程中产生的用户数据如果是非结构化文件数据,在存储目录树中找到存储位置的文件结点:TreeInsert1(userId, uploadTime, (fileName, UnStructFile, Content))=(fileName, UnStructFile, Content, property);其中property为(userId, uploadTime, directoryNodeId),表示文件的属性,directoryNodeId表示存储目录树模型分配给该文件作为叶结点UnStrfileNode的父结点编号,即UnStrfileNode.Parent=directoryNodeId, UnStrfileNode.Childs=?。
结构化的数据存储在关系型数据库文件中,产生的用户数据如果是结构化文件数据,在存储目录树中找到存储位置的文件结点,即数据库文件所在的叶子结点,即可写入用户数据:TreeInsert2(userId, uploadTime, (fileName, StructFile, API.Parmin, Content))=(fileName, StructFile, Content, property), 其中:property为((userId, uploadTime), directoryNodeId)表示文件的属性;directoryNodeId表示模型分配给该文件作为叶结点StrfileNode的父结点编号,即StrfileNode.Parent=directoryNodeId,StrfileNode.Childs=?。图 2为用户痕迹采集存储的流程图。
图 2 用户痕迹采集存储流程图 Fig. 2 Flowchart of user trace collection and storage
图选项




算法9??用户痕迹存储算法。
分布式用户交互痕迹和数据的捕获,根据
用户在不同应用客户端的行为记录的日志,发送给存储服务器。依据产生的数据类型,如果是非结构化文件数据,则执行非结构化文件结点插入操作,如果是结构化文件数据,则执行结构化文件结点数据写入操作。
TreeInsert(userId, uploadTime, (fileName, FileType, Content))=if(FileType=UnStructFile)
{TreeInsert1(userId, uploadTime, (fileName,
UnStructFile, Content));
}else if(FileType=StructFile)
{TreeInsert2(userId, uploadTime, (fileName,
Struct File, Content));
}else
return False;
算法10??用户痕迹的检索算法。
用户行为痕迹数据存储在分布式存储检索系统中,检索时从树的根节点开始检索,根据已知的用户id和时间戳来查询用户痕迹记录,分布式存储检索系统由多棵树构成森林,检索用户痕迹数据,就是从森林中检索数据。森林可分解为多棵树,那么检索即从第1棵树开始检索,通过依次遍历每棵树完成检索。
检索接口::=Query(userId, uploadTime)
假设Forest=distributeTrees, distributeTrees={directoryTree(serverNode1), directoryTree(serverNode2), …, directoryTree(serverNodek)}(k≥1)
Query(userId, uploadTime)=ForestQuery(userId, uploadTime, distributeTrees);
图 3为用户痕迹检索的流程图。
图 3 用户痕迹检索流程图 Fig. 3 Flowchart of user trace querying
图选项




算法11??森林检索算法。
森林由若干棵树构成,那么森林的遍历可以分解为树的遍历,从树的根节点开始遍历。
ForestQuery(userId, uploadTime, distributeTrees)=
(for(i=1, ik, i++){
TreeQuery(userId, uploadTime,
directoryTree(serverNodei)); }
return ?;)
算法12??树检索——叶子结点的匹配算法。
文件节点即为树的叶子结点,文件节点分为两类:结构化文件节点和非结构化文件节点。根据已知的用户信息,匹配叶子结点属性中的用户信息,如果比对成功,该叶子结点包含检索的用户信息,则返回该叶子结点的存储路径,以及检索到的用户历史行为数据。若失败,即该树中检索不到用户历史行为数据,则返回空集。
设Tree的叶结点集合为{LeafNode1, LeafNode2, …, LeafNoden},其中LeafNodei是结构化文件结点StrfileNode或者非结构化文件结点UnStrfileNode。
TreeQuery(userId, uploadTime, directoryTree)=
(for(i=1, in, i++){
if(LeafNodei.property.userId=userId&LeafNodei.property.uploadTime=uploadTime)
return{/*返回绝对路径*/
getAbsolutePath(directoryNode.id,
directoryTree.id, Parm)/LeafNodei.fileName;
LeafNodei.Content; }
}else return ?;
4 实验结果与分析 为了评估界面窗口树模型数据采集的完整性和高效性,对提出的用户痕迹模型的存储和检索效率进行了实验。实验环境客户端1台,计算服务器1台,数据库服务器1台,非结构化数据存储服务器1台,配置均为Intel(R) Core(TM) i5-3210M CPU @ 2.50 GHz,内存为8 GB。
4.1 文件写入效率 文件写入效率(File Writing Efficiency, FWE)指标用来衡量访问文件的效率,计算公式为
(1)

式中:S为存储的文件总大小;T为存储完用户数据总时间。FWE值越大,系统的写入效率越高。为了评估在采集用户数据情况下,系统的写性能,在用户信息上传界面,电商界面等多个页面进行了访问并操作,实验数据包括结构化数据和非结构化文件,因为网页数据多为小文件,点击多个按钮进行页面跳转,实验模拟生成了大量的小文件,做了200次实验,写磁盘的时间T为200次实验总时间的平均值。根据FWE指标计算方法,并与李慧莹[16]的OPT_HDFS系统做了对比,得出如图 4所示的FWE指标对比图,可以看出本文系统比OPT_HDFS系统有更高的访问效率,而且在文件数在10 000个以后,访问效率增加速度减小。
图 4 文件写入效率对比 Fig. 4 Comparison of file writing efficiency
图选项




4.2 系统响应时间测试 为了评估本文系统的响应时间,实验过程中使用了大量内容不同的小文件,这些文件的平均大小为50 KB,北京理工大学的焦晨宇提出了一种可伸缩的分布式文件系统SDFS[17],本文对2个系统进行了对比实验。图 5显示了SDFS[17]和本文系统的响应时间的对比,包括读文件和写文件。
图 5 系统响应时间对比 Fig. 5 Contrast of system response time
图选项




本文提出的系统仅仅需要0.083 s即可以完成查询,而SDFS则需要0.342 s。而在写文件方面,SDFS比本文系统多耗时0.02 s,实验显示本文系统提出的方法耗时远远低于SDFS,平均响应时间远低于SDFS,有更好的性能。
4.3 精确性测试 对系统进行测试,可以根据用户id和用户访问时间,检索采集存储系统,提取用户行为包括用户操作编号、IP、URL、API时间编号等基本参数,当前的访问页面等,访问内容的大小,若想对用户行为进行全面的记录与分析,还包括网页停留时间,点击数等参数。对用户的停留页面做了可视化的分析,对全部会话的界面停留总时间进行数据提取时,同样以单次会话的界面停留时间提取方法为基础。基于用户id进行数据库数据的提取,按照用户的会话编号依次进行用户跳转请求树结构的遍历,将节点时间信息的计算统计结果保存在对应界面各次会话停留时间的变量中,并计算出总时间。将计算出的各界面停留总时间数据返回前端,前端根据返回数据进行饼图的可视化流程,可视化效果图。图 6为根据采集到的用户浏览界面生成的界面节点访问统计,图中百分比表示界面节点访问次数占总访问次数的比重,面积大的表示访问量大的页面。
图 6 界面节点访问统计 Fig. 6 Interface node access statistics
图选项




4.4 完整性测试 通过对以上用户操作进行磁盘存储文件和前端采集到行为事件的统计分析,数据主要包括用户访问ID、页面请求类型、请求URL、请求的资源数据大小、会话信息、用户操作的时间序列,用户点击,用户操作的事件,用户操作的控件或者链接,用户输入和请求的数据字段,用户页面的停留时间,下载的文件。从单个用户单次会话的有效访问路径可视化的效果图中,可以直观地看出某一名用户在某一次会话中的具体访问过程。图 7为一棵用户行为树。经过多个页面跳转生成的访问路径,用户生成树没有闭环。完整的采集到了用户路径,根据用户信息,时间戳,能检索到用户访问的当前页面,并对用户在页面的点击或者浏览进行兴趣行为分析。某用户需要频繁经过一系列的跳转操作到达某一界面时,可以判断该界面的层级需要进行调整。
图 7 用户行为树生成图 Fig. 7 User behavior tree generation
图选项




5 应用实例 作为一个案例研究, 本文采用笔者参与研发的国家殡葬文化与科技公共服务网络平台以验证该模型。该公共服务网络平台面向社会公众及殡葬行业相关机构用户,提供一站式服务,由主站和政务信息、殡葬文化、科技公益、新闻动态、网络祭祀5个子系统组成。平台的部分资源无需用户登录即可查看访问,但在未登录状态下所产生的行为,却无法直接识别用户,若直接将未登录行为信息舍弃将会失去许多潜在的可分析资源,为了解决这个问题采用以下步骤:
每条用户行为记录都有唯一编号标识。
步骤1??每产生一条行为记录,将记录的标识返回,并放置于Cookie中。
步骤2??当用户登录,获取用户客户端Cookie中所有行为记录编号,并将用户id及所有行为记录编号输入至另一类日志文件/unloginUBInfo/userBehaviorIDLog中。
步骤3??日志处理,获取/unloginUBInfo /userBehaviorIDLog所包含编号对应的日志记录中,将用户id字段变更成用户id。
系统架构图如图 8所示,分布式数据存储服务器分为用户数据服务器S3,非结构化数据存储服务器S1、S2及界面窗口存储服务器S4。
图 8 系统架构 Fig. 8 System architecture
图选项




最顶层是业务逻辑层,该层的主要工作是由负载均衡服务器把用户访问请求进行分流,发送给不同的应用服务器,再由应用程序去调用云存储管理层提供的服务接口去管理用户数据和操作数据。业务逻辑层中的应用程序可以根据分布式存储目录建模方案自定义存储目录的层级结构。中间层是云存储管理层,它负责管理云存储平台并向应用程序提供云存储服务,该层由存储接口管理子系统、集群管理子系统和存储管理子系统构成。存储接口管理子系统给应用程序提供数据类型识别,分类存储管理操作相关接口和目录操作等接口。该层还负责管理应用程序自定义的存储目录树,生成文件的存储路径和访问路径,当存储服务器的存储负荷达到一定阈值之后,该层会向集群管理子系统请求对相应的存储目录进行逻辑扩容。
在用户数据库中建立对应数据表,主要包括用户基本信息表、界面窗口数据表Window、API数据表、操作记录数据表Operation、用户访问数据表userAccesslog,将预先设计的界面模型存储至数据库中。userAccesslog中的每一条记录都对应着用户的一条操作行为,而对于用户行为非结构化数据(比如图片、视频、音频文件等),则经由非结构化用户数据文件云存储系统进行分布式存储。只需要userID,时间戳就可检索到用户的一条操作记录。数据表设计如表 2表 3所示。有效捕获的用户行为轨迹是用户在浏览器端的点击操作,系统选择在前端页面的点击函数中添加数据发送函数,将本次操作所对应的ApiId、OperationId以及其他用户输入值发送到后台,用户行为结构化数据存储至关系型数据库,其他请求资源存入非结构化数据云存储系统中。
表 3 Operation关键字段 Table 3 Key field of Operation
字段 类型 说明
operationId varchar 操作事件编号
interfaceNodeID varchar 所属界面
menuID varchar 菜单操作编号
apiID varchar API编号
userOperation varchar 用户操作
eventType varchar 事件类型
relativity varchar 前后台相关性
inparam varchar 输入参数
inparamType varchar 输入参数类型
outparam varchar 输出参数
outparamType varchar 输出参数类型
timeStamp timestamp 记录事件发生的时间


表选项






表 2 userAccesslog关键字段 Table 2 Key field of userAccesslog
字段 类型 说明
userID varchar 用户id
OperationId varchar 用户操作事件编号
timeStamp timestamp 记录事件发生的时间
IP varchar 当前IP地址


表选项






例1用户在网络祭祀首页发起登录操作,登录界面由控件序列:用户名文本框,密码文本框,登录按钮组成,用户输入用户名和密码,点击登录按钮loginBtn,界面结点LoginNode经过用户触发事件login跳转到界面结点SacrificesNode。满足界面节点LoginNodeSacrificesNode,vvRelation∷(LoginNode, SacrificesNode, login),login调用登录控件对应的API:loginAPI。
1) 网络祭祀首页界面节点表示为SacrificesNode,登录界面节点表示为LoginNode。
2) 用户在登录界面中用户名输入文本框控件表示为(idUser001, username, Input, alice, True, True)。
3) 密码输入文本框控件表示为(idPwd001, password, Input, pwd123456, True, True)。
4) 按钮控件表示为(idbtn0000002, loginBtn, getApi, null, True, False)。
前端向后台发起登录处理请求,逻辑处理层收到请求后,经过数据库校验,返回响应数据包括用户身份编号userID和其他的输出数据,记录此时的系统时间,前端提示登录成功,展示用户登
录后的界面SacrificesNode。系统储存以上的控件序列的信息,输入的参数,返回的结果,并记录当前登录用户的身份user0001,作为生成的用户行为树的根节点,写入UserData数据库的userAccesslog表和Operation表。
界面节点LoginNode作为第一个子树的根节点,界面节点SacrificesNode作为LoginNode的子节点,若用户在界面SacrificesNode停留的时间超过定义的时间T_max=5 min,跳转到个人缅怀专题页面界面节点PersonalAlbumNode,则PersonalAlbumNode作为user0001的第2个子节点,生成新的用户访问路径。若用户在界面SacrificesNode停留的时间小于T_max=5 min,界面节点PersonalAlbumNode则作为节点SacrificesNode的子节点,用户访问路径则为LoginNode-SacrificesNode-PersonalAlbumNode,即为访问的界面顺序。用户访问时间、请求类型、请求URL、请求数据大小、http协议、http状态码等信息通过服务器日志获取,也一并作为访问过程数据存储,生成的用户行为树存入UIModel界面数据库,树的节点编号即为界面节点的编号,非结构化数据,如视频或者图片数据则存入分布式存储目录树(系统)中。单个用户的单次会话,用户的完整访问路径,从UIModel界面数据库中提取各类节点相关信息添加到树结构中,完成树的构建。
当需要使用存储的数据时,则根据idUser0001和时间戳检索用户行为树中的界面节点,匹配到后从分布式存储检索系统提取需要的精准的用户痕迹数据,分析用户经常访问路径,用户感兴趣的界面等数据。
系统调用算法9,写入存储系统,记录数据见表 4
表 4 用户行为记录数据项及格式说明 Table 4 User behavior record data items and format specification
数据项 格式 说明
时间 time 2018-03-20 17:13:13 日志记录生成时间
日志编号 logID [95C4C3AE62D41E3213C3007F3] 为每条日志设定唯一编号,用[]标识,可供后续搜索
操作行为
信息
Input requestURL “requestURL”:“http://10.2.8.166:11680/portal/login 访问者请求URL
IP “IP”:“10.2.8.171” 访问者真实IP地址
varchar alice,pwd123456 输入值为用户名,密码
Output Json格式,用{}标识,属性间用“,”分隔 {“userID”:idUser0001,“status”:200,“msg”:“注册成功”} 返回用户id,注册成功状态和提示信息
界面信息 window 界面窗口 LoginNode,SacrificesNode LoginNode的孩子节点是SacrificesNode
widgets 控件序列 用户名文本框(idUser0001,username,Input,alice,True,True)密码文本框(id0000001,password,Input,pwd123456,True,True)注册按钮(id0000002,registerBtn,getApi,null,True,False)用户头像框(headImg) 控件编号;控件名称;控件类型;控件当前取值;控件的可见性;控件的可修改性
menuID varchar login 登录注册菜单
apiID varchar loginApi 操作对应的API


表选项






TreeInsert(userId, uploadTime,
(fileName, FileType, Content))=
if(FileType=UnStructFile){
TreeInsert1(userId, uploadTime,
(fileName, UnStructFile, Content));
}else if(FileType=StructFile){
TreeInsert2(userId, time, (userdata.mdb,
StructFile, (input, output, windows, widgets, api));
}else return Error;
系统调用算法10,Query(userId, uploadTime)=Query(idUser0001, timeStamp),用户行为树按用户的ID编号为根节点进行树形存储,检索时遍历数据库中用户行为记录,进行用户行为的检索,通过检索第一个API,即loginApi,检索到界面结点LoginNode,再遍历此界面结点的子节点,找到满足此loginApi调用跳转的界面结点SacrificesNode,并对其进行以LoginNode作为根结点的子树的递归检索,构成行为树,并根据数据库表检索在此过程中的所有相关数据。
例2 ??用户在科技公益平台上的个人缅怀专题页面中,用户可以上传与自己亲人相关的图片和视频等多媒体文件。用户idUser0001为他自己亲人建立的缅怀专题页面上传了一张照片img1,云存储系统会调用算法9把img1保存到idUser0001的私有存储空间,图 9所示显示了idUser0001访问到的图片来自他的私有存储空间。同理,系统调用算法12,TreeQuery(userId, uploadTime, directoryTree),检索用户idUser0001存储的信息,其中userId=“idUser0001”,uploadTime=“20170105”,directoryTree=10.2.8.188:80/”。
图 9 存储非结构化文件示例 Fig. 9 Sample of unStructFile storage
图选项




6 结论 1) 本文提出了一种面向互联网的用户交互痕迹捕获、存储和检索模型,通过界面窗口树和用户行为树的建立,实现了互联网用户行为数据的采集,支持不同的Web数据存储到分布式存储系统中并可以检索,改善了由于网络信息化信息繁多且数据源多样化而无法精确采集用户行为痕迹的问题,完成用户行为数据较完整的采集。
2) 分布式存储服务给应用程序提供统一的分布式的存储接口,根据不同的数据类型,自动分类存储在不同的位置,并能随存储变化动态调整磁盘存储空间大小,克服了单结点存储服务器磁盘存储空间的限制。采用界面窗口树模型检索,提高了界面节点增删改查的效率,完善了分布式用户痕迹采集过程中存取的过程。
3) 模型的建立为后续的用户行为分析奠定了数据采集的基础,以数据为核心驱动业务的发展。

参考文献
[1] SRIVASTAVA J, COOLEY R, DESHPANDE M, et al. Web usage mining:Discovery and applications of usage patterns from Web data[J]. ACM SIGKDD Explorations Newsletter, 2000, 1(2): 12-23. DOI:10.1145/846183.846188
[2] 张玉芳, 张艳华, 熊忠阳. 一种高效的用户浏览行为采集方法[J]. 计算机工程与应用, 2013, 49(3): 126-129.
ZHANG Y F, ZHANG Y H, XIONG Z Y. Efficient method for collecting user browsing behaviors[J]. Computer Engineering and Applications, 2013, 49(3): 126-129. DOI:10.3778/j.issn.1002-8331.1108-0269 (in Chinese)
[3] CATLEDGE L D, PITKOW J E. Characterizing browsing strategies in the world-wide web[J]. International World Wide Web Conference, 1995, 27(95): 1065-1073.
[4] 董志安, 吕学强. 基于百度搜索日志的用户行为分析[J]. 计算机应用与软件, 2013, 30(7): 17-20.
DONG Z A, LYU X Q. User behavior analyses based on baidu search logs[J]. Computer Applications and Software, 2013, 30(7): 17-20. DOI:10.3969/j.issn.1000-386x.2013.07.006 (in Chinese)
[5] THORAT S S, MORE P.User oriented approach to website navigation concept using mathematical model[C]//International Conference on Computational Intelligence and Communication Networks.Piscataway, NJ: IEEE Press, 2016: 1431-1435.
[6] 李睿, 连航, 马世龙, 等. 基于形式化方法的航空电子系统检测[J]. 软件学报, 2015, 26(2): 181-201.
LI R, LIAN H, MA S L, et al. Avionics system testing based on formal methods[J]. Journal of Software, 2015, 26(2): 181-201. (in Chinese)
[7] 余慧佳, 刘奕群, 张敏, 等. 基于大规模日志分析的搜索引擎用户行为分析[J]. 中文信息学报, 2007, 21(1): 109-114.
YU H J, LIU Y Q, ZHANG M, et al. Research in search engine user behavior based on log analysis[J]. Journal of Chinese Information Processing, 2007, 21(1): 109-114. DOI:10.3969/j.issn.1003-0077.2007.01.018 (in Chinese)
[8] FU Y, LUO S, SHU J. Survey of secure cloud storage system and key technologies[J]. Journal of Computer Research & Development, 2013, 50(1): 136-145.
[9] LIU J, HUANG K, RONG H, et al. Privacy-preserving public auditing for regenerating-code-based cloud storage[J]. IEEE Transactions on Information Forensics & Security, 2015, 10(7): 1513-1528.
[10] WU Y, JIANG Z L, WANG X, et al.Dynamic data operations with deduplication in privacy-preserving public auditing for secure cloud storage[C]//IEEE International Conference on Computational Science and Engineering.Piscataway, NJ: IEEE Press, 2017: 562-567.
[11] BELLET A, HABRARD A, SEBBAN M.A survey on metric learning for feature vectors and structured data[EB/OL].(2014-02-12)[2018-12-29].https: //arxiv.org/abs/1306.6709.
[12] 杨晶, 周双娥. 一种基于XML的非结构化数据转换方法[J]. 计算机科学, 2017, 44(11): 414-417.
YANG J, ZHOU S E. Method for unstructured data transformation based on XML technology[J]. Computer Science, 2017, 44(11): 414-417. (in Chinese)
[13] BOUCHER T D, AUSLANDER D M, BASH C E, et al.Viability of dynamic cooling control in a data center environment[C]//The Ninth Intersociety Conference on Thermal and Thermomechanical Phenomena in Electronic Systems, 2004(ITHERM'04).Piscataway, NJ: IEEE Press, 2006: 593-600.
[14] HOU B, CHEN F, OU Z, et al. Understanding I/O performance behaviors of cloud storage from a client's perspective[J]. ACM Transactions on Storage, 2017, 13(2): 16.
[15] 汪帅, 吕江花, 汪溁鹤, 等. 一种支持数据去冗和扩容的多媒体文件云存储系统实现[J]. 计算机研究与发展, 2018, 55(5): 1034-1048.
WANG S, LYU J H, WANG R H, et al. A multimedia file cloud storage system to support data deduplication and logical expansion[J]. Journal of Computer Research and Development, 2018, 55(5): 1034-1048. (in Chinese)
[16] 李慧莹.基于HDFS的小文件存储方法的研究与优化[D].西安: 西安电子科技大学, 2014.
LI H Y.Research and optimization of small file storage method based on HDFS[D].Xi'an: Xidian University, 2014(in Chinese). http://cdmd.cnki.com.cn/Article/CDMD-10701-1014331548.htm
[17] 焦晨宇.可伸缩分布式文件系统及其应用[D].北京: 北京理工大学, 2015.
JIAO C Y.The design and application of a scalable distributed file system[D].Beijing: Beijing Institute of Technology, 2015(in Chinese).


相关话题/数据 系统 序列 信息 管理

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19
  • 强电磁脉冲下柴油发动机系统薄弱环节识别*
    近年来,柴油发动机发展越来越完善,以其高功效、宽功率范围、可靠性高、经济性好等优点,广泛应用于交通运输、工程机械、农用机械和国防装备等领域[1]。在现代战场上,大部分车辆均搭载柴油发动机。作为汽车的核心,发动机系统电子控制程度较高,在强电磁脉冲作用下会受到严重干扰甚至损伤[2-3]。为提高发动机电磁 ...
    本站小编 Free考研考试 2021-12-25
  • 空间多体系统轨道姿态及机械臂一体化控制*
    空间机器人是未来在轨服务任务中的实施主体,随着空间开发程度的提高,各国均发射了空间机器人进行空间操作任务演示,如日本的ETS-VII、美国的“轨道快车”、XSS-10、XSS-11等[1-4]。空间机器人是典型的空间多体系统,一般采用卫星本体基座与用于目标操作的机械臂组成,这种典型的空间多体系统自由 ...
    本站小编 Free考研考试 2021-12-25
  • 航模舵机的动态特性测试与系统辨识*
    舵机是气动伺服弹性系统中的执行机构,其将舵面的控制指令信号转化为舵面的运动,从而驱动舵面偏转产生控制力矩[1]。目前,市面上许多公司的舵机伺服系统解决方案,其舵机本身频响特性较好,并给出完整的特性参数,提供配套的控制系统,可针对舵机实际工作状态调整参数,满足工作要求。但是,对于大部分小型民用无人机来 ...
    本站小编 Free考研考试 2021-12-25
  • 基于矩独立重要度的电路系统容错设计方法*
    随着电路系统在工业控制、国防军工、日常生活等领域的应用越发广泛,各领域对其可靠性的要求越来越高,因此电路系统的高可靠性设计也越发重要[1]。容错设计作为提高电路系统可靠性的一种重要方法[1],在航天器电源电路[1-2]、核电站控制电路[1,3]等要求高可靠性的领域已经发挥了重要作用。目前,电路系统容 ...
    本站小编 Free考研考试 2021-12-25
  • 具有控制时滞的电动加载系统迭代学习复合控制*
    近年来,随着多电飞机(MoreElectricAircraft,MEA)技术的发展,很多中大型无人机前轮转向操纵系统的作动器正逐渐从传统液压作动器或者电动静液作动器替代为机电作动器(Electro-mechanicalActuator,EMA),以去除液压机构,减轻重量,简化系统结构[1-2]。前轮 ...
    本站小编 Free考研考试 2021-12-25
  • 航空发动机传感器与执行机构信息重构算法*
    传感器和执行机构是航空发动机控制系统和健康管理系统的重要组成部分,其中传感器测量输出是控制系统和健康管理系统的关键信息来源,执行机构是数字电子控制器与发动机之间信息传递的关键环节。传感器和执行机构是航空发动机中故障率较高的元部件[1-2],随着对发动机安全性和可靠性要求的不断提高,非常有必要对发动机 ...
    本站小编 Free考研考试 2021-12-25
  • 近程动态范围激光雷达测距系统设计及误差分析*
    激光雷达作为一种新兴的主动式遥感技术,能够快速、准确、实时地获取地面目标的三维空间信息,近年来得到了极大的发展和应用。一个完整的激光雷达系统由激光测距仪、动态差分GPS接收机、惯性导航系统和成像装置组成。而激光测距仪是系统的核心部分,其采用的测距方法也有所不同。常用的方法有:脉冲法、相位法、三角法、 ...
    本站小编 Free考研考试 2021-12-25
  • 燃料电池无人机动力系统半实物仿真*
    燃料电池无人机(UAV)作为长航时电动无人机逐渐成为研究热点[1],燃料电池动力系统是其核心关键技术之一。燃料电池无人机面临的一个挑战是如何测量动力装置的性能。飞行试验[2]虽然能很好地验证、测试无人机的动力系统,但进行飞行试验准备周期长、费用多且有一定危险性;不可控因素多,在进行多次飞行试验时,很 ...
    本站小编 Free考研考试 2021-12-25
  • 基于水下机器人的海产品智能检测与自主抓取系统*
    利用水下机器人智能检测和自主抓取海产品成为当前海产养殖业的迫切需要,这是建立现代化海洋牧场的重要途径。目前,海参、扇贝等海产品的捕捞主要依靠潜水员和拖网船2种方式。潜水员不能在水下持续作业,并且受水下压强影响,常年从事水下捕捞工作的渔民容易得潜水病。大面积养殖的贝类主要依靠拖网船捕捞,但是这种拖网捕 ...
    本站小编 Free考研考试 2021-12-25
  • 结合轮廓及骨架序列编码的二维形状识别*
    形状是人类认知物体的一个重要线索。某些情况下,物体可能并不具备亮度、纹理或颜色等信息,只能通过其形状来表达。仅通过形状信息,人类仍然可以轻松识别不同的物体及其类别。而且,形状对于物体的颜色、光照和纹理的变化是具有稳定性的[1],也可以作为其他物体表示的一种辅助,以提高物体表示及识别的准确性。由于形状 ...
    本站小编 Free考研考试 2021-12-25