硬件加速数据库的访问方法、装置、主机、系统及介质转让专利

申请号 : CN202010633604.5

文献号 : CN111984679B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 鄢贵海刘昱泽张宇

申请人 : 中科驭数(北京)科技有限公司

摘要 :

本公开实施例涉及一种硬件加速数据库的访问方法、装置、主机、系统及介质,通过在基于RPC协议的硬件加速数据库访问架构中,采用序列化速率更高的数据结构序列化协议代替RPC协议中原生的Protocol Buffer协议,提高了数据的序列化速度,降低了数据的传输时延。

权利要求 :

1.一种硬件加速数据库的访问方法,其特征在于,包括:第一主机获取所述第一主机中的用户Java程序向Java数据库连接JDBC的应用程序接口API发送的数据库操作指令;

调用用户端远程过程调用RPC协议中内置的数据结构序列化协议对所述数据库操作指令中的数据进行序列化处理,生成第一RPC消息;

将所述第一RPC消息发送给硬件加速数据库的硬件加速系统,以使所述硬件加速系统基于服务端RPC协议中内置的所述数据结构序列化协议,对所述第一RPC消息中的数据进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作;

其中,所述硬件加速系统执行的编程语言与所述用户Java程序执行的编程语言不同,所述数据结构序列化协议的序列化速率高于Protocol Buffer协议;

所述硬件加速数据库设置在所述第一主机中或第二主机中。

2.根据权利要求1所述的方法,其特征在于,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。

3.根据权利要求1或2所述的方法,其特征在于,所述将所述第一RPC消息发送给硬件加速数据库的硬件加速系统之后,所述方法还包括:接收所述硬件加速系统反馈的第二RPC消息,所述第二RPC消息是所述硬件加速系统依据所述第一RPC消息执行数据库访问操作后,根据所述数据结构序列化协议对访问结果进行序列化处理得到的;

基于所述数据结构序列化协议对所述第二RPC消息中的数据进行反序列化处理,得到所述访问结果;

将所述访问结果发送给所述用户Java程序。

4.一种硬件加速数据库的访问方法,其特征在于,包括:硬件加速数据库的硬件加速系统接收第一主机发送的第一RPC消息,所述第一RPC消息为所述第一主机采用用户端RPC协议中内置的数据结构序列化协议对用户Java程序向JDBC API发送的数据库操作指令中的数据进行序列化处理得到的;

采用服务端RPC协议中内置的所述数据结构序列化协议,对所述第一RPC消息中的数据进行反序列化处理;

根据所述反序列化处理的结果执行相应的数据库访问操作;

其中,所述硬件加速系统执行的编程语言与所述用户Java程序执行的编程语言不同,所述数据结构序列化协议的序列化速率高于Protocol Buffer协议;

所述硬件加速数据库设置在所述第一主机中或第二主机中。

5.根据权利要求4所述的方法,其特征在于,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。

6.根据权利要求4或5所述的方法,其特征在于,所述根据所述反序列化处理的结果执行相应的数据库访问操作之后,所述方法还包括:基于所述服务端RPC协议中内置的所述数据结构序列化协议对访问结果进行序列化处理得到第二RPC消息;

将所述第二RPC消息发送给所述第一主机,以使所述第一主机基于所述用户端RPC协议中内置的所述数据结构序列化协议对所述第二RPC消息中的数据进行反序列化处理,得到所述访问结果,并将所述访问结果发送给所述用户Java程序。

7.一种数据库访问装置,其特征在于,包括:获取模块,用于获取第一主机中的用户Java程序向Java数据库连接JDBC的应用程序接口API发送的数据库操作指令;

数据序列化模块,用于调用用户端远程过程调用RPC协议中内置的数据结构序列化协议对所述数据库操作指令中的数据进行序列化处理,生成第一RPC消息;

第一发送模块,用于将所述第一RPC消息发送给硬件加速数据库的硬件加速系统,以使所述硬件加速系统基于服务端RPC协议中内置的所述数据结构序列化协议,对所述第一RPC消息中的数据进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作;

其中,所述硬件加速系统执行的编程语言与所述用户Java程序执行的编程语言不同,所述数据结构序列化协议的序列化速率高于Protocol Buffer协议;

所述硬件加速数据库设置在所述第一主机中或第二主机中。

8.根据权利要求7所述的装置,其特征在于,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。

9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:接收模块,用于接收所述硬件加速系统反馈的第二RPC消息,所述第二RPC消息是所述硬件加速系统依据所述第一RPC消息执行数据库访问操作后,根据所述数据结构序列化协议对访问结果进行序列化处理得到的;

数据反序列化模块,用于基于所述数据结构序列化协议对所述第二RPC消息中的数据进行反序列化处理,得到所述访问结果;

第二发送模块,用于将所述访问结果发送给所述用户Java程序。

10.一种数据库访问装置,其特征在于,包括:接收模块,用于接收第一主机向硬件加速数据库的硬件加速系统发送的第一RPC消息,所述第一RPC消息为所述第一主机采用用户端RPC协议中内置的数据结构序列化协议对用户Java程序向JDBC API发送的数据库操作指令中的数据进行序列化处理得到的;

数据反序列化模块,用于采用服务端RPC协议中内置的所述数据结构序列化协议,对所述第一RPC消息中的数据进行反序列化处理;

访问执行模块,用于根据所述反序列化处理的结果执行相应的数据库访问操作;

其中,所述硬件加速系统执行的编程语言与所述用户Java程序执行的编程语言不同,所述数据结构序列化协议的序列化速率高于Protocol Buffer协议;

所述硬件加速数据库设置在所述第一主机中或第二主机中。

11.根据权利要求10所述的装置,其特征在于,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。

12.根据权利要求10或11所述的装置,其特征在于,所述装置还包括:数据序列化模块,用于基于所述服务端RPC协议中内置的所述数据结构序列化协议对访问结果进行序列化处理得到第二RPC消息;

发送模块,用于将所述第二RPC消息发送给所述第一主机,以使所述第一主机基于所述用户端RPC协议中内置的所述数据结构序列化协议对所述第二RPC消息中的数据进行反序列化处理,得到所述访问结果,并将所述访问结果发送给所述用户Java程序。

13.一种主机,其特征在于,包括:处理器;

存储器;以及

计算机程序;

其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现权利要求1‑3中任一项所述的方法。

14.一种硬件加速系统,其特征在于,包括:处理器;

存储器;以及

计算机程序;

其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现权利要求4‑6中任一项所述的方法。

15.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1‑6中任一项所述的方法。

说明书 :

硬件加速数据库的访问方法、装置、主机、系统及介质

技术领域

[0001] 本公开实施例涉及计算机技术领域,尤其涉及一种硬件加速数据库的访问方法、装置、主机、系统及介质。

背景技术

[0002] 在相关技术中,硬件加速数据库是一种可由硬件加速系统独立完成数据库访问任务,不需要主机的中央处理器(central processing unit,简称CPU)过多参与的数据库。当
硬件加速系统执行的计算机编程语言是除Java以外的其他编程语言(比如C语言、C++)时,
主机中的用户Java程序可以通过调用远程过程调用(Remote Procedure Call,简称RPC)协
议,将用户Java程序的指令传输给硬件加速数据库的硬件加速系统,从而实现用户Java程
序对硬件加速数据库的跨语言访问。
[0003] 但是,相关技术存在数据库访问效率低,数据传输耗时长的问题。

发明内容

[0004] 为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种硬件加速数据库的访问方法、装置、主机、系统及介质。
[0005] 本公开实施例第一方面提供了一种硬件加速数据库的访问方法,该方法包括:
[0006] 第一主机获取第一主机中的用户Java程序向Java数据库连接(Java Database Connectivity,简称JDBC)的应用程序接口(Application Programming Interface,简称
API)发送的数据库操作指令;调用用户端RPC协议中内置的数据结构序列化协议对数据库
操作指令中的数据进行序列化处理,生成第一RPC消息;将第一RPC消息发送给硬件加速数
据库的硬件加速系统,以使硬件加速系统基于服务端RPC协议中内置的数据结构序列化协
议,对第一RPC消息中的数据进行反序列化处理,并根据反序列化处理结果执行相应的数据
库访问操作;其中,硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,数
据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0007] 本公开实施例第二方面提供了一种硬件加速数据库的访问方法,该方法包括:
[0008] 硬件加速数据库的硬件加速系统接收第一主机发送的第一RPC消息,第一RPC消息为第一主机采用用户端RPC协议中内置的数据结构序列化协议对用户Java程序向JDBC API
发送的数据库操作指令中的数据进行序列化处理得到的;采用服务端RPC协议中内置的数
据结构序列化协议,对第一RPC消息中的数据进行反序列化处理;根据反序列化处理的结果
执行相应的数据库访问操作;其中,硬件加速系统执行的编程语言与用户Java程序执行的
编程语言不同,数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0009] 本公开实施例第三方面提供了一种数据库访问装置,该装置包括:
[0010] 获取模块,用于获取第一主机中的用户Java程序向JDBC API发送的数据库操作指令;
[0011] 数据序列化模块,用于调用用户端RPC协议中内置的数据结构序列化协议对数据库操作指令中的数据进行序列化处理,生成第一RPC消息;
[0012] 第一发送模块,用于将第一RPC消息发送给硬件加速数据库的硬件加速系统,以使硬件加速系统基于服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据
进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作;
[0013] 其中,硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0014] 本公开实施例第四方面提供了一种数据库访问装置,该装置包括:
[0015] 接收模块,用于接收第一主机向硬件加速数据库的硬件加速系统发送的第一RPC消息,第一RPC消息为第一主机采用用户端RPC协议中内置的数据结构序列化协议对用户
Java程序向JDBC API发送的数据库操作指令中的数据进行序列化处理得到的;
[0016] 数据反序列化模块,用于采用服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据进行反序列化处理;
[0017] 访问执行模块,用于根据反序列化处理的结果执行相应的数据库访问操作;
[0018] 其中,硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0019] 本公开实施例第五方面提供了一种主机,包括:
[0020] 处理器;存储器;以及计算机程序;其中,计算机程序存储在存储器中,并被配置为由处理器执行以实现上述第一方面的方法。
[0021] 本公开实施例第六方面提供了一种硬件加速系统,包括:
[0022] 处理器;存储器;以及计算机程序;其中,计算机程序存储在存储器中,并被配置为由处理器执行以实现上述第二方面的方法。
[0023] 本公开实施例第七方面提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行以实现上述第一方面或第二方面的方法。
[0024] 本公开实施例提供的技术方案与现有技术相比具有如下优点:
[0025] 在本公开实施例中,第一主机通过获取用户Java程序向JDBC API发送的数据库操作指令,并采用自身装载的用户端RPC协议中的数据结构序列化协议对获取到的数据库操
作指令中的数据进行序列化处理,生成第一RPC消息,通过将第一RPC消息发送给硬件加速
数据库的硬件加速系统,使得硬件加速系统基于服务端RPC协议中的数据结构序列化协议,
对第一RPC消息中的数据进行反序列化处理,并根据反序列化处理结果执行相应的数据库
访问操作,从而实现了第一主机对硬件加速数据库的跨语言访问。并且在本公开实施例中,
用户端RPC协议和服务端RPC协议中的原生Protocol Buffer协议被替换成了另一种序列化
速率更高的数据结构序列化协议,因而能够提高数据库访问过程中的数据序列化速度,降
低第一主机和硬件加速系统之间的数据传输时延。

附图说明

[0026] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0027] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而
言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0028] 图1是相关技术提供的一种用户Java程序调用JDBC访问数据库的系统架构示意图;
[0029] 图2是相关技术提供的一种基于JNI访问硬件加速数据库的系统架构示意图;
[0030] 图3是相关技术提供的一种基于RPC协议跨语言访问硬件加速数据库的系统框架示意图;
[0031] 图4是本公开实施例提供的一种硬件加速数据库的访问方法的流程图;
[0032] 图5是本公开实施例提供的一种硬件加速数据库的访问方法的系统架构图;
[0033] 图6是本公开实施例提供的又一种硬件加速数据库的访问方法的系统架构图;
[0034] 图7是本公开实施例提供的又一种硬件加速数据库的访问方法的流程图;
[0035] 图8是本公开实施例提供的又一种硬件加速数据库的访问方法的系统架构图;
[0036] 图9是本公开实施例提供的又一种硬件加速数据库的访问方法的流程图;
[0037] 图10是本公开实施例提供的一种数据库访问装置的结构示意图;
[0038] 图11是本公开实施例提供的一种数据库访问装置的结构示意图。

具体实施方式

[0039] 为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可
以相互组合。
[0040] 在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施
例,而不是全部的实施例。
[0041] 为了便于理解本公开的技术方案,首先对本公开涉及的专业技术进行解释:
[0042] JDBC技术:JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC驱动程序共分为四种类型,其中访
问速度最快,纯粹用Java实现的是本地协议驱动。这类JDBC直接在客户端和数据库之间通
信,但目前几乎只有数据库厂商才能提供这种类型的JDBC驱动,且针对不同的数据库需要
使用不同的驱动程序。
[0043] Protocol Buffer技术:Protocol Buffer是一种数据结构序列化协议。经常应用于透过管道(pipeline)或存储数据进行的通信程序的开发。Protocol Buffer包含一个接
口描述的语言,用于描述一些数据结构,并提供程序工具,该些程序工具用于产生这些数据
结构或解析数据流。
[0044] gRPC技术:是Google发起的一个开源远程过程调用系统。该系统基于HTTP/2协议传输,使用Protocol Buffer作为接口描述语言。在该框架下多种语言服务之间可以跨平台
进行交互。
[0045] JNI技术:JNI是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用或库,也可以被其他程序调用。本地程序一般用C,C++或汇编语言编写,并且编译为基于本
机硬件和操作系统的程序。当一些工作无法用Java来解决时,JNI允许程序员用其他编程语
言来解决问题。
[0046] FlatBuffers技术:是一种基于内存的数据结构序列化协议,在反序列化的时候不需要额外的开辟临时内存,使得它在读取序列化数据的时候速度很快。FlatBuffer支持多
种编程语言。
[0047] AVRO:是一种数据结构序列化的系统。它可以提供丰富的数据结构类型,快速可压缩的二进制数据形式,存储持久数据的文件容器以及RPC协议。
[0048] Hesssian:是一种数据结构序列化协议。Hessian采用的是二进制RPC协议,适合于发送二进制数据。
[0049] JSON:是一种轻量级的数据交换格式。它采用与编程语言无关的文本格式,但是也使用了类C语言(包括C,C++,C#,Java,JavaScript,Perl,Python等)的习惯,简洁和清晰的
层次结构使得JSON成为理想的数据交换语言,具有良好的可读性。
[0050] MessagePack:一个类似JSON的序列化和反序列化协议,和JSON相比速度更快,所占内存更小,结构更紧凑,适合在性能要求高的条件下作为JSON的替代。其本身支持多语
言,跨平台使用。
[0051] 图1是相关技术提供的一种用户Java程序调用JDBC访问数据库的系统架构示意图。如图1所示,在相关技术中数据库一般可以执行Java程序代码,JDBC提供的应用程序接
口可以支持服务器‑客户机(Client‑Server,简称C/S)两层模型。在C/S两层模型中用户
Java程序可以通过调用JDBC API直接向数据库发送诸如查询或更新数据库等数据库操作
指令。数据库接收到数据库操作指令后执行相应的操作,并通过JDBC API向用户Java程序
返回访问结果。但是在图1中,对数据库的全部操作均需要数据库所在主机的CPU来执行,占
用了CPU大量的处理资源。
[0052] 为了节约主机CPU的处理资源,相关技术提供了一种硬件加速数据库。该数据库与现有数据库存在明显不同。在硬件加速数据库中数据库的硬件加速系统可以独立计算,并
独立完成对数据库的所有访问任务,而不需要CPU过多参与。并且在相关技术中硬件加速系
统的硬件驱动程序一般采用C语言、C++或者Python编写。这种情况下,用户Java程序对硬件
加速数据库的访问一般通过JNI技术来实现。示例的,图2是相关技术提供的一种基于JNI访
问硬件加速数据库的系统架构示意图。如图2所示,在该系统架构中用户Java程序通过将数
据库操作指令发送给JDBC API,由JDBC API调用JNI将以Java语言表达的数据库操作指令
转换成以C++语言表达的指令,使得硬件加速系统能够根据转换后的指令对数据库进行访
问操作。与发起访问类似的,在硬件加速系统完成对数据库的访问后,硬件加速系统需要采
用JNI将以C++语言表达的访问结果转换为以Java语言表达的访问结果,并通过JDBC API将
访问结果返回给用户Java程序。但是JNI并不完美,其在实际应用中至少存在如下缺陷:
[0053] 1、JNI仅支持本地通信,访问硬件加速数据库的用户Java程序必须与硬件加速数据库在同一主机上,导致硬件加速数据库布设的灵活性较差,不能跨平台对硬件加速数据
库进行访问,降低了硬件加速数据库的使用价值。
[0054] 2、JNI转换编程语言(比如,Java语言与C/C++之间的转换)的耗时较长,导致访问数据库的效率较低。
[0055] 3、JNI的兼容性较差,当JNI被迁移到其他主机时,需要对JNI进行重新配置以使JNI能够支持所在主机的处理器架构,耗时耗力,成本较高。
[0056] 4、JNI创建使用过程复杂,需要生成的文件较多,不易维护和优化。
[0057] 针对JNI存在的上述问题,相关技术提供了一种基于RPC协议的改进方案。示例的,图3是相关技术提供的一种基于RPC协议跨语言访问硬件加速数据库的系统框架示意图,如
图3所示,在相关技术提供的改进方案中,当主机获取到用户Java程序发送的数据库操作指
令后,从数据库操作指令中提取用于指示具体操作内容的数据,并调用预先配置的用户端
RPC协议,按照协议中的Protocol Buffer协议对数据进行序列化处理,生成RPC消息。然后
基于HTTP/2协议传输将RPC消息发送给硬件加速数据库的硬件加速系统。硬件加速系统通
过调用服务端RPC协议中的Protocol Buffer协议对RPC消息中的结构体进行反序列化处
理,并根据反序列化得到的数据驱动硬件驱动程序,执行相应的数据库访问操作,并在得到
访问结果后,将访问结果反馈给用户Java程序。在图3所示的改进方案中通过RPC技术取代
JNI技术,解决了图2方案中由JNI带来的问题。但是该改进方案仍旧不完美,实际上相关技
术常常会因为Protocol Buffer协议存在序列化、反序列化速率较慢,数据传输前需要打
包,数据被接收到后需要解包的问题,导致主机和硬件加速系统之间数据传输耗时较长。
[0058] 针对相关技术存在的上述问题,本公开实施例在图3所示方案的基础上进行了改进,通过采用序列化、反序列化速率更高的数据结构序列化协议代替RPC中的Protocol 
Buffer协议,提高了硬件加速数据库访问过程中的数据序列化和反序列化的速率,降低了
数据传输时延。
[0059] 图4是本公开实施例提供的一种硬件加速数据库的访问方法的流程图。如图4所示,本实施例中硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,其中,
用户Java程序执行的是Java语句,硬件加速系统执行的是如下语句中的一种:C语言语句、C
++语句。本实施例提供的方法包括:
[0060] 步骤401、第一主机获取第一主机中的用户Java程序向JDBC API发送的数据库操作指令。
[0061] 步骤402、第一主机调用用户端RPC协议中内置的数据结构序列化协议对数据库操作指令中的数据进行序列化处理,生成第一RPC消息。
[0062] 步骤403、第一主机将第一RPC消息发送给硬件加速数据库的硬件加速系统,以使硬件加速系统基于服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据
进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作。
[0063] 本实施例所称的数据库操作指令至少包括如下中的一种:查询指令、插入指令、删除指令、数据修改指令,以及用于对数据库系统进行设置的指令。
[0064] 本实施例中,用户端RPC协议和服务端RPC协议中内置的数据结构序列化协议是同一种协议,该数据结构序列化协议的序列化、反序列化速率高于Protocol Buffer协议。比
如,在一种实施方式中,本实施例所称的数据结构序列化协议可被具体为如下中的一种:
FlatBuffers、AVRO、MessagePack、Hessian、自定义序列化协议。
[0065] 以FlatBuffers为例,当使用FlatBuffers作为用户端RPC协议和服务端RPC协议的数据结构序列化协议时,需要编写.fbs文件,该.fbs文件是生成RPC协议的必须文件,.fbs
文件中定义了RPC消息的格式,传输的数据结构体以及数据类型三类信息。实际中可以根据
需要对该三类信息进行具体的设定,比如,在一种可行的设定方式中可以根据JDBC与数据
库交互的情况将RPC消息划分为如下几种:建立连接消息,发送“Select”类型语句指令消
息,发送“Update”类型语句指令消息,以及其他操作或设置数据库的消息。定义这些消息包
括定义消息的名称、采用的数据结构以及发送或接收这些消息所需要的RPC方法。根据上述
所写的.fbs文件,使用FlatBuffers的可执行工具flatc,即可生成用于生成用户端RPC协议
的java文件和用于生成服务端RPC协议的C/C++的头文件。当然这里虽然是以FlatBuffers
协议为例进行的示例说明,但本领域技术人员可以理解的是使用其他数据结构序列化协议
替换Protocol Buffer协议的方法与上述FlatBuffers协议的方法是类似的,在这里不在赘
述。
[0066] 示例的,图5是本公开实施例提供的一种硬件加速数据库的访问方法的系统架构图。如图5所示,在图5所示的架构中用户Java程序和硬件加速数据库可以同在一个主机上,
比如都设置在第一主机上,也可以在不同的主机上,比如可以将用户Java程序装载在第一
主机上,将硬件加速数据库装载在第二主机上。硬件加速数据库包括硬件加速系统和数据
库,其中硬件加速系统的硬件驱动程序执行C++程序。用户端RPC协议和服务端RPC协议被具
体为gRPC框架下的协议,在用户端RPC协议和服务端RPC协议中采用FlatBuffers协议对数
据进行序列化和反序列化处理。
[0067] 在图5所示的系统中第一主机被配置为拦截并获取用户Java程序向JDBC API发送的数据库操作指令。
[0068] 第一主机拦截到用户Java程序发送的数据库操作指令后,从数据库操作指令中提取用于指示具体操作内容的数据,并调用预先配置的用户端RPC协议,按照协议中重新定义
的FlatBuffers序列化方式对数据进行序列化,生成第一RPC消息。然后基于HTTP/2协议传
输将第一RPC消息发送给硬件加速数据库的硬件加速系统。相应的硬件加速系统通过调用
服务端RPC协议中的FlatBuffers协议对第一RPC消息中的数据进行反序列化处理,进而根
据反序列化得到的数据驱动硬件驱动程序,执行相应的数据库访问操作,比如当数据库操
作指令为查询指令时,则根据查询指令中用于指示具体查询内容数据,在数据库中执行数
据查询处理。再比如,当数据库操作指令为删除指令时,可以根据删除指令中携带的用于指
示具体删除对象的数据在数据库中执行删除操作。
[0069] 当然,虽然图5是以FlatBuffers协议为例进行的说明,但是并不妨碍本领域技术人员理解,在采用其他数据结构序列化协议时,对硬件加速数据库的访问方法与
FlatBuffers的情况类似,比如,图6是本公开实施例提供的又一种硬件加速数据库的访问
方法的系统架构图,在图6所示系统架构中,也可以采用自定义的序列化协议替换用户端
RPC协议和服务端RPC协议中原生的Protocol Buffer协议。其中,采用自定义序列化协议实
现硬件加速数据库访问的方法可以参照上述采用FlatBuffers协议的情况,在这里不在赘
述。
[0070] 本实施例中,第一主机通过获取用户Java程序向JDBC API发送的数据库操作指令,并采用自身装载的用户端RPC协议中的数据结构序列化协议对获取到的数据库操作指
令中的数据进行序列化处理,生成第一RPC消息,通过将第一RPC消息发送给硬件加速数据
库的硬件加速系统,使得硬件加速系统基于服务端RPC协议中内置的数据结构序列化协议,
对第一RPC消息中的数据进行反序列化处理,并根据反序列化处理结果执行相应的数据库
访问操作,从而实现了第一主机对硬件加速数据库的跨语言访问。并且在本实施例中,用户
端RPC协议和服务端RPC协议中的原生Protocol Buffer协议被替换成了另一种序列化速率
更高的数据结构序列化协议,因而能够提高数据库访问过程中的数据序列化速度,降低第
一主机和硬件加速系统之间的数据传输时延。
[0071] 图7是本公开实施例提供的又一种硬件加速数据库的访问方法的流程图,如图7所示,本实施例提供的方法包括如下步骤:
[0072] 步骤701、第一主机获取第一主机中的用户Java程序向JDBC API发送的数据库操作指令。
[0073] 步骤702、第一主机调用用户端RPC协议中内置的数据结构序列化协议对数据库操作指令中的数据进行序列化处理,生成第一RPC消息。
[0074] 步骤703、第一主机将第一RPC消息发送给硬件加速数据库的硬件加速系统,以使硬件加速系统基于服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据
进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作。
[0075] 步骤704、第一主机接收硬件加速系统反馈的第二RPC消息,第二RPC消息是硬件加速系统依据第一RPC消息执行数据库访问操作后,根据数据结构序列化协议对访问结果进
行序列化处理得到的。
[0076] 步骤705、第一主机基于用户端RPC协议中配置的数据结构序列化协议对第二RPC消息中的数据进行反序列化处理,得到访问结果。
[0077] 步骤706、第一主机将访问结果发送给用户Java程序。
[0078] 以FlatBuffers协议为例,图8是本公开实施例提供的又一种硬件加速数据库的访问方法的系统架构图。在图8中,硬件加速系统在接收到第一RPC消息后,根据第一RPC消息
对数据库进行访问操做,在得到访问结果后,采用自身装载的服务端RPC协议中的
FlatBuffers协议对访问结果进行序列化处理,生成第二RPC消息,然后基于HTTP/2协议传
输将第二RPC消息发送给第一主机,第一主机在接收到RPC消息后,基于自身装载的用户端
RPC协议中的FlatBuffers协议从第二RPC消息中反序列化得到硬件加速系统的访问结果,
从而将该访问结果返回给用户Java程序结束本次数据库访问流程。
[0079] 在本实施例中图8仅用于示例说明,而不是对本公开的唯一限定。
[0080] 本实施例中,硬件加速系统在获得访问结果后,通过诸如FlatBuffers等序列化速率更高的数据结构序列化协议代替RPC协议中的Protocol Buffer协议对访问结果进行序
列化处理,能够提高访问结果的序列化速度,缩短访问结果返回用户Java程序的时间,减小
了时间延迟。
[0081] 图9是本公开实施例提供的又一种硬件加速数据库的访问方法的流程图,如图9所示,该方法包括如下步骤:
[0082] 步骤901、硬件加速数据库的硬件加速系统接收第一主机发送的第一RPC消息。
[0083] 其中,第一RPC消息为第一主机采用用户端RPC协议中内置的数据结构序列化协议对用户Java程序向JDBC API发送的数据库操作指令中的数据进行序列化处理得到的。
[0084] 本实施例所称的硬件加速数据库可以被配置在第一主机或者第二主机上。
[0085] 本实施例所称的硬件加速系统执行的编程语言与所述用户Java程序执行的编程语言不同。
[0086] 步骤902、采用服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据进行反序列化处理。
[0087] 本实施例所称的数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0088] 在一种可行的实施方式中,本实施例所称的数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。
[0089] 步骤903、根据反序列化处理的结果执行相应的数据库访问操作。
[0090] 在一种可行的实施方式中,本实施例在执行数据库访问操作之后,还可以包括如下方法:
[0091] 基于服务端RPC协议中内置的数据结构序列化协议对访问结果进行序列化处理得到第二RPC消息;将第二RPC消息发送给第一主机,以使第一主机基于所述用户端RPC协议中
内置的数据结构序列化协议对第二RPC消息中的数据进行反序列化处理,得到访问结果,并
将访问结果发送给用户Java程序。
[0092] 本实施例的执行方式和有益效果与图4和图7实施例类似,在这里不再赘述。
[0093] 图10是本公开实施例提供的一种数据库访问装置的结构示意图,如图10所示,装置100包括:
[0094] 获取模块110,用于获取第一主机中的用户Java程序向Java数据库连接JDBC的应用程序接口API发送的数据库操作指令。
[0095] 数据序列化模块120,用于调用用户端远程过程调用RPC协议中内置的数据结构序列化协议对数据库操作指令中的数据进行序列化处理,生成第一RPC消息。
[0096] 第一发送模块130,用于将第一RPC消息发送给硬件加速数据库的硬件加速系统,以使硬件加速系统基于服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的
数据进行反序列化处理,并根据反序列化处理结果执行相应的数据库访问操作。
[0097] 其中,硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0098] 在一种实施方式中,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。
[0099] 在一种实施方式中,装置100还可以包括:
[0100] 接收模块,用于接收硬件加速系统反馈的第二RPC消息,第二RPC消息是硬件加速系统依据第一RPC消息执行数据库访问操作后,根据所述数据结构序列化协议对访问结果
进行序列化处理得到的。
[0101] 数据反序列化模块,用于基于数据结构序列化协议对第二RPC消息中的数据进行反序列化处理,得到访问结果。
[0102] 第二发送模块,用于将访问结果发送给用户Java程序。
[0103] 在一种实施方式中,硬件加速数据库设置在第二主机中。
[0104] 本实施例提供的装置能够执行图4或图7实施例的方法,其执行方式和有益效果类似在这里不在赘述。
[0105] 图11是本公开实施例提供的一种数据库访问装置的结构示意图,如图11所示,装置200包括:
[0106] 接收模块210,用于接收第一主机向硬件加速数据库的硬件加速系统发送的第一RPC消息,第一RPC消息为第一主机采用用户端RPC协议中内置的数据结构序列化协议对用
户Java程序向JDBC API发送的数据库操作指令中的数据进行序列化处理得到的。
[0107] 数据反序列化模块220,用于采用服务端RPC协议中内置的数据结构序列化协议,对第一RPC消息中的数据进行反序列化处理。
[0108] 访问执行模块230,用于根据反序列化处理的结果执行相应的数据库访问操作。
[0109] 其中,硬件加速系统执行的编程语言与用户Java程序执行的编程语言不同,数据结构序列化协议的序列化速率高于Protocol Buffer协议。
[0110] 在一种实施方式中,所述数据结构序列化协议包括如下中的一种:FlatBuffers、AVRO、MessagePack、Hessian。
[0111] 在一种实施方式中,装置200还可以包括:
[0112] 数据序列化模块,用于基于服务端RPC协议中内置的数据结构序列化协议对访问结果进行序列化处理得到第二RPC消息。
[0113] 发送模块,用于将第二RPC消息发送给第一主机,以使第一主机基于用户端RPC协议中内置的数据结构序列化协议对第二RPC消息中的数据进行反序列化处理,得到访问结
果,并将访问结果发送给用户Java程序。
[0114] 在一种实施方式中,硬件加速数据库设置在第二主机中。
[0115] 本实施例提供的装置能够执行图9实施例的方法,其执行方式和有益效果类似在这里不在赘述。
[0116] 本公开实施例还提供一种主机包括处理器、存储器以及计算机程序;其中,该计算机程序存储在存储器中,并被配置为由处理器执行以实现图4或图7实施例的方法。
[0117] 本公开实施例还提供一种硬件加速系统包括处理器、存储器以及计算机程序;其中,该计算机程序存储在存储器中,并被配置为由处理器执行以实现图9实施例的方法。
[0118] 本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现上述图4‑图9中任一实施例的方法。
[0119] 需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之
间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在
涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些
要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设
备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除
在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0120] 以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原
理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会
被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的
范围。