一种分布式数据库数据批量处理的方法及装置与流程

文档序号:18301860发布日期:2019-07-31 10:15阅读:225来源:国知局
一种分布式数据库数据批量处理的方法及装置与流程

本发明涉及分布式数据库技术领域,特别涉及一种分布式数据库数据批量处理的方法及装置。



背景技术:

在应用生产环境中,经常会对当日生产的数据进行批量处理,场景十分丰富,如每晚对用户的储蓄账户进行利息结算。数据批处理往往会涉及到数据库中的全表操作,数据量巨大,使用常规的sql(structuredquerylanguage,结构化查询语言)查询将数据一次性获取至客户端会导致应用客户端内存溢出。

数据库中常见的数据批量处理方法为存储过程和游标。

存储过程是数据在数据库服务器本地化处理的一种方法,内部逻辑中需要的数据均可从本地获取,批处理的结果也直接写入本地数据库,这种批处理方式优点是批处理完全交给数据库完成,减少了数据的网络传输,但批处理的逻辑完全由存储过程决定,应用无法深度参与,适用于逻辑比较简单的批处理过程。而在金融行业很多业务的批处理逻辑十分复杂,批处理过程中要和很多第三方系统交互,每个账户会有完全不同的处理逻辑,需要应用深度参与。

传统的游标功能支持将数据流式的传递至应用端,因此应用可以完全控制批处理的逻辑,但该方案不通用,很多开源的数据存储引擎如mysql对游标均不支持或支持较弱,在其基础上发展起来的分布式数据库更是无法使用该功能。即一般的分布式数据库批处理采用存储过程的方式,导致应用无法深度参与批处理逻辑,无法支撑复杂的批处理应用。而传统的游标方案不通用,无法在基于开源框架的分布式数据库产品中使用。



技术实现要素:

根据本发明实施例提供的方案解决的技术问题是现有分布式数据库系统中应用无法流式从数据库服务端获取数据以便在客户端进行复杂批处理逻辑。

根据本发明实施例提供的一种分布式数据库数据批量处理的方法,包括:

计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

当确定需要进行流式获取数据的处理时,计算节点按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

当确定不需要进行流式获取数据的处理时,计算节点按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

优选地,所述的计算节点按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端的步骤包括:

计算节点根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理;

当确定计算节点与数据节点之间采用流式处理时,计算节点响应客户端下发的获取数据消息,按照从客户端、计算节点至数据节点都进行流式处理的方式,使多个数据节点将其缓存的批量数据经由计算节点返回给所述客户端;

当确定计算节点与数据节点之间采用缓存处理时,计算节点响应客户端下发的获取数据消息,按照将数据节点的批量数据缓存到计算节点,再由计算节点依次流式返回给所述客户端的方式,将数据节点的批量数据发送给所述客户端。

优选地,所述计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理包括:

计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,判断所述sql请求中是否包含流式获取批量数据的fetchsize标签;

若判断所述sql请求中包含流式获取批量数据的fetchsize标签,则计算节点确定需要进行流式获取数据的处理;

若判断所述sql请求中不包含流式获取批量数据的fetchsize标签,则计算节点确定不需要进行流式获取数据的处理。

优选地,所述计算节点根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理包括:

计算节点根据sql形式,生成执行计划,并判断所述执行计划是否符合预置的标准执行计划;

若判断所述执行计划符合预置的标准执行计划,则计算节点确定计算节点与数据节点之间采用流式处理;

若判断所述执行计划不符合预置的标准执行计划,则计算节点确定计算节点与数据节点之间采用缓存处理。

根据本发明实施例提供的一种分布式数据库数据批量处理的装置,包括:

确定模块,用于通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

流式获取模块,用于当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

非流式获取模块,用于当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

优选地,所述流式获取模块包括:

确定处理单元,用于根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理;

流式处理单元,用于当确定计算节点与数据节点之间采用流式处理时,响应客户端下发的获取数据消息,按照从客户端、计算节点至数据节点都进行流式处理的方式,使多个数据节点将其缓存的批量数据经由计算节点返回给所述客户端;

缓存处理单元,用于当确定计算节点与数据节点之间采用缓存处理时,响应客户端下发的获取数据消息,按照将数据节点的批量数据缓存到计算节点,再由计算节点依次流式返回给所述客户端的方式,将数据节点的批量数据发送给所述客户端。

优选地,所述确定模块包括:

判断单元,用于通过对客户端发起的用于获取批量数据的sql请求进行解析,判断所述sql请求中是否包含流式获取批量数据的fetchsize标签;

确定单元,用于当判断所述sql请求中包含流式获取批量数据的fetchsize标签,则确定需要进行流式获取数据的处理,以及当判断所述sql请求中不包含流式获取批量数据的fetchsize标签,则确定不需要进行流式获取数据的处理。

优选地,所述确定处理单元包括:

判断子单元,用于根据sql形式,生成执行计划,并判断所述执行计划是否符合预置的标准执行计划;

确定处理子单元,用于当判断所述执行计划符合预置的标准执行计划,则确定计算节点与数据节点之间采用流式处理,以及当判断所述执行计划不符合预置的标准执行计划,则确定计算节点与数据节点之间采用缓存处理。

根据本发明实施例提供的一种分布式数据库数据批量处理的设备,所述设备包括:处理器,以及与所述处理器耦接的存储器;所述存储器上存储有可在所述处理器上运行的分布式数据库数据批量处理的程序,所述分布式数据库数据批量处理的程序被所述处理器执行时实现包括:

通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

根据本发明实施例提供的一种计算机存储介质,存储有分布式数据库数据批量处理的程序,所述分布式数据库数据批量处理的程序被处理器执行时实现包括:

通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

根据本发明实施例提供的方案,可以按照需要从分布数据库中流式的读取数据,一方面避免了大量数据一次性查询至客户端而导致的客户端内存溢出问题,一方面可以对读取的数据进行灵活的批处理逻辑处理,是一项极具特色的亮点功能,对分布式数据库在金融等领域的推广,起到很好的推进作用。

附图说明

图1是本发明实施例提供的一种分布式数据库数据批量处理的方法流程图;

图2是本发明实施例提供的一种分布式数据库数据批量处理的装置示意图;

图3是本发明实施例提供的分布式数据库系统组网图;

图4是本发明实施例提供的布式数据库批处理计算节点流式模式流程图;

图5是本发明实施例提供的布式数据库批处理计算节点缓存模式流程图。

具体实施方式

以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1是本发明实施例提供的一种分布式数据库数据批量处理的方法流程图,如图1所示,包括:

步骤s101:计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

步骤s102:当确定需要进行流式获取数据的处理时,计算节点按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

步骤s103:当确定不需要进行流式获取数据的处理时,计算节点按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

其中,所述的计算节点按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端的步骤包括:计算节点根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理;当确定计算节点与数据节点之间采用流式处理时,计算节点响应客户端下发的获取数据消息,按照从客户端、计算节点至数据节点都进行流式处理的方式,使多个数据节点将其缓存的批量数据经由计算节点返回给所述客户端;当确定计算节点与数据节点之间采用缓存处理时,计算节点响应客户端下发的获取数据消息,按照将数据节点的批量数据缓存到计算节点,再由计算节点依次流式返回给所述客户端的方式,将数据节点的批量数据发送给所述客户端。

其中,所述计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理包括:计算节点通过对客户端发起的用于获取批量数据的sql请求进行解析,判断所述sql请求中是否包含流式获取批量数据的fetchsize标签;若判断所述sql请求中包含流式获取批量数据的fetchsize标签,则计算节点确定需要进行流式获取数据的处理;若判断所述sql请求中不包含流式获取批量数据的fetchsize标签,则计算节点确定不需要进行流式获取数据的处理。

其中,所述计算节点根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理包括:计算节点根据sql形式,生成执行计划,并判断所述执行计划是否符合预置的标准执行计划;若判断所述执行计划符合预置的标准执行计划,则计算节点确定计算节点与数据节点之间采用流式处理;若判断所述执行计划不符合预置的标准执行计划,则计算节点确定计算节点与数据节点之间采用缓存处理。

图2是本发明实施例提供的一种分布式数据库数据批量处理的装置示意图,如图2所示,包括:确定模块201,用于通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;流式获取模块202,用于当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;非流式获取模块203,用于当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

其中,所述流式获取模块202包括:确定处理单元,用于根据sql形式,确定计算节点与数据节点之间采用流式处理还是采用缓存处理;流式处理单元,用于当确定计算节点与数据节点之间采用流式处理时,响应客户端下发的获取数据消息,按照从客户端、计算节点至数据节点都进行流式处理的方式,使多个数据节点将其缓存的批量数据经由计算节点返回给所述客户端;缓存处理单元,用于当确定计算节点与数据节点之间采用缓存处理时,响应客户端下发的获取数据消息,按照将数据节点的批量数据缓存到计算节点,再由计算节点依次流式返回给所述客户端的方式,将数据节点的批量数据发送给所述客户端。

其中,所述确定模块201包括:判断单元,用于通过对客户端发起的用于获取批量数据的sql请求进行解析,判断所述sql请求中是否包含流式获取批量数据的fetchsize标签;确定单元,用于当判断所述sql请求中包含流式获取批量数据的fetchsize标签,则确定需要进行流式获取数据的处理,以及当判断所述sql请求中不包含流式获取批量数据的fetchsize标签,则确定不需要进行流式获取数据的处理。

具体地说,所述确定处理单元包括:判断子单元,用于根据sql形式,生成执行计划,并判断所述执行计划是否符合预置的标准执行计划;确定处理子单元,用于当判断所述执行计划符合预置的标准执行计划,则确定计算节点与数据节点之间采用流式处理,以及当判断所述执行计划不符合预置的标准执行计划,则确定计算节点与数据节点之间采用缓存处理。

本发明实施例提供了一种分布式数据库数据批量处理的设备,所述设备包括:处理器,以及与所述处理器耦接的存储器;所述存储器上存储有可在所述处理器上运行的分布式数据库数据批量处理的程序,所述分布式数据库数据批量处理的程序被所述处理器执行时实现包括:

通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

本发明实施例提供了一种计算机存储介质,存储有分布式数据库数据批量处理的程序,所述分布式数据库数据批量处理的程序被处理器执行时实现包括:

通过对客户端发起的用于获取批量数据的sql请求进行解析,确定是否需要进行流式获取数据的处理;

当确定需要进行流式获取数据的处理时,按照流式处理方式从数据节点获取批量数据,并将所获取的批量数据返回给客户端;

当确定不需要进行流式获取数据的处理时,按照非流式处理方式,从数据节点获取批量数据,并将所获取的批量数据返回给客户端。

图3是本发明实施例提供的分布式数据库系统组网图,如图3所示,包括以下模块:数据库客户端(客户端)、数据节点集群、管理节点、全局事务管理节点四大模块保持原有功能,通过改进和优化计算节点来实现分布式数据库数据进行批处理。

所述数据库客户端以数据服务的方式向应用提供数据库功能,并对应用请求或响应进行编解码,对应用提供统一的标准sql接口。其中,以集成的方式嵌入到具体应用中,和应用部署在一起。支持通用数据库标准协议,实现了计算节点的透明接入、负载均衡和故障透明转移。

所述管理节点实现系统各个模块集群管理和监控。即完成分布式数据库系统中各个网元的监控,包括门户管理、元数据管理、计算节点集群管理、数据节点集群管理。

所述全局事务管理节点维护全局事务的全生命周期,提供申请、释放、查询全局事务的能力。即维护分布式数据库系统中统一的全局事物id,保证各种场景下的事务一致性,解决分布式数据库可能的脏读问题,对汇聚、死锁问题进行了合理规避策略。

所述数据节点集群有多组数据库安全组组成,数据按照一定的规则切分后存放在各个数据库安全组中。每个数据库安全组有主备多个节点,之间通过同步方式进行复制,确保数据安全。

所述计算节点解析接收到的sql请求,并根据解析和路由结果下发到对应的数据节点。本发明中若sql中携带流式获取数据标签,计算节点会根据sql的形式,生成不同的执行计划,以决定计算节点和数据节点之间采用流式处理还是缓存模式处理。前者结果集数据缓存在每个数据节点中,数据库客户端到计算节点、计算节点至数据节点都是流式处理;后者结果集数据缓存在计算节点中,在应用每次发起获取结果集请求时计算节点将结果集依次流式返回给数据客户端。即计算节点负责与前端和后端网络通讯、sql协议处理、sql解析优化路由和执行。从客户端驱动层接收用户的操作,进行逻辑优化和物理优化,生成满足分布式事务一致性的分布式查询计划。计算节点在执行分布式查询计划时,通过持续地访问数据节点,从而完成用户的最终操作请求。

本发明所述流式批处理的方法包括以下步骤:

1)数据库客户端发起sql请求,并在语句中携带后续要使用流式获取数据的标签(fetchsize);

2)计算节点接收数据库客户端发起的sql请求,对sql进行解析、优化、路由。如果sql语句指定了fetchsize标签,计算节点进一步分析该语句,决定使用缓存模式或者流式模式从数据节点获取数据,处理完毕后返回客户端响应消息;

3)数据库客户端下发获取数据消息(fetch),计算节点或者从缓存中取出固定条数结果集,或者从数据节点获取固定条数数据,并将结果集返回给数据库客户端;

4)客户端将获取到的结果集数据逐条处理完毕后继续向分布式数据库下发fetch消息,直至所有数据处理完毕。

本发明实施例使得应用可以从分布式数据库流式的获取固定条数的数据,应用经过逻辑处理后可以再将处理结果后写入数据库。由于fetchsize是标准sql的接口规范,是一个设置从数据库游标抽取若干行结果集的方法,在主流的数据库中都可以使用,通用性更好。也就是说,使得应用可以根据需求每次批量获取数据,经过业务逻辑处理、数据写入后,再继续从分布式数据库读取数据,从而最终完成复杂的批处理逻辑控制。

图4是本发明实施例提供的布式数据库批处理计算节点流式模式流程图,如图4所示,该场景是在客户端、计算节点、数据节点间实现的一个流式处理。优势是计算节点仅做查询结果集的透传,整个批处理对计算节点的内存要求很低,不会因为数据量太大而对计算节点造成太大压力。一般应用常结合prepare语句使用该功能,说明如下:

数据库客户端下发prepare预编译语句,计算节点对该sql进行解析判断,认为满足计算节点和数据节点流式处理条件(一般该类型sql不需要计算节点做二次计算),计算节点将prepare经过转换后下发至所有数据节点。

客户端下发execute语句,携带后续要使用fetchsize模式获取数据的标签,其中指定每次获取的结果集数目,计算节点将execute语句下发至数据节点。

客户端开始下发fetch消息至计算节点流式获取结果集。

计算节点选择合适的数据节点获取结果集,数据节点返回结果集至计算节点,计算节点进一步将结果集返回给客户端。

为降低响应时延,计算节点内存中可提前缓存一份结果集,以便及时回复客户端响应,同时后台线程继续向数据节点取结果。

重复上述步骤,直至将所有的结果集均返回至客户端。

图5是本发明实施例提供的布式数据库批处理计算节点缓存模式流程图,如图5所示,在该场景下,计算节点对结果集查询方式做了转换处理,缓存了全部最终结果集,计算节点对数据库客户端实现的是流式处理,而对数据节点则使用的普通数据查询方式。该方案的优势是实现简单通用,适用于所有的sql语句类型。结合prepare语句对流程说明如下:

数据库客户端下发prepare预编译语句,计算节点将prepare做变换处理后,将新的prepare下发至数据节点。此时计算节点下发给数据节点的语句与客户端原始下发的语句是不同的,计算节点需要根据原始语句解析结果及数据实际分布情况生成可能的执行计划,并将对应的prepare下发数据节点。

客户端下发execute语句,携带后续要适用fetchsize模式获取数据的标签,其中指定每次获取的结果集数目,计算节点将execute语句下发至数据节点,但不指定fetchsize模式。

计算节点将数据节点返回的执行结果汇总二次计算后保存在本地内存。

客户端下发fetch消息至计算节点,计算节点从本地内存中返回fetch结果数据。

重复步骤3,直至将所有的结果集均返回至客户端。

根据本发明实施例提供的方案,根据本发明所提出的系统和方法可以扩大分布式数据库在金融、政企、互联网等领域的应用,给用户提供在分布式数据库产品中实现业务流式批处理的方法,降低应用的开发难度,提升用户使用体验。对于分布式数据库的推广具有良好的示范意义。

尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

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