本申请涉及计算机
技术领域:
,特别涉及一种数据库表关联关系确定方法及装置。
背景技术:
:随着互联网应用的广泛普及,海量数据的存储和访问已经成为系统设计的瓶颈问题。传统的垂直扩展(提升硬件设备处理能力)的解决方案存在投入昂贵、无法弹性扩展的局限,已不能满足业务快速发展需要。目前业界通用措施是采用数据库分拆(分库、分表)的策略,将数据从单节点数据库分为多个数据库节点。数据库分拆(分库、分表)一般就是按照某种特定条件,将放在同一数据库的数据分散到多个数据库。目前业界主要有两种方式:一是垂直分拆:按照业务功能,将不同的表分散到不同的数据库,即分库;二是水平分拆:将同一表的数据按照某种规则分散到不同的数据库,即分表。但在实施分库、分表时,都面临如下问题及挑战:1、应用端如何方便的从数据库中获取数据,不能因为数据拆分导致应用端存取数据错误或者异常复杂;2、应用实施分库、分表,如何对应用端程序影响最小;3、数据库节点扩容时,如何避免或者减少对应用端的影响;对于数据库分拆(分库、分表)面临的问题,良好的设计才是解决问题的关键。在实施数据库分拆(分库、分表)前,必须充分了解系统业务逻辑和数据库SCHEMA,绘制数据库ER图,结合业务逻辑和表间关系,将业务、表间关联关系密切的表划分到一起。当所有表划分完毕后才能最终确定数据库分库分表方案。随着系统规模逐渐增大、系统维护使用年限逐渐增长,文档设计与编码实现之间不可避免地会存在脱节、遗漏或描述不一致的情况。由于缺乏完整清晰的文档,维护人员难以直接理解数据库设计,无法准确的分析或界定数据库表之间的关联关系,系统业务逻辑和表间关系的分析梳理工作也将变得异常复杂,且效率低下。技术实现要素:本申请提供一种数据库关联关系确定方法及装置,用于解决现有技术中,业务逻辑和表间关联关系分析过程复杂且效率低,数据库表之间关联关系界定精度不高等问题。为了解决上述技术问题,本申请的一技术方案为提供一种数据库表关联关系确定方法,包括:剔除数据库各源码文件中的注释信息;对剔除注释信息后的各源码文件进行函数切分,根据函数切分结果及各源码文件分析得到函数与函数之间的关联关系;对剔除注释信息后的各源码文件进行语句切分,根据语句切分结果、函数切分结果及各源码文件分析得到函数、表及MDL操作方式的关联关系;根据函数与函数之间的关联关系,函数、表及DML操作方式的关联关系,分析得到表与表之间关联关系及其密切程度。本申请另一技术方案为提供一种数据库表关联关系确定装置,包括:注释过滤模块,用于剔除数据库各源码文件中的注释信息;函数切分模块,用于对剔除注释信息后的各源码文件进行函数切分;函数分析模块,用于根据函数切分结果及各源码文件分析得到函数与函数之间的关联关系;语句切分模块,用于对剔除注释信息后的各源码文件进行语句切分;语句分析模块,用于根据语句切分结果、函数切分结果及各源码文件分析得到函数、表及MDL操作方式的关联关系;表与表关联关系分析模块,用于根据函数与函数之间的关联关系,函数、表及DML操作方式的关联关系,分析得到表与表之间关联关系及其密切程度。本申请通过对源码按照函数、语句级别的粒度进行切分,加以合理的数据库表关联关系分析机制,并引入了注释剔除模式,能够减少数据库表关联关系分析的人力投入,降低分析过程复杂度,准确界定数据库表之间的关联关系,为后续系统架构调整及优化提供基础。附图说明为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例的数据库表关联关系确定方法的流程图;图2为本申请实施例的剔除数据库各源码文件中的注释信息的流程图;图3为本申请实施例的对剔除注释信息后的各源码文件进行函数切分的流程图;图4为本申请实施例的函数与函数之间关联关系分析过程流程图;图5为本申请实施例的对剔除注释信息后的各源码文件进行语句切分的流程图;图6为本申请实施例的函数、表及操作方式的关联关系分析过程流程图;图7为本申请实施例的表与表之间关联关系分析过程流程图;图8为本申请实施例的数据库表关联关系确定装置结构示意图;图9为本申请实施例的注释过滤模块结构示意图;图10为本申请实施例的函数切分模块结构示意图;图11为本申请实施例的函数分析模块结构示意图;图12为本申请实施例的语句切分模块结构示意图;图13为本申请实施例的语句分析模块结构示意图。具体实施方式为了使本申请的技术特点及效果更加明显,下面结合附图对本申请的技术方案做进一步说明,本申请也可有其他不同的具体实例来加以说明或实施,任何本领域技术人员在权利要求范围内做的等同变换均属于本申请的保护范畴。在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“例如”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本申请的实施,其中的步骤顺序不作限定,可根据需要作适当调整。如图1所示,图1为本申请实施例的数据库表关联关系确定方法流程图。本实施例能够通过对各源码文件剔除注释信息后进行函数切分及语句切分,根据切分结果能够精确地分析界定出表之间的关联关系,具有分析成本低、效率高的特点。具体的,数据库表关联关系确定方法包括:步骤101:剔除数据库各源码文件中的注释信息。数据库中包括多个源码文件,分别用于实现不用的业务功能。步骤102:对剔除注释信息后的各源码文件进行函数切分,根据函数切分结果及各源码文件分析得到函数与函数之间的关联关系。本申请中,通过对各源码文件进行函数切分,能够对函数进行定位(确定函数代码的开始行数及结束行数等)。函数与函数之间的关联关系指的是:源码文件中定义的函数(如函数A)中调用了其他函数(如函数B),则认为函数A与函数B相关联。一具体实施例得到的函数与函数之间的调用关系如表三,具体实施时,可以数据列表的形式进行存储。步骤103:对剔除注释信息后的各源码文件进行语句切分,根据语句切分结果、函数切分结果及各源码文件分析得到函数、表及DML(Datamanipulationlanguage,数据操作语言)操作方式的关联关系。本申请中,通过对各源码文件进行语句切分,能够对语句进行定位(确定每个语句代码的开始行数、结束行数及语句内容等)。函数、表及操作方式之间的关联关系指的是:函数中对表存在DML操作(插入、删除、更新),则认为函数与表通过DML相关联。一具体实施例得到的函数、表与操作方式之间的关系如表四,具体实施时,可以数据列表的形式进行存储。步骤104:根据函数与函数之间的关联关系,函数、表及操作方式的关联关系,分析得到表与表之间的关联关系及其密切程度。表与表之间的关联关系存在两种:第一种指的是对同一函数中涉及的表存在DML操作,则该函数中的各表之间相关联;第二种指的是存在两个相互调用关系的函数中,若两个函数中分别对表存在DML操作,则两个函数中的各表之间相关联。本实施例在具体实施时,各种关联关系可以以表格的形式进行显示,以便能够在分析过程中第一时间发现数据库设计问题,并进行有针对性的数据库方案调整优化。本申请一具体实施例中,如图2所示,上述步骤101中剔除数据库各源码文件中的注释信息的过程包括:步骤201:确定源码的注释格式,根据注释格式提取注释在各源码文件中的开始行数及结束行数。本领域技术人员可根据编码标准确定注释格式,例如注释格式为/*注释内容*/,实施时,根据注释格式分别确定注释信息起始字符(如“/*”)的行数及结束字符(如“*/”)的行数。步骤202:将同一注释的开始行数及结束行数之间的信息剔除。实施时,根据注释的开始行数匹配相邻的结束行数,注释的开始行数及匹配到的结束行数之间的内容为注释信息。需要说明的是,同一文件中可能会存在零到多段注释,需将所有匹配到的注释信息进行剔除。本申请一具体实施例中,如图3所示,上述步骤102中对剔除注释信息后的各源码文件进行函数切分的过程包括:步骤301:根据关键字提取各源码文件中的函数名称,关键字如为FUNCTION,可根据函数定义规则确定。步骤302:根据函数名称提取函数在源码文件中的开始行数及结束行数,根据函数在源码中的开始行数及结束行数对剔除注释信息后的源码文件进行切分得到函数切分结果。具体实施时,可根据函数格式确定函数的开始行数及结束行数,此外,还可先确定函数的开始行数,接着对函数的开始行数进行升序排列,将下一函数的开始行数做减一处理得到上一函数的结束行数。以一源码文件为例,经过步骤302的切分后得到的切分结果如表一。表一:本申请一具体实施例中,如图4所示,上述步骤102中根据函数切分结果及各源码文件分析得到函数与函数之间的关联关系的过程包括:步骤401:根据源码文件的文件名在各源码文件中进行遍历,确定源码文件之间的调用关系。通过该步骤能够防止因源码文件中的函数名相同而导致确定的函数之间关系不准确的问题。步骤402:在调用源码文件中,遍历被调用源码文件中的函数名,确定代码行数。例如,源码文件1调用了源码文件2,源码文件1切分得到了函数A、函数B及函数C,源码文件2切分得到了函数D、函数E及函数F,则源码文件1为调用源码文件,源码文件2为被调用源码文件,在源码文件1中分别遍历源码文件2中的函数D、函数E及函数F的函数名,确定函数名出现的代码行数。步骤403:根据代码行数在调用源码文件的函数切分结果中进行检索,确定代码行数属于哪个函数,从而确定函数与函数的调用关系。继续步骤402中的示例,如函数D在源码文件1中出现的代码行数为60,该代码行数属于函数B(函数B在源码文件1中的行数为40~100),则函数B与函数D之间存在调用关系,由函数B调用函数D。本申请一具体实施例中,如图5所示,上述步骤103中对剔除注释信息后的各源码文件进行语句切分的过程包括:步骤501:确定语句结束符格式,根据语句结束符格式在各源码文件中提取包含语句结束符格式的行数得到语句的结束行数;通常语句结束符为“;”,具体可根据编程规则确定。步骤502:对于每一源码文件,将语句的结束行数进行升序排列,对上一语句结束行数作加一处理得到下一语句的开始行数。步骤503:根据语句的开始行数及结束行数对剔除注释信息后的源码文件进行切分得到语句切分结果。以一源码文件为例,经过步骤503的切分后得到的语句切分结果如表二。表二:本申请一具体实施例中,如图6所示,上述步骤103中根据语句切分结果、函数切分结果及各源码文件分析得到函数、表及DML操作方式的关联关系进一步包括:步骤601:根据表清单在各源码文件中进行遍历,确定文件与表之间的调用关系。具体实施时,根据表的名称进行遍历。如源码文件1中出现了表一、表二及表三的名称,则源码文件1调用了表一、表二及表三。步骤602:根据文件与表之间的调用关系确定表所在源码文件的代码行数。步骤603:从语句切分结果中查找表所在源码文件的代码行数对应的语句,根据DML操作方式关键字确定查找到的语句的DML操作方式。具体的,DML操作方式包括:增加、删除及更改,对应的关键字为INSERT、DELECT及UPDATE。步骤604:根据函数切分结果确定表所在源码文件的代码行数属于哪个函数。步骤605:将步骤602至步骤604确定的函数、表及操作方式关联到一起。本申请一具体实施例中,如图7所示,上述步骤104根据函数与函数之间的关联关系,函数、表及DML操作方式的关联关系,分析得到表与表之间关联关系及其密切程度进一步包括:步骤701:利用如下规则,根据函数与函数之间的关联关系,函数、表及DML操作方式之间的关联关系确定表与表之间的关联关系:若同一函数同时对多个表存在DML操作方式,则同一函数中存在DML操作方式的各表之间存在关联关系,若函数与函数之间存在调用关系,则两个函数中存在DML操作方式的表之间存在关联关系。步骤702:表与表之间每确定一次关联关系,则做加一计算,根据计算结果确定表与表之间的密切程度。计算结果值越大,说明表与表之间的密切程度越高。为了更清楚说明本申请技术方案,下面以一具体实施例进行说明:假设数据库中存在表A、B、C及D,包括两个源码文件,源码文件1定义了函数P1及P3,源码文件2定义了P2及P4,源码文件1与源码文件2相互调用。其中,函数P1对表A进行插入操作(DML操作方式之一),对表B进行查询操作,调用了函数P2;函数P2对表A进行更新操作(DML操作方式之一),对表C进行了删除操作(DML操作方式之一),调用了函数P3;函数P3对表B进行更新操作(DML操作方式之一),对表D进行查询操作;函数P4对表D进行更新操作(DML操作方式之一)。通过之前实施例可以得到函数与函数之间的调用关系如表三,函数、表及DML操作方式之间的关系如表四:表三:调用函数被调函数P1P2P2P3P3无P4无P5无表四:函数表操作方式P1A插入P2A更新P2C删除P3B更新P4D更新通过步骤701可以得到表与表之间的关联关系如表五:表五:表表ABACBC通过步骤702可以得到表与表之间的密切程度如表六:表六:表表权值AB1AC2BC1权值越大,表之间的密切程度越大,即关联关系越强;权值越小,表之间的密切程度越小,即关联关系越弱。本申请通过对源码按照函数、语句级别的粒度进行切分,加以合理的数据库表关联关系分析机制,并引入了注释剔除模式,能够减少数据库表关联关系分析的人力投入,降低分析过程复杂度,准确界定数据库表之间的关联关系,为后续系统架构调整及优化提供基础。基于同一发明构思,本申请实施例中还提供了一种数据库表关联关系确定装置,如下面的实施例所述。由于该装置解决问题的原理与方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。如图8所示,图8为本申请实施例的数据库表关联关系确定装置结构图,该装置可以通过逻辑电路实现运行于计算机或智能终端,例如手机、平板电脑等设备中,或者以功能模块的方式由软件实现各部件的功能,运行于计算机或智能终端上。具体的,包括:注释过滤模块801,用于剔除数据库各源码文件中的注释信息。函数切分模块802,用于对剔除注释信息后的各源码文件进行函数切分。函数分析模块803,用于根据函数切分结果及各源码文件分析得到函数与函数之间的关联关系。语句切分模块804,用于对剔除注释信息后的各源码文件进行语句切分。语句分析模块805,用于根据语句切分结果、函数切分结果及各源码文件分析得到函数、表及MDL操作方式的关联关系。表与表关联关系分析模块806,用于根据函数与函数之间的关联关系,函数、表及DML操作方式的关联关系,分析得到表与表之间关联关系及其密切程度。本申请一具体实施例中,如图9所示,所述注释过滤模块801包括:注释信息提取单元901,用于确定源码的注释格式,根据注释格式提取注释在各源码文件中的开始行数及结束行数。注释剔除单元902,用于将同一注释的开始行数及结束行数之间的信息剔除。本申请一具体实施例中,如图10所示,函数切分模块802包括:函数名称提取单元1001,用于根据关键字提取各源码文件中的函数名称。函数切分单元1002,用于根据函数名称提取函数在源码文件中的开始行数及结束行数,根据函数在源码中的开始行数及结束行数对剔除注释信息后的源码文件进行切分得到函数的切分结果。本申请一具体实施例中,如图11所示,函数分析模块803包括:文件调用关系提取单元1101,用于根据源码文件的文件名在各源码文件中进行遍历,确定源码文件之间的调用关系;函数调用关系提取单元1102,在调用源码文件中,遍历被调用源码文件中的函数名,确定代码行数,根据调用源码文件的函数切分结果确定代码行数属于哪个函数,从而确定函数与函数的调用关系。本申请一具体实施例中,如图12所示,语句切分模块804包括:语句分割符提取单元1201,用于确定语句的结束符格式。语句切分单元1202,用于根据语句结束符格式在各源码文件中提取包含语句结束符格式的行数得到语句的结束行数;对于每一源码文件,将语句的结束行数进行升序排列,对上一语句的结束行数作加一处理得到下一语句的开始行数;根据语句的开始行数及结束行数对剔除注释信息后的源码文件进行切分得到语句切分结果。本申请一具体实施例中,如图13所示,语句分析模块805包括:文件与表调用关系确定单元1301,用于根据表清单在各源码文件中进行遍历,确定文件与表之间的调用关系;行数提取单元1302,用于根据文件与表之间的调用关系确定表所在源码文件的代码行数;语句操作方式确定单元1303,用于从语句切分结果中查找表所在源码文件的代码行数对应的语句,根据DML操作方式关键字确定语句的操作方式;表所属函数确定单元1304,用于根据函数切分结果确定表所在源码文件中的代码行数属于哪个函数;关联单元1305,用于将确定的函数、表及操作方式关联到一起。本申请一具体实施例中,所述表与表关联关系分析模块806具体用于利用如下规则,根据函数与函数之间的关联关系,函数、表及DML操作方式的关联关系确定表与表之间的关联关系:若同一函数同时对多个表存在DML操作方式,则同一函数中存在DML操作方式的各表之间存在关联关系,若函数与函数之间存在调用关系,则两个函数中存在DML操作方式的表之间存在关联关系。表与表之间每确定一次关联关系,则做加一计算,根据计算结果确定表与表之间的密切程度。本申请提供的数据库表关联关系确定方法及装置能够准确的确定表间关系,以便帮助分析业务逻辑,减少数据库表关联关系分析的人力投入,降低分析过程复杂度,为数据库分拆(分库、分表)的策略分析提供了决策依据,以便进行有针对性的数据库分库方案调整。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述仅用于说明本申请的技术方案,任何本领域普通技术人员均可在不违背本申请的精神及范畴下,对上述实施例进行修饰与改变。因此,本申请的权利保护范围应视权利要求范围为准。当前第1页1 2 3