CN112380195A - 一种基于事务时序有向图的sql交互数据预处理方法与装置 - Google Patents

一种基于事务时序有向图的sql交互数据预处理方法与装置 Download PDF

Info

Publication number
CN112380195A
CN112380195A CN202011128299.0A CN202011128299A CN112380195A CN 112380195 A CN112380195 A CN 112380195A CN 202011128299 A CN202011128299 A CN 202011128299A CN 112380195 A CN112380195 A CN 112380195A
Authority
CN
China
Prior art keywords
sql
sqlcmd
transaction
instruction
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011128299.0A
Other languages
English (en)
Other versions
CN112380195B (zh
Inventor
金倩倩
张旭东
韦小刚
邓进
郭靓
田鹏飞
张滔
何金栋
吴丹
赵志超
吴丽进
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Corp of China SGCC
Electric Power Research Institute of State Grid Fujian Electric Power Co Ltd
Nari Information and Communication Technology Co
State Grid Electric Power Research Institute
Original Assignee
State Grid Corp of China SGCC
Electric Power Research Institute of State Grid Fujian Electric Power Co Ltd
Nari Information and Communication Technology Co
State Grid Electric Power Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by State Grid Corp of China SGCC, Electric Power Research Institute of State Grid Fujian Electric Power Co Ltd, Nari Information and Communication Technology Co, State Grid Electric Power Research Institute filed Critical State Grid Corp of China SGCC
Priority to CN202011128299.0A priority Critical patent/CN112380195B/zh
Publication of CN112380195A publication Critical patent/CN112380195A/zh
Application granted granted Critical
Publication of CN112380195B publication Critical patent/CN112380195B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种基于事务时序有向图的SQL交互数据预处理方法与装置,根据业务系统中原始SQL交互指令数据进行范式化训练,得到训练的SQL执行指令集合SqlCmdSet,构建训练的面向业务的事务时序有向图;获取业务系统生产环境中实际的SQL交互指令数据,范式化得到实际的SQL执行指令集合SqlCmdSet,获取实际的事务序列集合sessionTransactionSet;根据实际的事务序列集合sessionTransactionSet与训练的面向业务的事务时序有向图相匹配,输出实际的SQL交互指令数据对应的图路径。本发明能够最大程度保留有效数据,去除无用数据。最大程度提取了原始数据中相同事务操作的重复部分,实现原始数据去重。

Description

一种基于事务时序有向图的SQL交互数据预处理方法与装置
技术领域
本发明涉及一种基于事务时序有向图的SQL交互数据预处理方法与装置,属于数据库入侵检测技术领域。
背景技术
在实际业务场景中,产生的海量SQL交互指令是杂乱的,存在着大量脏的、相似的、重复的指令,这些指令的存在可能使得数据的交互陷入混乱,给后续的数据分析及数据挖掘工作增加难度,并导致大量重复的分析工作,甚至影响到用户管理决策。因此,需要对海量的SQL交互指令进行预处理,得到干净的、无重复的SQL指令集合,这对数据分析及数据挖掘等工作至关重要。
目前,对于海量数据预处理涉及到的数据检测和数据清洗等技术的研究已经比较广泛,基本思路均为采用问题导向思维,通过分析脏数据产生的成因,然后找出最佳的预处理方案分离出干净的数据。针对海量SQL的处理方法主要为:分析海量SQL数据中错误值、重复记录、不一致等问题数据的清洗及转换方法,将数据分类和整理,使之满足数据挖掘的需要。但是,现有技术仅针对单条SQL数据进行处理,未考虑业务层面的SQL交互指令的关联关系,不适用于后续面向业务的数据分析和挖掘。
发明内容
目的:为了克服现有技术中存在的不足,本发明提供一种基于事务时序有向图的SQL交互数据预处理方法与装置,为了实现面向业务的海量SQL交互数据预处理,达到提取有用数据、消除重复数据、完成数据标准化的目的,本发明首先针对面向业务对获取的业务系统通过JDBC与数据库进行交互的SQL交互指令数据样本进行训练,以会话为单位,对会话内执行的SQL指令语句进行识别,并提取所有执行的事务序列构建形成事务时序有向图。然后,基于事务时序有向图,对海量的SQL交互指令数据进行预处理,能够去除重复操作和无用操作记录,支撑后续的恶意事务和异常行为的挖掘分析。
技术方案:为解决上述技术问题,本发明采用的技术方案为:
一种基于时序有向图的SQL交互数据预处理方法,包括如下步骤:
步骤1:根据业务系统中所有保留有数据库操作类指令数据的原始SQL交互指令数据进行范式化训练,得到训练的SQL执行指令集合SqlCmdSet,再根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图;
步骤2:获取业务系统生产环境中保留有数据库操作类指令数据的实际的SQL交互指令数据,范式化得到实际的SQL执行指令集合SqlCmdSet,再根据实际的SQL执行指令集合SqlCmdSet获取实际的事务序列集合sessionTransactionSet;
步骤3:根据实际的事务序列集合sessionTransactionSet与训练的面向业务的事务时序有向图相匹配,输出实际的SQL交互指令数据对应的图路径。
作为优选方案,所述范式化训练,包括如下步骤:
1.1若当前处理的SQL交互指令数据中SQL执行指令的sql语句为“commit”或“rollback”,则transactionFlag赋值为“true”,originalSql赋值为SQL交互指令数据中的sql语句;转到步骤1.3;
1.2若当前处理的SQL交互指令数据中SQL执行指令的sql语句不是“commit”或“rollback”,判断SQL交互指令数据的执行类型;
1.2.1若当前处理的SQL执行指令是通过java.sql.Statement接口执行的,则prepareFlag赋值为“false”,data字段为空,originalSql赋值为SQL交互指令数据中的sql语句;
1.2.2若当前处理的SQL执行指令是通过java.sql.Connection.prepareStatement创建sql语句句柄时发送的,则prepareFlag赋值为“true”,且originalSql赋值为SQL交互指令数据中的sql语句;继续遍历后续的原始SQL交互指令数据,获取通过此语句句柄通过java.sql.PrepareStatement接口执行的指令,获取指令中对预编译语句中参数的赋值,赋值给data;
1.3填充当前处理的SQL执行指令的会话信息至sessionInfo字段,包括源ip、目的ip和会话id;
1.4填充当前处理的SQL执行指令的执行时间至time字段;
1.5根据记录中的源ip、目的ip,关联业务系统基础信息表,获取业务系统名称并补充至systemName字段;
其中,sessionInfo表示会话基础信息,包括会话id、会话中源IP、会话中目的IP、会话所属的业务系统名称;
time表示指令执行时间;
transactionFlag表示事务执行指令标识,即SQL交互指令中的SQL语句是否为“commit”或“rollback”,取值为“true”表示是“commit”或“rollback”,取值为“false”表示不是“commit”或“rollback”;
prepareFlag表示预编译指令标识,取值为“true”表示是预编译类型的SQL指令,取值为“false”表示不是预编译类型的SQL指令;
originalSql表示原始SQL语句;
data表示预编译指令关联数据集合,针对“预编译执行”类型SQL交互指令数据的参数的赋值信息,针对“直接执行”类型SQL交互指令数据,此字段为空。
作为优选方案,所述根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图,包括如下步骤:
2.1按照sessionID遍历SqlCmdSet;
2.2获取当前sessionID的所有SqlCmdSet,根据time进行排序;
2.3对完成排序的SqlCmdSet进行遍历,抽取事务序列sessionTransactionSet;
2.3.1判断当前SqlCmdSet.transactionFlag是否为“true”;若否,则继续遍历;
2.3.2若是,则从当前遍历序列中将当前SqlCmdSet以及之前所有的SqlCmdSet抽取出来,形成一个事务序列sessionTransactionSet,并且按照顺序填充sqlCmd字段,其中sqlCmd.sqlSequence按照顺序从1开始赋值,sqlCmd.time、sqlCmd.transactionFlag、sqlCmd.prepareFlag、sqlCmd.originalSql为原SqlCmdSet中相同字段值;其中,sqlCmd表示此事务序列sessionTransactionSet中的所有SQL执行指令,sqlCmd.sqlSequence表示此条指令在事务序列中的执行顺序序号;
2.4根据排序序列中SqlCmdSet中的sessionInfo填充当前sessionTransactionSet的sqlCmd.sessionInfo。
2.5根据事务序列sessionTransactionSet,构建训练的面向业务的事务序列有向图systemTransactionGraph(V,E),V为SQL执行指令节点集合,以SQL执行指令的sql语句来表示;E为有向边集合,以(vn,vm)表示,含义为节点vn指向节点vm,m、n分别表示节点的序号。
作为优选方案,所述步骤2.5,包括如下步骤:
2.5.1创建空图G(Vsystem,Esystem);
2.5.2创建终结节点vcommit和vrollback,加入集合Vsystem
2.5.3根据所有sessionTransactionSet中sessionInfo.systemName字段获取此业务的所有事务序列;
2.5.4遍历所有事务序列sessionTransactionSet,填充Vsystem,Esystem
2.5.4.1将sessionTransactionSet.sqlCmd中sqlSequence为1的sqlCmd记录作为起点v0,v0.name为当前sqlCmd的originalSql,将v0加入集合Vsystem,v0.name代表节点v0的名称;
2.5.4.2按sqlCmd.sqlSequence顺序遍历当前sessionTransactionSet序列中的所有sqlCmd记录,若当前记录的transactionFlag为“false”,则查找当前记录的originalSql是否已经存在于Vsystem中,若已存在,则定位到该节点vi,且添加一条边(vsqlCmd.sqlSequence-1,vi)至集合Esystem中;若不存在,则新建一个节点vn,vn.name为当前sqlCmd的originalSql,将vn加入集合Vsystem,同时添加一条边(vsqlCmd.sqlSequence-1,vn)至集合Esystem中;
2.5.4.3若当前记录的transactionFlag为“true”,则表示该事务结束;若当前记录的originalSql为“commit”,则添加一条边(vsqlCmd.sqlSequence-1,vcommit)至集合Esystem,若当前记录的originalSql为“rollback”,则添加一条边(vsqlCmd.sqlSequence-1,vrollback)至集合Esystem
作为优选方案,所述步骤3,具体包括如下步骤:
3.1根据实际的事务序列sessionTransactionSet.sessionInfo中的systemName,获取对应业务系统训练的面向业务的事务时序有向图G(Vsystem,Esystem);
3.2遍历当前实际的事务序列sessionTransactionSet中所有实际的sqlCmd记录,获取与训练的面向业务的事务时序有向图G(Vsystem,Esystem)相匹配的路径;
3.2.1获取sqlCmd.sqlSequnce=1的实际的sqlCmd记录,查找Vsystem中入口节点中是否存在当前实际的sqlCmd记录的sqlCmd.originalSql相同的内容;
3.2.2如已存在,则继续匹配当前实际的事务序列sessionTransactionSet中的后续实际的sqlCmd记录,最终在Vsystem中找到各节点相匹配的一条路径;在预处理的输出结果中记录最终命中的图路径;若sqlCmd.prepareFlag为“true”,则保留记录中的data字段数据,直接填充到预处理的输出结果的记录中;sqlCmd.sqlSequence=1的记录的time为事务的开始时间,sqlCmd.transactionFlag=“true”的记录的time为事务的结束时间。
作为优选方案,还包括步骤3.2.3,
步骤3.2.3:如果当前实际的sqlCmd记录的sqlCmd.originalSql在Vsystem中不存在,则在训练的面向业务的事务时序有向图中新增节点并重构事务时序有向图;预处理的输出结果中记录为新增路径。
一种基于时序有向图的SQL交互数据预处理装置,包括如下模块:
第一模块:根据业务系统中所有保留有数据库操作类指令数据的原始SQL交互指令数据进行范式化训练,得到训练的SQL执行指令集合SqlCmdSet,再根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图;
第二模块:获取业务系统生产环境中保留有数据库操作类指令数据的实际的SQL交互指令数据,范式化得到实际的SQL执行指令集合SqlCmdSet,再根据实际的SQL执行指令集合SqlCmdSet获取实际的事务序列集合sessionTransactionSet;
第三模块:根据实际的事务序列集合sessionTransactionSet与训练的面向业务的事务时序有向图相匹配,输出实际的SQL交互指令数据对应的图路径。
有益效果:本发明提供的一种基于事务时序有向图的SQL交互数据预处理方法与装置,对SQL交互数据的挖掘分析,目的是通过发现异常分析攻击者的攻击行为。攻击者的目的是破坏或者获取数据库中的数据,所以对数据库DML\DDL指令的分析是关键。本发明即针对DML\DDL指令对原始的SQL交互数据进行筛选和预处理,能够最大程度保留有效数据,去除无用数据。
由于事务是影响数据库数据的最小操作单元,所以本发明采用基于事务时序有向图作为数据整理模板,将原始数据转换成事务序列,实现了原始杂乱无章数据的有序排列和组织。
同时,基于业务系统中事务操作的有限性,本发明提出构建业务事务时序有向图,面向业务构建了事务时序模板,最大程度提取了原始数据中相同事务操作的重复部分,实现原始数据去重。且本发明采用json格式记录处理结果,支持字段的灵活扩展。
附图说明
图1为本发明方法流程示意图。
图2为业务事务时序有向图示例。
图3为基于业务事务时序有向图的SQL交互指令数据预处理流程图。
具体实施方式
下面结合具体实施例对本发明作更进一步的说明。
如图1所示,一种基于事务时序有向图的SQL交互数据预处理方法与装置,首先针对面向业务获取的业务系统通过JDBC与数据库进行交互的SQL交互指令数据样本进行训练,以会话为单位,对会话内执行的SQL语句进行识别,并按照执行顺序还原事务序列,面向业务将所有的事务序列构建形成事务时序有向图。然后,以业务事务时序有向图为模板,对海量的生产环境原始SQL交互指令数据进行预处理,通过模板匹配只需输出命中哪个模板而无需重复记录模板里的详细数据,由此能够去除重复操作和无用操作记录,支撑后续的恶意事务和异常行为的挖掘分析。
本发明方法的实现方法如下:
1.原始SQL交互指令数据进行范式化训练。
业务系统通过JDBC(Java Database Connectivity,简称JDBC)与数据库进行原始SQL交互指令数据交互,原始SQL交互指令数据包括业务系统发起的请求指令和数据库响应数据。本发明中数据预处理的目的是为了后续针对SQL恶意行为的挖掘分析提供有用、干净、标准化数据,在数据层面只关注业务系统发起的对数据库中业务数据的操作,所以本发明在范式化处理步骤中,仅获取原始SQL交互指令数据中的数据库操作类指令数据,即只获取业务系统通过jdbc中java.sql.Connection.createStatement方法创建sql语句句柄并通过java.sql.Statement接口执行的SQL指令,或者通过java.sql.Connection.prepareStatement创建sql语句句柄并通过java.sql.PrepareStatement接口执行的SQL指令。其中,通过java.sql.Statement接口执行的指令为“直接执行”类型的SQL交互指令数据,通过java.sql.PrepareStatement接口执行的指令为“预编译执行”类型的SQL交互指令数据。本发明对原始SQL交互指令数据的范式化处理步骤分为两步。
第一步,逐条遍历原始SQL交互指令数据,根据交互指令内容进行判断。若属于数据库操作类指令则保留,否则直接丢弃。对保留的原始SQL交互指令数据进行json格式转换,范式化后得到SQL执行指令集合SqlCmdSet。SqlCmdSet中每条数据包括以下字段:会话基础信息、指令执行时间、事务执行指令标识、预编译指令标识、原始SQL语句,预编译指令关联数据集合,输出为json格式;举例如下:
Figure BDA0002732704240000071
其中,sessionInfo表示会话基础信息,包括会话id(sessionID)、会话中源IP、会话中目的IP、会话所属的业务系统名称;
time表示指令执行时间;
transactionFlag表示事务执行指令标识,即SQL交互指令中的SQL语句是否为“commit”或“rollback”,取值为“true”表示是“commit”或“rollback”,取值为“false”表示不是“commit”或“rollback”;
prepareFlag表示预编译指令标识,取值为“true”表示是预编译类型的SQL指令,取值为“false”表示不是预编译类型的SQL指令;
originalSql表示原始SQL语句;
data表示预编译指令关联数据集合,针对“预编译执行”类型SQL交互指令数据的参数的赋值信息,针对“直接执行”类型SQL交互指令数据,此字段为空。
具体方法为:
1.遍历原始SQL交互指令数据,对每条数据,获取SQL执行指令,若SQL执行指令不属于“数据库操作”类型,直接丢弃,继续遍历;否则进行后续分析。
2.若当前处理的SQL执行指令中的sql语句为“commit”或“rollback”,则transactionFlag赋值为“true”,originalSql赋值为SQL执行指令中的sql语句。转到步骤4。
3.若当前处理的SQL执行指令中的sql语句不是“commit”或“rollback”,判断SQL执行指令的执行类型。
3.1若当前处理的SQL执行指令是通过java.sql.Statement接口执行的,则prepareFlag赋值为“false”,data字段为空,originalSql赋值为SQL执行指令中的sql语句。
3.2若当前处理的SQL执行指令是通过java.sql.Connection.prepareStatement创建sql语句句柄时发送的,则prepareFlag赋值为“true”,且originalSql赋值为SQL执行指令中的sql语句。继续遍历后续的原始SQL交互指令数据,获取通过此语句句柄通过java.sql.PrepareStatement接口执行的指令,获取指令中对预编译语句中参数的赋值,赋值给data。
4.填充当前处理的SQL执行指令的会话信息至sessionInfo字段,包括源ip、目的ip和会话id。
5.填充当前处理的SQL执行指令的执行时间至time字段。
第二步,根据范式化记录中的ip信息,关联业务系统基础信息表,获取业务系统名称并补充至记录的systemName字段。
2.创建面向业务的事务时序有向图
事务时序有向图是由事务中SQL执行指令,根据其执行顺序所构成的有向图。本方法中,有向图的节点为事务中的一条SQL执行指令,以SQL执行指令中的sql语句来标识;有向边表示SQL执行指令之间的执行顺序;事务时序图支持选择和循环结构,且根据事务的定义,有向图以事务执行类型的SQL执行指令节点结束,即提交(COMMIT)或回滚(ROLLBACK)执行指令。
业务事务时序有向图是针对一个业务进行所有事务序列抽取,并构建形成的事务时序有向图,可包含多个入口、多条时序路径,包含业务系统所有业务逻辑中对数据库的操作。业务事务时序有向图的示例如附图2所示,其中,v1、v3为入口节点,vcommit、vrollback为结束节点,该业务中存在的事务时序序列包括(v1,v6,vcommit)、(v1,v6,vrollback)、(v1,v6,v2,vcommit)、(v1,v6,v2,vrollback)、(v3,v4,v5,v6,vcommit)、(v3,v4,v5,v6,vrollback)、(v3,v4,v7,vcommit)、(v3,v4,v7,vrollback),其中v3可以重复执行。
业务事务时序有向图创建步骤包括:
第一步,基于范式化后得到SQL执行指令集合SqlCmdSet,根据会话,即sessionInfo.sessionID进行分类,并对每个会话中的SqlCmdSet进行处理,抽取出该会话中的所有事务序列sessionTransactionSet,以json格式表示;举例如下:
Figure BDA0002732704240000091
Figure BDA0002732704240000101
其中,sessionInfo表示会话基础信息,sqlCmd表示此事务序列中的所有SQL执行指令,sqlCmd.sqlSequence表示此条指令在事务序列中的执行顺序序号。
具体方法为:
1.按照sessionID遍历SqlCmdSet;
2.获取当前sessionID的所有SqlCmdSet,根据time进行升序排序;
3.对完成排序的SqlCmdSet进行遍历,抽取事务序列sessionTransactionSet;
3.1判断当前SqlCmdSet.transactionFlag是否为“true”。若否,则继续遍历;
3.2若是,则从当前遍历序列中将当前SqlCmdSet以及之前所有的SqlCmdSet抽取出来,形成一个sessionTransactionSet,并且按照顺序填充sqlCmd记录,其中sqlCmd.sqlSequence按照顺序从1开始赋值,sqlCmd.time、sqlCmd.transactionFlag、sqlCmd.prepareFlag、sqlCmd.originalSql为原SqlCmdSet中相同字段值;
4.根据此序列中SqlCmdSet中的sessionInfo填充当前sessionTransactionSet的sqlCmd.sessionInfo。
第二步,针对上一步获得的事务序列sessionTransactionSet,面向业务构建事务序列有向图systemTransactionGraph(V,E),V为SQL执行指令节点集合,以SQL执行指令的sql语句来表示;E为有向边集合,以(vn,vm)表示,含义为节点vn指向节点vm
具体方法为:
1.创建空图G(Vsystem,Esystem);
2.创建终结节点vcommit和vrollback,加入集合Vsystem
3.在第一步得到的所有sessionTransactionSet中,根据sessionInfo.systemName字段获取此业务的所有事务序列;
4.遍历所有事务序列sessionTransactionSet,填充Vsystem,Esystem
4.1将sessionTransactionSet.sqlCmd中sqlSequence为1的sqlCmd记录作为起点v0,v0.name为当前sqlCmd的originalSql,将v0加入集合Vsystem,v0.name代表节点v0的名称;
4.2按sqlCmd.sqlSequence顺序遍历当前sessionTransactionSet序列中的所有sqlCmd记录,若当前记录的transactionFlag为“false”,则查找当前记录的originalSql是否已经存在于Vsystem中,若已存在,则定位到该节点vi,且添加一条边(vsqlCmd.sqlSequence-1,vi)至集合Esystem中;若不存在,则新建一个节点vn,vn.name为当前sqlCmd的originalSql,将vn加入集合Vsystem,同时添加一条边(vsqlCmd.sqlSequence-1,vn)至集合Esystem中;
4.3若当前记录的transactionFlag为“true”,则表示该事务结束。若当前记录的originalSql为“commit”,则添加一条边(vsqlCmd.sqlSequence-1,vcommit)至集合Esystem,若当前记录的originalSql为“rollback”,则添加一条边(vsqlCmd.sqlSequence-1,vrollback)至集合Esystem
3.基于业务事务时序有向图进行数据预处理
首先需要对生产环境获取的实际的SQL交互指令数据按照本发明中的原始SQL交互指令数据范式化处理步骤进行处理,获得实际的SqlCmdSet。然后按照本发明中的创建事务时序有向图方法第一步的步骤进行处理,获得实际的事务序列集合sessionTransactionSet。然后根据该事务所属业务系统获取训练的事务序列有向图,基于该有向图进行生产环境实际的SQL交互指令数据的预处理。处理流程图如附图3所示。
预处理过程为:
1.生产环境获取的实际的SQL交互指令数据,进行范式化处理,获得实际的SqlCmdSet,并且补充sessionInfo.systemName信息;
2.对实际的SqlCmdSet进行事务序列抽取,获得实际的事务序列sessionTransactionSet;
3.根据实际的事务序列sessionTransactionSet.sessionInfo中的systemName,获取对应业务系统训练的面向业务的事务时序有向图G(Vsystem,Esystem)。
4.遍历当前实际的事务序列sessionTransactionSet中所有实际的sqlCmd记录,获取与训练的面向业务的事务时序有向图G(Vsystem,Esystem)相匹配的路径。
4.1获取sqlCmd.sqlSequnce=1的实际的sqlCmd记录,查找Vsystem中入口节点中是否存在当前实际的sqlCmd记录的sqlCmd.originalSql相同的内容;
4.2.如已存在,则继续匹配当前实际的事务序列sessionTransactionSet中的后续实际的sqlCmd记录,最终在Vsystem中找到各节点相匹配的一条路径,即为命中的SQL执行指令序列,在预处理的输出结果中记录最终命中的图路径。且针对每条实际的sqlCmd记录,若sqlCmd.prepareFlag为“true”,则保留记录中的data字段数据,直接填充到输出的记录中。在预处理输出结果中,记录该事务序列实际的sqlCmd记录中sqlSequence=1的记录的time为事务的开始时间,记录该事务序列sqlCmd记录中transactionFlag=“true”的记录的time为事务的结束时间。
4.3在匹配过程中,如果当前实际的sqlCmd记录的sqlCmd.originalSql在Vsystem中不存在,则按照本发明中的事务时序有向图构建过程完成训练的面向业务的事务时序有向图节点新增和事务时序图的重构。且在预处理输出结果中记录此序列为新增路径。
预处理输出结果表示为
Figure BDA0002732704240000131
其中,transactionTiming为通过业务事务时序有向图匹配而命中的路径;addFlag表示此序列是否为新增序列;seseionInfo表示事务的会话信息,包括了关联的业务系统名称和ip等;beginTime和endTime表示事务开始时间和结束时间;dataSet表示事务时序中涉及“预编译执行”类型SQL执行指令的参数赋值数据信息,通过nodeSeq与transactionTiming中的节点对应。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:包括如下步骤:
步骤1:根据业务系统中所有保留有数据库操作类指令数据的原始SQL交互指令数据进行范式化训练,得到训练的SQL执行指令集合SqlCmdSet,再根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图;
步骤2:获取业务系统生产环境中保留有数据库操作类指令数据的实际的SQL交互指令数据,范式化得到实际的SQL执行指令集合SqlCmdSet,再根据实际的SQL执行指令集合SqlCmdSet获取实际的事务序列集合sessionTransactionSet;
步骤3:根据实际的事务序列集合sessionTransactionSet与训练的面向业务的事务时序有向图相匹配,输出实际的SQL交互指令数据对应的图路径。
2.根据权利要求1所述的一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:所述范式化训练,包括如下步骤:
1.1若当前处理的SQL交互指令数据中SQL执行指令的sql语句为“commit”或“rollback”,则transactionFlag赋值为“true”,originalSql赋值为SQL交互指令数据中的sql语句;转到步骤1.3;
1.2若当前处理的SQL交互指令数据中SQL执行指令的sql语句不是“commit”或“rollback”,判断SQL交互指令数据的执行类型;
1.2.1若当前处理的SQL执行指令是通过java.sql.Statement接口执行的,则prepareFlag赋值为“false”,data字段为空,originalSql赋值为SQL交互指令数据中的sql语句;
1.2.2若当前处理的SQL执行指令是通过java.sql.Connection.prepareStatement创建sql语句句柄时发送的,则prepareFlag赋值为“true”,且originalSql赋值为SQL交互指令数据中的sql语句;继续遍历后续的原始SQL交互指令数据,获取通过此语句句柄通过java.sql.PrepareStatement接口执行的指令,获取指令中对预编译语句中参数的赋值,赋值给data;
1.3填充当前处理的SQL执行指令的会话信息至sessionInfo字段,包括源ip、目的ip和会话id;
1.4填充当前处理的SQL执行指令的执行时间至time字段;
1.5根据记录中的源ip、目的ip,关联业务系统基础信息表,获取业务系统名称并补充至systemName字段;
其中,sessionInfo表示会话基础信息,包括会话id、会话中源IP、会话中目的IP、会话所属的业务系统名称;
time表示指令执行时间;
transactionFlag表示事务执行指令标识,即SQL交互指令中的SQL语句是否为“commit”或“rollback”,取值为“true”表示是“commit”或“rollback”,取值为“false”表示不是“commit”或“rollback”;
prepareFlag表示预编译指令标识,取值为“true”表示是预编译类型的SQL指令,取值为“false”表示不是预编译类型的SQL指令;
originalSql表示原始SQL语句;
data表示预编译指令关联数据集合,针对“预编译执行”类型SQL交互指令数据的参数的赋值信息,针对“直接执行”类型SQL交互指令数据,此字段为空。
3.根据权利要求2所述的一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:所述根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图,包括如下步骤:
2.1按照sessionID遍历SqlCmdSet;
2.2获取当前sessionID的所有SqlCmdSet,根据time进行排序;
2.3对完成排序的SqlCmdSet进行遍历,抽取事务序列sessionTransactionSet;
2.3.1判断当前SqlCmdSet.transactionFlag是否为“true”;若否,则继续遍历;
2.3.2若是,则从当前遍历序列中将当前SqlCmdSet以及之前所有的SqlCmdSet抽取出来,形成一个事务序列sessionTransactionSet,并且按照顺序填充sqlCmd字段,其中sqlCmd.sqlSequence按照顺序从1开始赋值,sqlCmd.time、sqlCmd.transactionFlag、sqlCmd.prepareFlag、sqlCmd.originalSql为原SqlCmdSet中相同字段值;其中,sqlCmd表示此事务序列sessionTransactionSet中的所有SQL执行指令,sqlCmd.sqlSequence表示此条指令在事务序列中的执行顺序序号;
2.4根据排序序列中SqlCmdSet中的sessionInfo填充当前sessionTransactionSet的sqlCmd.sessionInfo;
2.5根据事务序列sessionTransactionSet,构建训练的面向业务的事务序列有向图systemTransactionGraph(V,E),V为SQL执行指令节点集合,以SQL执行指令的sql语句来表示;E为有向边集合,以(vn,vm)表示,含义为节点vn指向节点vm,m、n分别表示节点的序号。
4.根据权利要求3所述的一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:所述步骤2.5,包括如下步骤:
2.5.1创建空图G(Vsystem ,Esystem);
2.5.2创建终结节点vcommit和vrollback,加入集合Vsystem
2.5.3根据所有sessionTransactionSet中sessionInfo.systemName字段获取此业务的所有事务序列;
2.5.4遍历所有事务序列sessionTransactionSet,填充Vsystem ,Esystem
2.5.4.1将sessionTransactionSet.sqlCmd中sqlSequence为1的sqlCmd记录作为起点v0,v0.name为当前sqlCmd的originalSql,将v0加入集合Vsystem,v0.name代表节点v0的名称;
2.5.4.2按sqlCmd.sqlSequence顺序遍历当前sessionTransactionSet序列中的所有sqlCmd记录,若当前记录的transactionFlag为“false”,则查找当前记录的originalSql是否已经存在于Vsystem中,若已存在,则定位到该节点vi,且添加一条边(vsqlCmd.sqlSequence-1,vi)至集合Esystem中;若不存在,则新建一个节点vn,vn.name为当前sqlCmd的originalSql,将vn加入集合Vsystem ,同时添加一条边(vsqlCmd.sqlSequence-1,vn)至集合Esystem中;
2.5.4.3若当前记录的transactionFlag为“true”,则表示该事务结束;若当前记录的originalSql为“commit”,则添加一条边(vsqlCmd.sqlSequence-1,vcommit)至集合Esystem,若当前记录的originalSql为“rollback”,则添加一条边(vsqlCmd.sqlSequence-1,vrollback)至集合Esystem
5.根据权利要求4所述的一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:所述步骤3,具体包括如下步骤:
3.1根据实际的事务序列sessionTransactionSet.sessionInfo中的systemName,获取对应业务系统训练的面向业务的事务时序有向图G(Vsystem ,Esystem);
3.2遍历当前实际的事务序列sessionTransactionSet中所有实际的sqlCmd记录,获取与训练的面向业务的事务时序有向图G(Vsystem ,Esystem)相匹配的路径;
3.2.1获取sqlCmd.sqlSequnce=1的实际的sqlCmd记录,查找Vsystem中入口节点中是否存在当前实际的sqlCmd记录的sqlCmd.originalSql相同的内容;
3.2.2如已存在,则继续匹配当前实际的事务序列sessionTransactionSet中的后续实际的sqlCmd记录,最终在Vsystem中找到各节点相匹配的一条路径;在预处理的输出结果中记录最终命中的图路径;若sqlCmd.prepareFlag为“true”,则保留记录中的data字段数据,直接填充到预处理的输出结果的记录中;sqlCmd.sqlSequence=1的记录的time为事务的开始时间,sqlCmd.transactionFlag=“true”的记录的time为事务的结束时间。
6.根据权利要求5所述的一种基于事务时序有向图的SQL交互数据预处理方法,其特征在于:还包括步骤3.2.3,
步骤3.2.3:如果当前实际的sqlCmd记录的sqlCmd.originalSql在Vsystem中不存在,则在训练的面向业务的事务时序有向图中新增节点并重构事务时序有向图;预处理的输出结果中记录为新增路径。
7.一种基于业务事务时序有向图的SQL交互数据预处理装置,其特征在于:包括如下模块:
第一模块:根据业务系统中所有保留有数据库操作类指令数据的原始SQL交互指令数据进行范式化训练,得到训练的SQL执行指令集合SqlCmdSet,再根据训练的SQL执行指令集合SqlCmdSet构建训练的面向业务的事务时序有向图;
第二模块:获取业务系统生产环境中保留有数据库操作类指令数据的实际的SQL交互指令数据,范式化得到实际的SQL执行指令集合SqlCmdSet,再根据实际的SQL执行指令集合SqlCmdSet获取实际的事务序列集合sessionTransactionSet;
第三模块:根据实际的事务序列集合sessionTransactionSet与训练的面向业务的事务时序有向图相匹配,输出实际的SQL交互指令数据对应的图路径。
8.根据权利要求7所述的一种基于事务时序有向图的SQL交互数据预处理模块,其特征在于:所述第一模块,具体处理步骤如下:
1.1若当前处理的SQL交互指令数据中SQL执行指令的sql语句为“commit”或“rollback”,则transactionFlag赋值为“true”,originalSql赋值为SQL交互指令数据中的sql语句;转到步骤1.3;
1.2若当前处理的SQL交互指令数据中SQL执行指令的sql语句不是“commit”或“rollback”,判断SQL交互指令数据的执行类型;
1.2.1若当前处理的SQL执行指令是通过java.sql.Statement接口执行的,则prepareFlag赋值为“false”,data字段为空,originalSql赋值为SQL交互指令数据中的sql语句;
1.2.2若当前处理的SQL执行指令是通过java.sql.Connection.prepareStatement创建sql语句句柄时发送的,则prepareFlag赋值为“true”,且originalSql赋值为SQL交互指令数据中的sql语句;继续遍历后续的原始SQL交互指令数据,获取通过此语句句柄通过java.sql.PrepareStatement接口执行的指令,获取指令中对预编译语句中参数的赋值,赋值给data;
1.3填充当前处理的SQL执行指令的会话信息至sessionInfo字段,包括源ip、目的ip和会话id;
1.4填充当前处理的SQL执行指令的执行时间至time字段;
1.5根据记录中的源ip、目的ip,关联业务系统基础信息表,获取业务系统名称并补充至systemName字段;
其中,sessionInfo表示会话基础信息,包括会话id、会话中源IP、会话中目的IP、会话所属的业务系统名称;
time表示指令执行时间;
transactionFlag表示事务执行指令标识,即SQL交互指令中的SQL语句是否为“commit”或“rollback”,取值为“true”表示是“commit”或“rollback”,取值为“false”表示不是“commit”或“rollback”;
prepareFlag表示预编译指令标识,取值为“true”表示是预编译类型的SQL指令,取值为“false”表示不是预编译类型的SQL指令;
originalSql表示原始SQL语句;
data表示预编译指令关联数据集合,针对“预编译执行”类型SQL交互指令数据的参数的赋值信息,针对“直接执行”类型SQL交互指令数据,此字段为空;
2.1按照sessionID遍历SqlCmdSet;
2.2获取当前sessionID的所有SqlCmdSet,根据time进行排序;
2.3对完成排序的SqlCmdSet进行遍历,抽取事务序列sessionTransactionSet;
2.3.1判断当前SqlCmdSet.transactionFlag是否为“true”;若否,则继续遍历;
2.3.2若是,则从当前遍历序列中将当前SqlCmdSet以及之前所有的SqlCmdSet抽取出来,形成一个事务序列sessionTransactionSet,并且按照顺序填充sqlCmd字段,其中sqlCmd.sqlSequence按照顺序从1开始赋值,sqlCmd.time、sqlCmd.transactionFlag、sqlCmd.prepareFlag、sqlCmd.originalSql为原SqlCmdSet中相同字段值;其中,sqlCmd表示此事务序列sessionTransactionSet中的所有SQL执行指令,sqlCmd.sqlSequence表示此条指令在事务序列中的执行顺序序号;
2.4根据排序序列中SqlCmdSet中的sessionInfo填充当前sessionTransactionSet的sqlCmd.sessionInfo;
2.5根据事务序列sessionTransactionSet,构建训练的面向业务的事务序列有向图systemTransactionGraph(V,E),V为SQL执行指令节点集合,以SQL执行指令的sql语句来表示;E为有向边集合,以(vn,vm)表示,含义为节点vn指向节点vm,m、n分别表示节点的序号。
9.根据权利要求8所述的一种基于事务时序有向图的SQL交互数据预处理模块,其特征在于:所述步骤2.5,包括如下步骤:
2.5.1创建空图G(Vsystem ,Esystem);
2.5.2创建终结节点vcommit和vrollback,加入集合Vsystem
2.5.3根据所有sessionTransactionSet中sessionInfo.systemName字段获取此业务的所有事务序列;
2.5.4遍历所有事务序列sessionTransactionSet,填充Vsystem ,Esystem
2.5.4.1将sessionTransactionSet.sqlCmd中sqlSequence为1的sqlCmd记录作为起点v0,v0.name为当前sqlCmd的originalSql,将v0加入集合Vsystem,v0.name代表节点v0的名称;
2.5.4.2按sqlCmd.sqlSequence顺序遍历当前sessionTransactionSet序列中的所有sqlCmd记录,若当前记录的transactionFlag为“false”,则查找当前记录的originalSql是否已经存在于Vsystem中,若已存在,则定位到该节点vi,且添加一条边(vsqlCmd.sqlSequence-1,vi)至集合Esystem中;若不存在,则新建一个节点vn,vn.name为当前sqlCmd的originalSql,将vn加入集合Vsystem ,同时添加一条边(vsqlCmd.sqlSequence-1,vn)至集合Esystem中;
2.5.4.3若当前记录的transactionFlag为“true”,则表示该事务结束;若当前记录的originalSql为“commit”,则添加一条边(vsqlCmd.sqlSequence-1,vcommit)至集合Esystem,若当前记录的originalSql为“rollback”,则添加一条边(vsqlCmd.sqlSequence-1,vrollback)至集合Esystem
10.根据权利要求9所述的一种基于事务时序有向图的SQL交互数据预处理模块,其特征在于:所述第三模块,具体处理步骤如下:
3.1根据实际的事务序列sessionTransactionSet.sessionInfo中的systemName,获取对应业务系统训练的面向业务的事务时序有向图G(Vsystem ,Esystem);
3.2遍历当前实际的事务序列sessionTransactionSet中所有实际的sqlCmd记录,获取与训练的面向业务的事务时序有向图G(Vsystem ,Esystem)相匹配的路径;
3.2.1获取sqlCmd.sqlSequnce=1的实际的sqlCmd记录,查找Vsystem中入口节点中是否存在当前实际的sqlCmd记录的sqlCmd.originalSql相同的内容;
3.2.2如已存在,则继续匹配当前实际的事务序列sessionTransactionSet中的后续实际的sqlCmd记录,最终在Vsystem中找到各节点相匹配的一条路径;在预处理的输出结果中记录最终命中的图路径;若sqlCmd.prepareFlag为“true”,则保留记录中的data字段数据,直接填充到预处理的输出结果的记录中;sqlCmd.sqlSequence=1的记录的time为事务的开始时间,sqlCmd.transactionFlag=“true”的记录的time为事务的结束时间;
步骤3.2.3:如果当前实际的sqlCmd记录的sqlCmd.originalSql在Vsystem中不存在,则在训练的面向业务的事务时序有向图中新增节点并重构事务时序有向图;预处理的输出结果中记录为新增路径。
CN202011128299.0A 2020-10-20 2020-10-20 一种基于事务时序有向图的sql交互数据预处理方法与装置 Active CN112380195B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011128299.0A CN112380195B (zh) 2020-10-20 2020-10-20 一种基于事务时序有向图的sql交互数据预处理方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011128299.0A CN112380195B (zh) 2020-10-20 2020-10-20 一种基于事务时序有向图的sql交互数据预处理方法与装置

Publications (2)

Publication Number Publication Date
CN112380195A true CN112380195A (zh) 2021-02-19
CN112380195B CN112380195B (zh) 2022-10-04

Family

ID=74580374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011128299.0A Active CN112380195B (zh) 2020-10-20 2020-10-20 一种基于事务时序有向图的sql交互数据预处理方法与装置

Country Status (1)

Country Link
CN (1) CN112380195B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113673605A (zh) * 2021-08-24 2021-11-19 上海海洋大学 一种海水溶解氧评估方法
CN114330998A (zh) * 2021-11-25 2022-04-12 上海欣兆阳信息科技有限公司 应用于大数据营销领域的通用数据模型及其构建方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897123A (zh) * 2015-12-21 2017-06-27 阿里巴巴集团控股有限公司 数据库操作方法及装置
CN111061749A (zh) * 2019-12-12 2020-04-24 山东大学 基于事务顺序分析的数据库事务并发重做方法和装置
CN111221869A (zh) * 2018-11-27 2020-06-02 北京京东振世信息技术有限公司 一种追踪数据库事务时间和分析数据库锁的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897123A (zh) * 2015-12-21 2017-06-27 阿里巴巴集团控股有限公司 数据库操作方法及装置
CN111221869A (zh) * 2018-11-27 2020-06-02 北京京东振世信息技术有限公司 一种追踪数据库事务时间和分析数据库锁的方法和装置
CN111061749A (zh) * 2019-12-12 2020-04-24 山东大学 基于事务顺序分析的数据库事务并发重做方法和装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113673605A (zh) * 2021-08-24 2021-11-19 上海海洋大学 一种海水溶解氧评估方法
CN113673605B (zh) * 2021-08-24 2024-02-06 上海海洋大学 一种海水溶解氧评估方法
CN114330998A (zh) * 2021-11-25 2022-04-12 上海欣兆阳信息科技有限公司 应用于大数据营销领域的通用数据模型及其构建方法

Also Published As

Publication number Publication date
CN112380195B (zh) 2022-10-04

Similar Documents

Publication Publication Date Title
CN106844507B (zh) 一种数据批处理的方法及设备
US20180129579A1 (en) Systems and Methods with a Realtime Log Analysis Framework
CN112380195B (zh) 一种基于事务时序有向图的sql交互数据预处理方法与装置
CN106790718A (zh) 服务调用链路分析方法及系统
CN111897863B (zh) 多源异构数据融合汇聚方法
CN105677615B (zh) 一种基于weka接口的分布式机器学习方法
CN102402615B (zh) 一种基于结构化查询语言语句的源信息追踪方法
CN106126601A (zh) 一种社保大数据分布式预处理方法及系统
CN109144734A (zh) 一种容器资源配额分配方法和装置
Pinzger et al. Pattern-supported architecture recovery
CN104392171B (zh) 一种基于数据关联的自动内存证据分析方法
CN109408591B (zh) 支持sql驱动的ai与特征工程的决策型分布式数据库系统
CN113918793A (zh) 一种多源科创资源数据采集方法
CN107579851A (zh) 确定资源编排模板的执行顺序的方法和装置
WO2019179408A1 (zh) 机器学习模型的构建
CN107291770A (zh) 一种分布式系统中海量数据的查询方法及装置
CN114443780A (zh) 数据处理方法、装置、设备和存储介质
CN111639068A (zh) 一种基于多系统的公共数据池生成方法、装置、设备、和可读存储介质
CN111026709A (zh) 基于集群访问的数据处理方法及装置
CN114817243A (zh) 数据库联合索引的建立方法、装置、设备及存储介质
CN112765014A (zh) 一种用于多用户同时操作的自动测试系统及工作方法
CN107862867A (zh) 基于大数据进行初次入城车辆分析的方法及系统
CN106257447A (zh) 云存储服务器的视频存储及检索方法、视频云存储系统
CN111581299A (zh) 基于大数据的多源数据仓库的库间数据转换系统及方法
CN111221967A (zh) 一种基于区块链架构的语言数据分类存储系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant