数据源信息的校验方法及装置与流程

文档序号:12818917阅读:513来源:国知局
数据源信息的校验方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种数据源信息的校验方法及装置。



背景技术:

在互联网系统中,当服务端接收到客户端的数据库访问请求时,服务端通过调用数据库访问接口连接到相应的数据库,之后再进行各类数据库访问操作。然而在某些场景下,通常希望能够连接到预期的数据库,因此就需要对当前连接的数据库进行校验。而众所周知,数据库连接的信息往往存储在数据源中,因此,对当前连接的数据库的校验就可以转化为对数据源信息的校验。

现有技术中,主要有两种对数据源信息进行校验的方法:第一种方法,也称手工校验方法,即从数据库访问操作对应的日志文件中查看数据源信息是否符合预期;第二种方法,在数据库访问接口对应的测试脚本中补充校验逻辑。然而,第一种方法通常需要耗费极大的人力资源,且校验效率比较低;而第二种方法因为在测试脚本中新增了代码,所以需要重新调试测试脚本,这增加了时间成本和人力成本,此外测试脚本中会新增很多冗余的校验代码,这使得测试脚本不够直观。



技术实现要素:

本申请实施例提供了一种数据源信息的校验方法及装置,可以调高数据源信息校验的效率,且不会增加测试人员的工作量。

第一方面,提供了一种数据源信息的校验方法,该方法包括:

当接收到对数据库访问接口的调用请求时,读取所述数据库访问接口的注释信息;

对所述注释信息进行解析,获得预定义的校验算法;

拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息;

根据所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息;

输出所述校验结果信息。

第二方面,提供了一种数据源信息的校验装置,该装置包括:读取单元、解析单元、拦截单元、校验单元和输出单元;

所述读取单元,用于当接收到对数据库访问接口的调用请求时,读取所述数据库访问接口的注释信息;

所述解析单元,用于对所述读取单元读取的所述注释信息进行解析,获得预定义的校验算法;

所述拦截单元,用于拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息;

所述校验单元,用于根据所述解析单元得到的所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息;

所述输出单元,用于输出所述校验单元得到的所述校验结果信息。

本申请提供的数据源信息的校验方法及装置,当接收到对数据库访问接口的调用请求时,读取所述数据库访问接口的注释信息;对所述注释信息进行解析,获得预定义的校验算法;拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息;根据所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息;输出所述校验结果信息。也即本申请中,直接从数据库访问接口对应的 注释信息中就可以获取到预定义的校验算法,之后根据预定义的校验算法,就可以实现对数据源信息的自动校验,从而解决了现有技术中通过人工校验数据源信息而导致的校验效率低的问题,且无需对修改后的数据库访问接口的测试脚本进行再次调试,这大大节约了时间成本和人力成本。

附图说明

图1为本申请提供的数据源信息校验装置示意图;

图2为本申请一种实施例提供的数据源信息的校验方法流程图;

图3为本申请提供的数据库访问接口的示意图;

图4为本申请另一种实施例提供的数据源信息的校验装置示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为便于对本申请实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本申请实施例的限定。

本申请实施例提供的数据源信息的校验方法及装置,适应于互联网系统中在某些特定场景下对数据库访问操作访问的数据库进行校验的场景,此处,互联网系统包括客户端和服务端,其中,客户端可以向服务端发送数据库访问请求,此处的数据库访问请求包括:写数据库请求和读数据库请求;服务端在接收到数据库访问请求之后,通过调用数据库访问接口连接到对应的数据库上,之后可以进行各类数据库访问操作(包括:读数据库操作和写数据库操作)。

本申请的服务端可以包括多个数据库,多个数据库可以异地部署,且可以分为两种类型:读数据库和写数据库,写数据库的个数可以为一个,而读数据库的个数可以为多个。需要说明的是,读数据库中的数据是从写数据库中复制的,所以写数据库的实时性最高,当写数据库中的数据发生变化时,可以将写数据库中发生变化的数据依次同步至多个读数据库中。在默认状态下,读数据库操作访问的数据库为读数据库,而写数据库操作访问的数据库为写数据库。可以理解的是,因为可以有多个读数据库,所以可以根据预设的路由策略来确定当前读数据库操作所访问的数据库。

需要说明的是,上述特定场景可以包括但不限于如下三种场景:

场景一:写库强制的场景,即当服务端接收到写数据库请求,且将该写数据库请求解析为一个或多个数据库访问操作时,假设该一个或多个数据库访问操作中包含读数据库操作,则为了保证数据的实时性,希望该读数据库操作从写数据库中读数据,此时,就可以对读数据库操作访问的数据库进行校验,即校验该读数据库操作访问的数据库为写数据库。

场景二:一致性读的场景,根据上面的描述,当写数据库中的数据发生变化时,可以将写数据库中发生变化的数据依次同步至多个读数据库中,而在数据同步的过程中,当服务端接收到读数据库请求,且将该数据库请求解析为多个读数据库操作时,假设该多个读数据库操作分别访问不同的读数据库,则因为多个读数据库的同步会有时间差,而导致部分读数据库操作访问的是同步后的读数据库,而部分读数据库操作访问的是未同步的读数据库,也即任一数据库访问操作访问了未同步的数据库,则读取结果就是错误的。所以,可以对多个读数据库操作访问的数据库进行校验,即校验多个数据库访问操作访问的数据库是一致的,在这种情况下,只有该读数据库未同步完成时,才会导致读取结果错误,由此可以使读取结果错误的概率降到最坏情况的五分之一。

举例来说,在多个数据库异地部署的情况下,即假设写数据库部署在地点 a,多个读数据库部署在地点b,则当地点a的写数据库中的数据发生变化时,同步到地点b的多个读数据库的时间可能不同,在数据未完全同步完成时,地点b触发了一笔查询操作,假设该查询操作需要查询5次读数据库,如果每次查询都路由到了不同的读数据库,那么这5个读数据库中任何一个读数据库的数据是旧的,就导致查询结果是错误的,而如果能保证5次读数据库都路由到同一个读数据库,那么只有这个读数据库没同步完成时,才会导致查询结果错误。

场景三:切换到异构数据库的场景,在互联网系统的发展过程中,不可避免的会遇到数据的迁移(即将数据从一个数据库迁移至另一个数据库),特别是当将数据迁移至异构数据库时,为了保证互联网系统在数据迁移之后能正常运行,可以对读数据库操作访问的数据库进行校验,即校验读数据库操作访问的数据库是否为迁移后的数据库,当然也可以同时验证访问结果的正确性;而假设数据迁移后,互联网系统不能够正确运行,此时还可以将数据迁移回之前的数据库,并进一步校验读数据库操作访问的数据库是否为迁移前的数据库。

综上,在如上三种场景下,对数据库访问操作访问的数据库进行校验是必要的。而因为数据库的连接信息通常会存储在数据源中,也即可以根据数据源信息,查找并连接相应的数据库。因此,对数据库访问操作访问的数据库的校验就可以转化为对数据源信息的校验。

需要说明的是,本申请的数据源信息也称为逻辑数据源信息,该逻辑数据源信息与实际的物理数据库是对应的,即可以根据任一逻辑数据源信息可以唯一地确定一个物理数据库。

本申请提供的数据源信息的校验方法可以由图1所示的数据源信息校验装置执行,图1中,该校验装置也称为数据血缘核对装置,其可以包括:数据库操作拦截器11、规则解析器12以及路径校验器13。其中,数据库操作拦截器11用于拦截数据库访问接口上的数据库访问操作;规则解析器12用 于对数据库访问接口的注释信息进行解析,以获取预定义的校验算法(也称路由规则或者路由策略);此处,数据库访问接口的注释信息可以是由测试人员预先编写,且可以将编写好的注释信息添加到数据库访问接口对应的测试脚本中,以便于当该数据库访问接口被调用时,由规则解析器12对其进行解析,此处,由于注释信息不参与调试,所以当在测试脚本中添加注释信息时,无需对测试脚本进行重新调试;路径校验器13用于根据规则解析器12解析得到的预定义的校验算法,对数据库操作拦截器11拦截到的数据库访问操作对应的数据源信息进行校验。

在本申请中,路径校验器13的个数可以为多个,其个数可以与预定义的校验算法的个数据相一致,如,当解析得到预定义的校验算法包括三种时,则路径校验器13的个数可以为三个,且预定义的校验算法与路径校验器13一一对应。在一个例子中,三个路径校验器13可以分别为:第一路径校验器、第二路径校验器和第三路径校验器,其中,第一路径校验器用于校验多个数据源信息是否一致;第二路径校验器用于校验一个或多个数据源信息是否与预设的数据源信息一致;第三路径校验器用于校验一个或多个数据源信息是否与预定义类型的数据源信息一致。

可以理解的是,图1所示的数据源信息校验装置与数据库访问接口是一一对应的,即一个数据源信息校验装置用于对一个数据库访问接口的数据库访问操作对应的数据源信息进行校验,当需要对多个数据库访问接口的数据库访问操作对应的数据源信息进行校验时,则可以通过多个数据源信息校验装置来完成,其中,每个校验装置的校验过程类似。本申请以校验一个数据库访问接口的数据库访问操作对应的数据源信息进行说明。

图2为本申请一种实施例提供的数据源信息的校验方法流程图,所述方法的执行主体可以为图1所示的数据源信息校验装置,图1中,所述方法具体可以包括:

步骤210,当接收到对数据库访问接口的调用请求时,读取所述数据库访 问接口的注释信息。

参见图3所示的本申请提供的数据库访问接口的示意图,图3中,测试脚本用于对数据库访问接口进行测试;测试驱动用于模拟客户端向数据库访问接口发送调用请求;数据库访问接口分布在服务接口(service)层、组件(component)层以及数据访问(dao)层。需要说明的是,对调用请求解析后得到的数据库访问操作在数据访问层开始分流。

图3中,在运行数据库访问接口的测试脚本来对数据库访问接口进行测试时,测试驱动启动相应的线程,启动后的线程向上述数据库访问接口发送调用请求,数据源信息校验装置在检测到该数据库访问接口被调用时,从该数据库访问接口对应的测试脚本中读取数据库访问接口的注释信息。

也即本申请的数据源信息的校验流程是结合数据库访问接口的测试过程进行的,也即本申请的数据源信息的校验方法可以作为数据库访问接口测试的扩展,本申请最后获得的校验结果信息可以与数据库访问接口的测试结果信息一起返回。

步骤220,对所述注释信息进行解析,获得预定义的校验算法。

此处,预定义的校验算法包括但不限于校验多个数据源信息是否一致;和/或,校验一个或多个数据源信息是否与预设的数据源信息或者预定义类型的数据源信息一致。

具体地,数据源信息校验装置在读取到数据库访问接口的注释信息之后,启动规则解析器12,从而由规则解析器12对数据库访问接口的注释信息进行解析。在一个例子中,数据库访问接口的注释信息可以为:@dbpathrule(checker=consistchecker.class,rule="default"),对该注释信息解析后,获得的预定义的校验算法可以为:校验多个数据源信息是否一致,也即可以调用第一路径校验器。此外,本申请中还可以进一步设置上述预定义的校验算法。具体地,可以通过变量“rule”来进一步设置上述预定义的校验算法。举例来说,在解析到的预定义的校验算法为校验多个数据源 信息是否一致时,假设给变量“rule”赋值“oracle”时,则预定义的校验算法可以进一步细化为:校验多个数据源信息是否一致,且校验该一致的数据源信息连接的数据库是否为oracle数据库。当然,上述变量“rule”也可以赋值为其它类型的数据库,如“oceanbase”以及“mysql”等。可以理解的是,当变量“rule”赋值为“default”时,则不对上述预定义的校验算法进行进一步设置。

在另一个例子中,数据库访问接口的注释信息可以为:@dbpathrule(checker=obchecker.class,rule="default"),对该注释信息解析后,获得的预定义的校验算法可以为:校验一个或多个数据源信息是否为oceanbase数据库的数据源信息,也即用于校验一个或多个数据源信息是否与预定义类型的数据源信息一致,从而可以调用第二路径校验器。当然,还可以通过为变量“rule”赋值,而进一步设置预定义类型的数据源信息连接的数据库。

在再一个例子中,数据库访问接口的注释信息可以为:@dbpathrule(checker=writedbchecker.class,rule="default"),对该注释信息解析后,获得的预定义的校验算法可以为:校验一个或多个数据源信息是否为写数据库的数据源信息,也即用于校验一个或多个数据源信息是否与预设的数据源信息一致,从而可以调用第三路径校验器。

当然,在实际应用中,预定义的校验算法可以不限于如上三种,还可以包括事务状态检测写库强制以及白名单优先等。其中,与每种预定义的校验算法对应的注释信息可以结合上述例子进行编写。此外,也可以在注释信息中包含两种以上预定义的校验算法,当对数据库访问接口的注释信息解析后,得到两种以上预定义的校验算法时,则可以根据预设的优先级,从两种以上预定义的校验算法中选取优先级较高的预定义的校验算法,之后调用与该优先级较高的预定义的校验算法对应的校验器进行校验。

需要进一步说明的是,上述例子只是给出了一种注释信息的编写方法,在 实际应用中,也可以采用其它形式编写,只要能够与测试脚本中参与调试的代码相区分,且规则解析器12能解析出相应的预定义的校验算法即可。

步骤230,拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息。

具体地,可以在图3所示的数据库访问接口的数据访问层上拦截所述数据库访问接口的一个或多个数据库访问操作。

举例来说,假设测试驱动调用该数据库访问接口读取用户的用户信息,也即当步骤210中的调用请求用于读取用户的用户信息时,且假设该用户信息包括登录信息和身份信息,而用户的该两种信息分别记录在两张不同的表格中,则数据库访问接口的实现代码可以将上述调用请求解析为两个读数据库操作,之后由数据库操作拦截器11在数据库访问接口的数据访问层上拦截该两个数据库访问操作;之后分别从该两个数据库访问操作对应的操作语句中获取对应的数据源信息。优选地,该数据源信息可以为数据库名称。此处,数据库访问操作对应的操作语句中包含数据源信息属于现有技术,本申请对此不复赘述。

当然,在实际应用中,也可以先执行步骤230,再执行步骤220,或者两个步骤同时执行,本申请对此不作限定。

步骤240,根据所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息。

具体地,通过调用与预定义的校验算法对应的路径校验器13,对数据源信息进行校验,并获得校验结果信息。

当所述预定义的校验算法为校验多个数据源信息是否一致时,步骤240具体可以为:

调用第一路径校验器对所述一个或多个数据源信息进行比对,若比对一致,则获得的所述校验结果信息为表示校验成功的信息;否则获得的所述校验结果信息为表示校验不成功的信息。

如前述例子,调用第一路径校验器将两个读数据库操作对应的两个数据源信息进行比对,假设上述两个表格分别属于两个读数据库,且上述两个数据源信息息分别可以为“oracle1”和“oracle2”,因为两个数据源信息不一致,所以获得的校验结果信息为表示校验不成功的信息。假设上述两个表格分别属于一个读数据库,如两个读数据库操作对应的数据源信息均为“oracle1”时,因为数据源信息一致,则获得的校验结果信息为表示校验成功的信息;进一步地,若前述例子中数据库访问接口对应的注释信息中还对变量“rule”进行了赋值,如赋值为“oracle”时,则在数据源信息一致时,还可以校验该数据源信息连接的数据库是否为oracle数据库,若是,则获得的校验结果信息才为表示校验成功的信息,否则获得的校验结果信息仍为表示校验不成功的信息。

当所述预定义的校验算法为校验一个或多个数据源信息是否与预设的数据源信息一致时,步骤240还可以具体为:

调用第二路径校验器对所述一个或多个数据源信息与预设的数据源信息进行比对,若任一数据源信息与预设的数据信息比对不一致,则获得的所述校验结果信息为表示校验不成功的信息;否则获得的所述校验结果信息为表示校验成功的信息。

如前述场景一中,希望读数据库操作访问的数据库为写数据库,也即可以调用第二路径校验器校验一个或多个读数据库操作对应的数据源信息是否为写数据库的数据源信息,如,在写数据库的数据源信息为“writedboracle”时,则可以将获取的数据源信息与“writedboracle”进行比对,若不一致,则获得的校验结果信息为表示校验不成功的信息;否则获得的校验结果信息为表示校验成功的信息。当然,还可以通过为变量“rule”赋值,而进一步设置连接的写数据库。

当所述预定义的校验算法为校验多个数据源信息是否与预定义类型的数据源信息一致时,步骤240还可以具体为:

调用第三路径校验器对所述一个或多个数据源信息与预定义类型的数据源信息进行比对,若任一数据源信息与预定义类型的数据源信息比对不一致,则获得的所述校验结果信息为表示校验不成功的信息;否则获得的所述校验结果信息为表示校验成功的信息。

如前述场景三中,在数据从oracle类型的数据库迁移至oceanbase类型的数据库时,可以调用第三路径校验器校验一个或多个读数据库操作对应的数据源信息是否为oceanbase类型数据库的数据源信息,如,在oceanbase类型数据库的数据源信息为“oboracle”时,则可以将获取的数据源信息与“oboracle”进行比对,若不一致,则获得的校验结果信息为表示校验不成功的信息;否则获得的校验结果信息为表示校验成功的信息。当然,还可以通过为变量“rule”赋值,而进一步设置预定义类型的数据源信息连接的数据库。而当oceanbase类型的数据库有问题需要将数据切回至oracle类型的数据库时,若需要校验一个或多个读数据库操作对应的数据源信息是否为oracle类型数据库的数据源信息,只需要修改预设类型的数据源信息即可。

由此可见,本申请在数据迁移后,只需要修改测试脚本中注释信息中的部分信息,无需对修改后的数据库访问接口的测试脚本进行重新调试,避免了现有技术中从校验oracle类型数据库的数据源信息切换至校验oceanbase类型数据库的数据源信息时,需要修改测试脚本并重新调试而耗费人力资源的问题。

步骤250,输出所述校验结果信息。

路径校验器13可以输出校验成功与否的校验结果信息,开发人员可以根据该校验结果信息,对数据库访问操作对应的数据源信息进行修改,从而使数据库访问操作能够访问期望的数据库。

综上,本申请的数据源信息的校验方法与数据库访问接口的测试方法相结合的方式,只需要在数据库访问接口的测试脚本中新增注释信息即可,并由数据源信息校验装置对该注释信息进行解析,获得预定义的校验算法,之后 根据预定的校验算法,对数据库访问接口的数据库访问操作对应的数据源信息进行校验,而由于注释信息不参加编译,从而无需对添加注释信息之后的测试脚本重新调试,由此可以避免现有技术中在对数据源信息进行校验时,需要在测试脚本中新增校验逻辑,且对新增校验逻辑后的测试脚本重新进行调试时工作量大的问题。

本申请的数据源信息校验装置可以插件的方式嵌入到已有的数据库访问接口的测试脚本中,在已有的数据库访问接口的测试基础上,通过对数据库访问接口编写注释信息,自动完成数据库访问接口上的数据库访问操作对应的数据源信息的校验。通过拦截器的切面化思路,低成本的增加了数据源信息的校验。

与上述数据源信息的校验方法对应地,本申请实施例还提供的一种数据源信息的校验装置,如图4所示,该装置包括:读取单元401、解析单元402、拦截单元403、校验单元404和输出单元405。

读取单元401,用于当接收到对数据库访问接口的调用请求时,读取所述数据库访问接口的注释信息。

解析单元402,用于对读取单元401读取的所述注释信息进行解析,获得预定义的校验算法。

其中,所述预定义的校验算法包括:

校验多个数据源信息是否一致;和/或,

校验一个或多个数据源信息是否与预设的数据源信息或者预定义类型的数据源信息一致。

拦截单元403,用于拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息。

拦截单元403具体用于:

在所述数据库访问接口的数据访问层上拦截所述数据库访问接口的一个或多个数据库访问操作。

校验单元404,用于根据解析单元402得到的所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息。

输出单元405,用于输出校验单元404得到的所述校验结果信息。

可选地,校验单元404可以具体用于:

对所述一个或多个数据源信息进行比对,若比对一致,则获得的所述校验结果信息为表示校验成功的信息;否则获得的所述校验结果信息为表示校验不成功的信息。

可选地,校验单元404还可以具体用于:

对所述一个或多个数据源信息与预设的数据源信息进行比对,若任一数据源信息与预设的数据信息比对不一致,则获得的所述校验结果信息为表示校验不成功的信息;否则获得的所述校验结果信息为表示校验成功的信息;或者,

对所述一个或多个数据源信息与预定义类型的数据源信息进行比对,若任一数据源信息与预定义类型的数据源信息比对不一致,则获得的所述校验结果信息为表示校验不成功的信息;否则获得的所述校验结果信息为表示校验成功的信息。本申请实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本申请提供的装置的具体工作过程,在此不复赘述。

本申请提供的数据源信息的校验装置,读取单元401当接收到对数据库访问接口的调用请求时,读取所述数据库访问接口的注释信息;解析单元402对所述注释信息进行解析,获得预定义的校验算法;拦截单元403拦截所述数据库访问接口的一个或多个数据库访问操作,并获取所述数据库访问操作对应的一个或多个数据源信息;校验单元404根据所述预定义的校验算法,对所述数据源信息进行校验,并获得校验结果信息;输出单元405输出得到的所述校验结果信息。由此,可以实现对数据源信息的自动校验,从而大大节约了人力成本和时间成本。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的对象及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1