技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于GraphQL的异构数源查询方法及系统与流程  >  正文

一种基于GraphQL的异构数源查询方法及系统与流程

  • 国知局
  • 2024-07-31 22:45:56

本发明涉及计算机,具体涉及一种基于graphql的异构数源查询方法及系统。

背景技术:

1、在当今信息化社会,数据量的爆发式增长已成为常态。随着业务的多样化和复杂化,不同类型数据往往分散存储于各种数源(提供数据读写的数据库或者服务器)中,如果某一对象需要从多个数源中提取并组合数据,由于不同数源的架构和访问方式存在异构性,导致对这些异构数据源进行整合、使用和管理变得异常复杂。特别是在政务服务、电子商务、大数据分析等领域,对多个异构数据源的整合需求日益迫切。

2、传统上,为了解决不同数据源之间的数据整合问题,开发者往往需要在每个应用中嵌入多种数据库连接技术,如jdbc(java database connect)java数据库连接、odbc(open database connectivity)开放数据库连接或是api连接如restful api(representational state transfer)表现层状态转换、rpc(remote procedure call)远程过程调用等。这不仅需要在开发过程中进行繁琐的配置和管理,还面临着数据组合和数源连接等多重挑战。特别是在政务服务行业中,由于个人信息通常分散于不同部门的数据服务中,需要在不同的数源中获取授权和数据,使得数据的对接和整合变得尤为复杂。

3、此外,在项目研发过程中,不同的项目往往采用不同的数据库作为数据持久化层。在用户系统中可能是mysql数据库,在业务中可能是mongodb数据库,在日志或者统计中可能是clickhouse数据库,而对于外部接口,则又需要通过http请求来访问数据。对于这种不同的数据源,统一称为异构数源。首先访问这些数据的时候,往往需要配置不同的数源连接,还需要对其进行管理,避免使用错误数据源。其次由于不同的数源意义不同,这些数源的组合形式等于数源数量的子集,n个数源有2n-1种组合形式,在使用大于三个数源时,程序复杂性就相当高了,不利于后续的拓展和维护。

4、因此,现有的数据整合方法不仅费时费力,而且在无形中增加了项目的开发和维护成本。为了解决这一问题,亟需一种统一、高效的查询服务来管理这些异构数据源,简化数据整合流程,降低开发和维护的复杂度,同时避免数据源与项目之间的耦合,提高系统的可扩展性和可维护性。

技术实现思路

1、本发明的目的是提供一种基于graphql的异构数源查询方法及系统,通过引入graphql技术,实现对异构数据源的统一访问和管理,简化数据整合流程,降低开发和维护难度。同时,通过构建graphql的schema和datafetcher实例,实现对多种异构数据源的整合和查询,避免自定义查询规则、数据划分规则等繁琐步骤,提高系统的可扩展性和可维护性。

2、为达到上述发明创造目的,本发明采用如下技术方案:

3、第一个方面,本发明公开了一种基于graphql的异构数源查询方法,包括如下步骤:

4、确定需要访问的异构数源;

5、针对每个异构数源,根据数源类型,采用连接信息构建与之对应的datafetcher;

6、从数源中获取元数据;

7、将获取的元数据通过管理端进行持久化存储;

8、从持久化存储中获取元数据,并构建graphql schema,构建过程包括:

9、a.解析元数据,根据数源类型将元数据转换为标准树形结构,所述树形结构包括名称、类型和子节点信息;

10、b.对解析后的元数据进行校验;

11、c.校验通过的有效的元数据,根据每个数源的类型构建graphql schema;graphqlschema构建完成后,将构建好的graphql schema与元数据解析出的树形结构进行关联,并将构建并关联好的graphql schema注册到graphql的query节点(graphql的统一查询节点)下;

12、将graphql schema中的数源与相应的datafetcher进行绑定,完成graphql服务的构建;

13、将构建完成的graphql服务提供给业务服务使用,业务服务通过gql语句编写查询请求,graphql服务根据请求中的字段和条件,调用相应的datafetcher从异构数源中获取数据,并将结果返回给业务服务。

14、优选地,所述连接信息,是用于建立与数源的连接所需的参数和配置,对于不同的数源类型,所需的连接信息不同。例如,对于mysql数据库,连接信息包括数据库的地址(主机名和端口号)、用户名、密码以及要连接的特定数据库的名称。对于restful api,连接信息包括api的url、http请求方法(如get、post等)、请求参数。

15、优选地,构建datafetcher时,对于相同数源类型但不同数源地址,则创建不同的datafetcher实例。

16、优选地,所述元数据包括:数源连接信息、数源基本信息、数源查询参数(入参)和数源返回参数(出参);其中,

17、所述数源连接信息包括数源地址、数源认证信息、数源类型中的一种或多种;

18、所述数源基本信息包括数源名称、数源权限中的一种或多种;

19、所述数源查询参数包括数源查询参数字段名称、数源查询参数字段类型中的一种或多种;

20、所述数源返回参数包括数源返回数据字段类型、数源返回数据字段名称、数源返回数据字段子级中的一种或多种。

21、在一种优选实施例中,所述树形结构表示如下:

22、

23、

24、优选地,所述对解析后的元数据进行校验,需满足如下校验条件:

25、表名和字段名符合预设的命名规则;

26、不同数源之间的名字满足唯一性;

27、每个数源配置不为空,并至少有一个字段;

28、每个数源都符合其所属类型特定的校验逻辑;

29、满足以上条件,则数据为有效数据,否则为无效。

30、优选地,所述根据每个数源的类型构建graphql schema,包括:

31、若类型type是array,则构建graphql中的集合类型(如列表类型);

32、若类型type是object,则构建graphql中的对象类型;

33、若类型type是基础类型,如string、int、float等,则直接构建为graphql中的对应标量类型。

34、优选地,所述datafetcher的实现还包括错误处理机制,用于处理包括数源连接失败和查询错误的异常情况。

35、优选地,所述管理端提供可视化界面,用于配置数源连接信息、元数据信息,以及监控数源状态和查询性能。

36、优选地,所述graphql schema的构建支持动态更新,当元数据信息发生变化时,自动更新graphql schema,无需重新构建graphql服务。

37、第二个方面,本发明还公开了一种基于graphql的异构数源查询系统,用于实现第一个方面所述的查询方法,所述系统包括:管理端和元数据存储模块、核心服务模块、异构数源模块和业务服务模块;其中,

38、管理端和元数据存储模块,包括管理端子模块和元数据存储子模块;管理端子模块作为一个独立的服务实体,负责配置并持久化元数据;元数据存储子模块用于存储由管理端子模块持久化的元数据;

39、业务服务模块,通过graphql的gql语句向核心服务模块发起查询请求,并接收核心服务模块返回的查询结果;

40、核心服务模块,用于从元数据存储子模块中获取由管理端子模块配置的元数据,并根据这些元数据构建graphql的schema和datafetcher实例,以及,根据元数据实例化已实现的datafetcher,使其连接到对应的异构数源;其中,schema实例用于声明系统内部可查询的结构和字段,datafetcher实例用于连接异构数源模块,执行数据查询操作;当接收到业务服务模块发送的查询请求时,核心服务模块根据查询请求中的gql语句和schema实例生成执行计划,并调用相应的datafetcher实例执行查询操作,并将结果返回给业务服务模块;

41、异构数源模块,为实际提供数据的服务,包括关系型数据库、非关系型数据库和api接口中的一种或多种,异构数源模块通过datafetcher实例与核心服务模块进行交互。

42、优选地,所述核心服务模块还包括错误处理机制,当遇到无法查询的字段或无法连接的数据源时,所述核心服务模块向所述业务服务模块反馈错误信息。

43、优选地,所述管理端子模块提供可视化界面,用于配置数源连接信息、元数据信息,以及监控数源状态和查询性能。

44、优选地,所述管理端子模块和所述核心服务模块相隔离。

45、本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点:

46、本发明通过graphql实现对异构数源的统一访问。这种异构数源不局限于传统的数据库,还包括了各种数据提供服务,如接口等。其中,datafetcher接口的定义使得针对不同数源的访问变得简单直接,仅需根据异构数源的特性进行相应实现,即可轻松访问不同数据源的数据,极大地提高了系统的灵活性和可扩展性。

47、本发明通过构建graphql的schema,实现了对多种异构数源的整合。schema的构建基于管理端配置的元数据,遵循graphql的schema设计方式,使得数源整合变得简单而高效。这种方式避免了传统方式中复杂的数据划分和查询分配逻辑,降低了开发难度和维护成本。

48、本发明利用graphql的图形查询语言(gql)进行查询,所有查询均在query节点下进行,内部流程自动拆分并分配到不同的datafetcher进行查询,提高了查询的效率和准确性。

49、通过graphql的结合使用,本发明显著提高了项目开发时间和应用本身的开发、维护效率。具体而言,项目开发时间缩短了约5%-10%,这主要得益于应用与数源的连通配置时间以及应用多数源的配置时间的减少。同时,通过与graphql结合,避免了自定义查询规则、自定义数据划分规则、自定义查询分配逻辑等繁琐步骤,使得应用开发和维护更加高效。

本文地址:https://www.jishuxx.com/zhuanli/20240730/194478.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。