具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在本申请中,提供了一种数据处理方法。本说明书同时涉及一种数据处理装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本说明书一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
其中,处理器120可以执行图2所示数据处理方法中的步骤。图2示出了根据本说明书一实施例的数据处理方法的流程图,包括步骤202至步骤206。
步骤202:根据语义符号对获取到的离线日志进行分割,得到多层级结构数据。
本说明书一实施例中,在对离线日志进行分割之前,首先要获取该离线日志。具体地,为了保证对业务系统的业务代码无侵入性,并且能够获取全量交互参数,可以使用诸如某金融服务集团的日志采集平台对目标系统的接口日志进行采集,并通过离线的方式将采集到的日志以“T+H”(其中,T为时间,H为小时)延时导入开放数据处理服务(Open DataProcessing Service,ODPS)表中,得到待分析的离线日志。
进一步地,根据语义符号对待分析的离线日志进行分割,得到多层级结构数据,换言之,根据语义符号将获取到的离线日志切割成字符串数组。这里,语义符号是业务系统的交互日志中明确层级语义的符号,语义符号可以包括但不限于小括号(又称圆括号)“()”、中括号(又称方括号)“[]”、大括号(又称花括号)“{}”、尖括号“<>”中的任意一种或其组合。优选地,在该实施例中,语义符号可以是中括号“[]”,也可以是大括号“{}”,或者还可以是中括号“[]”和大括号“{}”的组合;其中,中括号“[]”内的参数为数组,大括号“{}”内的参数为对象。多层级结构是采用自上而下分级的结构,多层级结构可以包括至少两个层级结构。
步骤204:根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,其中,所述特征参数包括参数路径。
本说明书一实施例中,所述特征参数还包括参数名、参数类型和参数值,所述根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,包括:根据预设的所述参数路径、所述参数名、所述参数类型和所述参数值对所述多层级结构数据进行解析,得到所述参数集合。这里,特征参数是用于表征物质或现象特性的参数信息,以移动支付业务为例,特征参数通常由参数路径、参数名、参数类型和参数值四个维度来描述。
本说明书一实施例中,所述语义符号包括第一级递增语义符号和第一级递减语义符号,和/或第二级递增语义符号和第二级递减语义符号,所述根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,包括:根据所述预设的特征参数以递归的方式对所述多层级结构数据进行检测;当检测到所述第一级递增语义符号或所述第二级递增语义符号时,获取与所述第一级递增语义符号或所述第二级递增语义符号最近的参数路径作为当前层级的父节点;当进一步检测到所述第一级递增语义符号或所述第二级递增语义符号时,获取与所述第一级递增语义符号或所述第二级递增语义符号最近的参数路径作为所述当前层级的下一层级的子节点;将所述子节点对应的参数路径添加到所述父节点对应的参数路径中,并用分隔符将所述父节点对应的参数路径与所述子节点对应的参数路径分隔开;重复上述检测过程,直到所有的第一级递增语义符号和/或第二级递增语义符号均被检测。
本说明书一实施例中,所述根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,还包括:当检测到所述第一级递减语义符号或所述第二级递减语义符号时,删除当前参数路径中最近的父节点,并退回到上一层级;重复上述检测过程,直到所有的第一级递减语义符号和/或第二级递减语义符号均被检测。
具体地,第一级递增语义符号和第一级递减语义符号,或者第二级递增语义符号和第二级递减语义符号通常是成对出现的。当检测到第一级递增语义符号和/或第二级递增语义符号时,可以通过诸如“回车+空格”的方式在离线日志中增加新的层级,即层级递增;当检测到第一级递减语义符号和/或第二级递减语义符号时,可以通过诸如“回退”的方式在离线日志中删除相应的层级,即层级递减。进一步地,递归是指在函数的定义中使用函数自身的方法,更直接地说,递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。
此外,本实施例主要通过“参数路径”的方式对层级进行解析。然而,解析的方式不限于如上所述的参数路径,例如,还可以使用“层级数+父节点”的方式进行解析,即对层级进行计数,而无需将父节点添加到参数路径中。
具体地,以参数A.B.C为例,可以用参数名、父节点和层级数这三个信息来对其进行描述,即参数A.B.C的参数名为C、父节点为B、层级数为3。因此,在进行解析时,根据层级数和父节点这两个信息一样可以解析出树形数据结构,从而还原模型对象的结构。
需要说明的是,第一级递增语义符号和第二级递增语义符号可以相同,也可以不同;同样地,第一级递减语义符号和第二级递减语义符号可以相同,也可以不同,本发明对此不作限制。
此外,还需要说明的是,离线日志中可以仅包括第一级递增语义符号和/或第一级递减语义符号,也可以仅包括第二级递增语义符号和/或第二级递减语义符号,或者还可以包括上述语义符号的组合,本发明对此不作限制。
下面,将通过具体示例对如上所述的递归解析过程进行详细说明。
假设离线日志为“request=[A[B{C:8},D:5]]”,其中,A、B、C和D为参数名,参数类型为数值,8和5为参数值,左方括号“[”为第一级递增语义符号,右方括号“]”为第一级递减语义符号,左花括号“{”为第二级递增语义符号,右花括号“}”为第二级递减语义符号。
当检测到左方括号“[”时,获取与该左方括号“[”最近的参数路径A作为第一层级的父节点,即将第一层级的父节点记为A;继续执行检测操作,当检测到第二个左方括号“[”时,获取与该左方括号“[”最近的参数路径B作为第二层级的子节点,即将第二层级的子节点记为B;这时,将参数路径B拼接到参数路径A中,并用分隔符“.”将参数路径A与参数路径B分隔开,通过上述操作可以得到参数路径A.B;继续执行检测操作,当检测到左花括号“{”时,获取与该左花括号“{”最近的参数路径C作为第三层级的子节点,即将第三层级的子节点记为C,这时,将参数路径C拼接到当前参数路径A.B中,得到参数路径A.B.C;继续执行检测操作,由于在接下来的操作中并未检测到新的左方括号“[”或左花括号“{”,因此表明所有的左方括号“[”或左花括号“{”都已经被检测到,这时,将参数值8赋予当前参数路径A.B.C,得到键值对A.B.C=8。
进一步地,继续执行检测操作,当检测到右花括号“}”时,删除第三层级的参数路径A.B.C中最近的父节点C,并退回到第二层级,得到第二层级的参数路径A.B;继续执行检测操作,当检测到参数D时,可以确定参数D和参数B均处于第二层级,因此,参数D和参数B应当具有相同的父节点A,由此得到第二层级的另一个参数路径A.D;继续执行检测操作,由于在接下来的操作中并未检测到左方括号“[”或左花括号“{”,因此表明所有的左方括号“[”或左花括号“{”都已经被检测,这时,将参数值5赋予当前参数路径A.D,得到键值对A.D=5;继续执行检测操作,当检测到右方括号“]”,删除第二层级的参数路径A.B中最近的父节点B和第二层级的参数路径A.D中最近的父节点D,并退回到第一层级,得到第一层级的参数路径A。
由此可见,通过递归解析的方法能够提取出所述离线日志的所有特征参数,得到解析后的参数集合A.B.C=8和A.D=5,该参数集合中包括参数路径A.B.C和参数路径A.D。
步骤206:根据所述参数集合中的所述参数路径构建树形数据结构。
在计算机科学中,树是一种抽象数据类型或是实作这种抽象数据类型的数据结构,用来模拟具有树形结构性质的数据集合。树是由n(n>0)个有限节点组成的具有层次关系的集合。进一步地,树形数据结构是一类重要的非线性数据结构,其可以表示数据表素之间一对多的关系,其中以树与二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树形数据结构在客观世界中广泛存在,例如,人类社会的族谱和各种社会组织机构都可以用树形数据结构来形象地表示。
本说明书一实施例中,所述根据所述参数集合中的所述参数路径构建树形数据结构,包括:根据所述参数集合中的所述参数路径以反向递归的方式构建所述树形数据结构。
反向递归也称逆向递归,是指从最底层的子节点开始,向上查找所有的父节点。这里,仍以如上所述的示例为例,对于递归解析得到的参数集合A.B.C=8和A.D=5,可以根据参数路径A.B.C和参数路径A.D,由子节点C开始进行反向递归以构建树形数据结构。具体地,将参数值8赋给子节点C,然后寻找子节点C的父节点B、父节点B的父节点A;进一步地,将参数值5赋给子节点D,然后寻找子节点D的父节点A,由于父节点B和子节点D的父节点均为父节点A,由此确定父节点B和子节点D处于同一层级。因此,通过反向递归可以将所述离线日志以树形结构展示。
本说明书一实施例中,所述数据处理方法还包括:根据所述参数路径对所述参数集合进行校验,并在校验未通过时剔除异常参数路径对应的节点。
一个可选的实施例中,所述数据处理方法还包括:根据所述参数路径和/或所述参数名对所述参数集合进行校验,并在校验未通过时剔除异常参数路径和/或异常参数名对应的节点。
具体地,数据校验过程也可以称为数据过滤过程,是指根据预设的校验或过滤条件剔除参数集合中的异常数据的过程。这里,校验条件例如可以为参数名中不包括中文或其它特殊字符、参数路径中不包括中文或其它特殊字符等;也就是说,如果参数名和/或参数路径中包括中文或其它特殊字符,则认为该参数名和/或参数路径异常,并将其从参数集合中剔除掉。
以参数路径和参数名为例,假设检测到的参数路径为“A.B.测试”,由于该参数路径包含的参数名中含有中文字符“测试”,可以确定该参数名必然不会是一个代码的参数名,因此,确定该参数名为异常参数名,其所在的参数路径为异常参数路径,并返回诸如“校验未通过”的提示信息;进一步地,将该异常参数路径对应的节点剔除掉。
本说明书一实施例中,通过根据语义符号对获取到的离线日志进行分割,得到多层级结构数据,根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,其中,所述特征参数包括参数路径,根据所述参数集合中的所述参数路径构建树形数据结构,能够直接对离线日志进行递归解析,因此,对业务代码没有侵入性,且具有很好的普适性。
图3a和图3b示出了本说明书一实施例的数据处理方法的处理结果的界面示意图。
假设离线日志为:
“paramName=[systemCode,PayCommitRequest=[extParams={payAfterCardBinding,payAccessChannel={access_channel,app_type,term_equip_type},payChannel},replayMode,terminalInfo={clientlp,appTerminalInfo={wifiName,locale},tinyAppld},crderld,cashierType=MOBILE,selectedChannels,payPhase,securityCheckInfo={securitySceneParams={call_back_method,call_back_apiversion},ctuParams,nonBankUaInfo},requestContext={requestTime,hostname,appName}],serviceName]”。
根据上述离线日志中的方括号和大括号对该离线日志进行分割和解析,当检测到第一个左方括号“[”时,获取与该左方括号“[”最近的参数路径systemCode作为第一层级的父节点;继续执行检测操作,当检测到参数路径PayCommitRequest时,确定该参数路径与参数路径systemCode处于同一层级,因此,参数路径PayCommitRequest也是第一层级的父节点;当检测到第二个左方括号“[”时,获取与该左方括号“[”最近的参数路径extParams作为第二层级的子节点,这时,将参数路径extParams拼接到与该参数路径最近的参数路径PayCommitRequest中,并用分隔符“.”将二者分隔开,由此得到新的参数路径PayCommitRequest.extParams;继续执行检测操作,当检测到第一个左花括号“{”时,获取与该左花括号“{”最近的参数路径payAfterCardBinding作为第三层级的子节点,这时,将参数路径payAfterCardBinding拼接到与该参数路径最近的参数路径PayCommitRequest.extParams中,得到新的参数路径PayCommitRequest.extParams.payAfterCardBinding;以此类推,直到所有的左方括号“[”或左花括号“{”都已经被检测到。
进一步地,继续执行检测操作,当检测到第一个右花括号“}”时,删除第四层级的参数路径PayCommitRequest.extParams.payAccessChannel.access_channel中最近的父节点access_channel,并退回到第三层级,得到第三层级的参数路径PayCommitRequest.extParams.payAccessChannel;继续执行检测操作,当检测到第二个右花括号“}”时,删除第三层级的参数路径PayCommitRequest.extParams.payChannel中最近的父节点payChannel,并退回到第二层级,得到第二层级的参数路径PayCommitRequest.extParams;继续执行检测操作,当检测到第一个右方括号“]”,删除第二层级的参数路径PayCommitRequest.requestContext中最近的父节点requestContext,并退回到第一层级,得到第一层级的参数路径PayCommitRequest;以此类推,直到所有的右花括号“}”或右方括号“]”都已经被检测到。
通过递归解析的方法能够提取出上述离线日志的所有特征参数,得到解析后的参数集合。具体地,如图3a所示,经解析得到的参数名为systemCode、PayCommitRequest和serviceName,其中,PayCommitRequest带有子层级。进一步地,如图3b所示,将PayCommitRequest展开之后可以看到PayCommitRequest包括9个子层级,即,extParams、replayMode、terminalInfo、crderld、cashierType、selectedChannels、payPhase、securityCheckInfo和requestContext,其中,extParams、terminalInfo、securityCheckInfo和requestContext还带有子层级,在此不一一进行赘述。
需要说明的是,每个特征参数都有全参数路径作为前缀,例如,参数集合PayCommitRequest.extParams.payAccessChannel.access_channel、参数集合PayCommitRequest.securityCheckInfo.securitySceneParams.call_back_method、参数集合PayCommitRequest.selectedChannels等。
与上述方法实施例相对应,本说明书还提供了数据处理装置实施例,图4示出了本说明书一实施例的数据处理装置的结构示意图。如图4所示,该装置400包括:
分割模块402,配置为根据语义符号对获取到的离线日志进行分割,得到多层级结构数据;
解析模块404,配置为根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,其中,所述特征参数包括参数路径;
构建模块406,配置为根据所述参数集合中的所述参数路径构建树形数据结构。
一个可选的实施例中,所述特征参数还包括参数名、参数类型和参数值,所述解析模块404根据预设的所述参数路径、所述参数名、所述参数类型和所述参数值对所述多层级结构数据进行解析,得到所述参数集合。
一个可选的实施例中,所述语义符号包括第一级递增语义符号和第一级递减语义符号,和/或第二级递增语义符号和第二级递减语义符号,所述解析模块404根据所述预设的特征参数以递归的方式对所述多层级结构数据进行检测,当检测到所述第一级递增语义符号或所述第二级递增语义符号时,获取与所述第一级递增语义符号或所述第二级递增语义符号最近的参数路径作为当前层级的父节点;当进一步检测到所述第一级递增语义符号或所述第二级递增语义符号时,获取与所述第一级递增语义符号或所述第二级递增语义符号最近的参数路径作为所述当前层级的下一层级的子节点,将所述子节点对应的参数路径添加到所述父节点对应的参数路径中,并用分隔符将所述父节点对应的参数路径与所述子节点对应的参数路径分隔开,以及重复上述检测过程,直到所有的第一级递增语义符号和/或第二级递增语义符号均被检测。
一个可选的实施例中,当检测到所述第一级递减语义符号或所述第二级递减语义符号时,所述解析模块404删除当前参数路径中最近的父节点,并退回到上一层级,以及重复上述检测过程,直到所有的第一级递减语义符号和/或第二级递减语义符号均被检测。
一个可选的实施例中,所述构建模块406根据所述参数集合中的所述参数路径以反向递归的方式构建所述树形数据结构。
一个可选的实施例中,该装置400还包括:
校验模块(未示出),配置为根据所述参数路径对所述参数集合进行校验,并在校验未通过时剔除异常参数路径对应的节点。
一个可选的实施例中,该装置400还包括:
校验模块(未示出),配置为根据所述参数路径和/或所述参数名对所述参数集合进行校验,并在校验未通过时剔除异常参数路径和/或异常参数名对应的节点。
一个可选的实施例中,处于同一层级的所述参数路径具有相同的父节点。
一个可选的实施例中,通过根据语义符号对获取到的离线日志进行分割,得到多层级结构数据,根据预设的特征参数对所述多层级结构数据进行解析,得到参数集合,其中,所述特征参数包括参数路径,根据所述参数集合中的所述参数路径构建树形数据结构,能够直接对离线日志进行递归解析,因此,对业务代码没有侵入性,且具有很好的普适性。
本说明书一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的数据处理方法的步骤。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述数据处理方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。