数据库访问方法、装置和数据库系统与流程

文档序号:12596179阅读:202来源:国知局
数据库访问方法、装置和数据库系统与流程

本发明实施例涉及数据库技术,尤其涉及一种数据库访问方法、装置和数据库系统。



背景技术:

在信息日益膨胀的今天,存储系统变的越来越重要,存储系统主要分为关系型数据库和非关系型数据库,在传统企业中主要使用了关系型数据库,关系型数据库主要通过中间件实现的数据库读写分离和横向扩展(Scale horizontally,简称Scale-Out),但这类方案无法兼顾性能和强一致性,需要应用层自身考虑应用读写一致性,对于传统企业类用户就要修改应用来适配这种新架构。

这类中间件主要在互联网应用中兴起,为了提高并发性能,很多互联网场景一般选择最终一致性的读写分离,因为写库到读库之间使用同步复制会制约写性能,所以一般使用异步复制,写库和读库的数据是最终一致性的,在性能和一致性两者间做了取舍,但当应用要求读写强一致性时,就要要求应用来选择访问哪个库,互联网应用场景大多没有考虑实现读写强一致性的场景,无法同时满足读写分离和读写强一致性要求。



技术实现要素:

本发明实施例提供一种数据库访问方法、装置和数据库系统,能够保证数据的读写强一致性。

本发明第一方面提供一种数据库访问方法,中间件首先接收来自客户端的数据访问请求,然后,根据数据访问请求中携带的待访问的数据的键值确定待访问的数据对应的路由表项,最后,将数据访问请求发送至该路由表项所指示的目标数据库,其中,路由表项中包含键值和待访问数据的目标数据库,目标数据库为读写库或只读库。中间件还接收来自目标数据库返回的结 果,将结果返回给客户端。所述方法通过为中间件增加路由功能,使得中间件根据路由表项确定要访问的目标数据库,对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

在本发明第一方面的基础上,在一种可能的实现方式中,如果目标数据库为只读库,且数据库包含至少两个只读库,那么中间件根据至少两个只读库的负载大小,从至少两个只读库中确定一个目标只读库,并将数据访问请求发送至目标只读库,实现数据库之间的负载均衡。

在本发明第一方面的基础上,在一种可能的实现方式中,中间件接收数据访问请求之前,还需要将待访问的数据写入目标数据库,具体的中间件接收来自客户端的数据写入请求,数据写入请求中携带待写入的数据,待写入的数据中包含该键值,然后,为待写入的数据创建路由表项,将路由表项中的目标数据库设置为读写库,最后将数据写入请求发送至读写库,以将待写入的数据写入读写库,读写库还要将待写入的数据同步到只读库,保持读写库和制度库的数据的一致性。相应的,中间件将数据写入请求发送至读写库之后,在确定读写库将待写入的数据同步到只读库时,将该路由表项的目标数据库设置为只读库,后续就可以从只读库中访问待写入的数据。

在本发明第一方面的基础上,在一种可能的实现方式中,如果接收到来自客户端发送的数据更新请求,则根据数据更新请求中携带的待更新的数据的键值确定待更新的数据对应的该路由表项,由于数据更新请求需要修改数据,因此中间件将该路由表项中的目标数据库设置为读写库,将数据更新请求发送至读写库;并在确定读写库将待更新的数据同步到只读库后,将路由表项的目标数据库设置为只读库。

在本发明第一方面的基础上,在一种可能的实现方式中,如果中间件确定只读库发生故障,那么将路由表项中的目标数据库设置为读写库,以保证数据库的强一致性。

在本发明第一方面的基础上,在一种可能的实现方式中,当中间件接收到来自客户端的数据删除指令时,根据数据删除指令中携带的待删除的数据的该键值确定待删除的数据对应的该路由表项,删除路由表项,并将数据删除指令发送至读写库,以删除读写库中的待删除的数据。

本发明第二方面提供一种数据库访问方法,中间件首先接收来自客户端 的数据写入请求,然后,根据数据写入请求中包括的待写入的数据,为待写入的数据创建路由表项,路由表项中包含键值和待写入数据的目标数据库,目标数据库为读写库最后,最后将数据写入请求发送至读写库,以将待写入的数据写入读写库,并在确定读写库将待写入的数据同步到只读库是,将该路由表项的目标数据库设置为只读库,后续就可以从只读数据库访问待写入的数据。所述方法通过为待写入的数据创建路由表项,根据路由表项能够获取要访问目标数据库,对待访问数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

在本发明第二方面的基础上,在一种可能的实现方式中,当接收到来自客户端发送的数据访问请求时,根据数据访问请求中携带的待访问的数据的键值确定待访问的数据对应的该路由表项,其中,路由表项中包含该键值和待访问数据的目标数据库,最后将数据访问请求发送至目标数据库,以获取待访问的数据,该目标数据库为读写库或只读库。

本发明第三方面提供一种数据库访问装置,该数据库访问装置包括:接收模块、第一确定模块和发送模块。接收模块用于接收来自客户端的数据访问请求,第一确定模块用于根据数据访问请求中的携带待访问的数据的键值确定待访问的数据对应的路由表项,路由表项中包含键值和待访问数据的目标数据库,目标数据库为读写库或只读库,发送模块用于将数据访问请求发送至目标数据库,从目标数据库获取待访问的数据。

在本发明第三方面的基础上,在一种可能的实现方式中,如果目标数据库为只读库,且数据库包含至少两个只读库,则发送模块根据至少两个只读库的负载大小,从至少两个只读库中确定一个目标只读库,将数据访问请求发送至目标只读库。

在本发明第三方面的基础上,在一种可能的实现方式中,接收模块还用于接收来自客户端的数据写入请求,相应的,数据库访问装置还包括创建模块,创建模块用于根据数据写入请求中携带的待写入的数据,为待写入的数据创建路由表项,将路由表项中的目标数据库设置为读写库,发送模块还用于将数据写入请求发送至读写库。数据库访问装置还可以包括第二确定模块和设置模块,第二确定模块用于确定读写库是否将待写入的数据同步到只读库,设置模块,用于在第二确定模块确定读写库将待写入的数据同步到只读 库时,将该路由表项的目标数据库设置为只读库。

在本发明第三方面的基础上,在一种可能的实现方式中,接收模块还用于接收来自客户端的数据更新请求,第一确定模块还用于根据数据更新请求中携带的待更新的数据的键值,确定待更新的数据对应的路由表项,相应的,数据访问装置还包括设置模块,设置模块用于将路由表项中的目标数据库设置为读写库,发送模块还用于将数据更新请求发送至读写库,设置模块还用于在确定读写库将待更新的数据同步到只读库后,将路由表项的目标数据库设置为只读库。

在本发明第三方面的基础上,在一种可能的实现方式中,数据访问装置还包括故障处理模块,故障处理模块用于确定只读库发生故障,将路由表项中的目标数据库设置为读写库,以保证数据库的读写强一致性。

在本发明第三方面的基础上,在一种可能的实现方式中,接收模块还用于接收来自目标数据库返回的结果,并将结果返回给客户端。

在本发明第三方面的基础上,在一种可能的实现方式中,接收模块还用于接收来自客户端的数据删除指令,第一确定模块还用于根据数据删除指令中携带的待删除的数据的键值确定待删除的数据对应的路由表项,相应的,数据库访问装置还包括删除模块,删除模块用于删除路由表项,发送模块还用于将数据删除指令发送至读写库。

本发明第四方面提供一种数据库访问装置,该数据库访问装置包括接收模块、创建模块和发送模块。接收模块用于接收来自客户端的数据写入请求,创建模块用于根据数据写入请求中携带的待写入的数据,为待写入的数据创建路由表项,路由表项中包含键值和待写入数据的目标数据库,该目标数据库为读写库,发送模块用于将数据写入请求发送至读写库。

在本发明第四方面的基础上,在一种可能的实现方式中,数据库访问装置还包括第二确定模块和设置模块,第二确定模块用于确定读写库将待写入的数据是否同步到只读库,设置模块用于在第二确定模块确定读写库将待写入的数据同步到只读库时,将路由表项的目标数据库设置为只读库。

在本发明第四方面的基础上,在一种可能的实现方式中,接收模块还用于接收来自客户端的数据访问请求,相应的,数据库访问装置还包括第一确定模块,第一确定模块,根据数据访问请求中携带的待访问的数据的键值确 定待访问的数据对应的路由表项,该路由表项中包含键值和待访问数据的目标数据库,目标数据库为读写库或只读库,发送模块还用于将数据访问请求发送至目标数据库。

本发明第五方面提供一种数据库系统,该数据库系统包括:客户端、数据库访问装置和数据库,该数据库包含读写库和只读库,该数据库访问装置用于执行本发明第一方面以及第一方面的任一可能的实现方式提供的数据库访问方法。

本发明第六方面提供一种数据库系统,该数据库系统包括:客户端、数据库访问装置和数据库,该数据库包含读写库和只读库,该数据库访问装置用于执行本发明第二方面以及第二方面的任一可能的实现方式提供的数据库访问方法。

本发明实施例提供的数据库访问方法、装置和数据库系统,通过为数据库中的数据创建路由表项,路由表项中包括键值和目标数据库,目标数据库为读写库或只读库,根据路由表项确定要访问的目标数据库。所述方法通过为中间件增加路由功能,使得中间件根据路由表项确定要访问的目标数据库,对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例所适用的数据库系统的架构图;

图2为本发明实施例一提供的数据库访问方法的流程图;

图3为数据写入过程的流程图;

图4为本发明实施例二提供的数据库访问方法的流程图;

图5为数据查询过程的流程图;

图6为本发明实施例三提供的数据库访问方法的流程图;

图7为数据修改过程的流程图;

图8为本发明实施例四提供的数据库访问方法的流程图;

图9为数据删除过程的流程图;

图10为本发明实施例五提供的数据库访问装置的结构示意图;

图11为本发明实施例六提供的数据库访问装置的结构示意图;

图12为本发明实施例七提供的数据库访问装置的结构示意图;

图13为本发明实施例八提供的数据库访问装置的结构示意图;

图14为本发明实施例九提供的数据库访问装置的结构示意图;

图15为本发明实施例十提供的数据库访问装置的实体结构的示意图。

具体实施方式

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

本发明实施例的方法应用在基于中间件的分布式数据库系统中,图1为本发明实施例所适用的数据库系统的架构图,如图1所示,数据库系统包括客户端、中间件和数据库,数据库包含读写(Read-Write,简称RW)库和只读库。中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。本实施例中为了对应用透明实现读写强一致性,在中间件中增加了路由系统,路由系统中存储数据库中每张表中每个主键所在行的同步状态和访问目标数据库,中间件可以包括多个服务器,服务器用于完成客户端和分布式存储系统的通信。路由系统中包括多个路由表项,每个路由表项包括:索引值和目标数据库(Des),索引值用来查询路由系统中的路由表项,索引值为数据记录的主键标识(ID)和/或预留字段(Other-key),对于数据库表中的数据记录,如果有主键则将主键作为索引值,对于使用非主键或多个主键的数据记录,可以使用预留字段作为索引值,因此,本发明中的索引值可以为多个字段。目标数据库表示访问的数据库是只读库还是读写库,读写库用RW表示,只读库用R表示。读写库既可以进行 写操作也可以进行读操作,只读库只能进行读操作。图1中数据库包括两个读写库:读写库1和读写库2,两个读写库构成主备冗余,读写库1为主节点,读写库2为备份节点,数据库包括三个只读库:只读库1、只读库2和只读库3,图1只是举例说明,数据库还可以包含更多或更少的读写库和只读库,例如,数据库只包括一个读写库和一个只读库。

图2为本发明实施例一提供的数据库访问方法的流程图,本实施例以数据插入流程为例进行说明,本实施例的方法由中间件执行,如图2所示,本实施例的方法可以包括以下步骤:

步骤101、接收来自客户端的数据写入请求,数据写入请求中携带待写入的数据,待写入的数据中包含键值。

客户端通过数据库连接(Java Data Base Connectivity,简称java JDBC)或者开放数据库互连(Open Database Connectivity,简称ODBC)协议提供的应用程序编程接口((Application Programming Interface,简称API)向中间件通信,中间件接收客户端发送的数据写入请求,数据写入请求中包括待写入的数据的标识,待写入的数据中包括键值,键值可以为主键标识和/或预留字段,即键值可以只包括主键,或者只包括预留字段,或者包括主键和预留字段,其中,主键和预留字段都可以为多个字段。

步骤102、根据待写入的数据,为待写入的数据创建路由表项,路由表项中包含键值和待写入数据的目标数据库。

中间件接收到数据写入请求后,将数据写入请求发送给中间件的路由系统,路由系统生成待写入的数据对应的路由表项,待写入的数据对应的路由表项包括:索引值和目标数据库,索引值为键值,输入插入请求为一个写操作,写操作访问的目标数据库为读写库,因此将目标数据库设置为读写库。

步骤103、将数据写入请求发送给读写库。

在生成路由表项后,中间件根据待写入数据对应的路由表项,确定数据写入请求要访问的目标数据库为读写库,则将数据写入请求发送给读写库,以使读写库将待写入的数据写入读写库,并将待写入的数据从读写库同步到只读库,在写入完成之后,读写库向中间件返回写入成功响应,中间件将写入成功响应返回给APP。其中,中间件在将数据写入请求发送给读写库时,是根据数据写入请求中包括的地址信息将数据写入请求发送给读写库的。读 写库在将待写入的数据库写入读写库中后,还需要将待写入的数据同步到只读库,读写库可以采用异步复制的方式将待写入的数据同步到只读库。

可选的,本实施例的方法还包括:确定读写库将待写入的数据同步到只读库,并将路由表项的目标数据库设置为只读库。具体的,在同步完成之后,读写库会向中间件返回同步完成确定消息,中间件收到读写库返回的同步完成确定消息后,确认同步操作完成,此时,读写库和只读库中的数据保持一致。中间件在确定数据同步操作完成之后,对待访问数据对应的路由表项进行更新,由于此时数据同步操作已经完成,读写库和只读库中的数据保持一致,如果需要对待写入的数据进行读操作,那么访问只读库就可以,因此,路由系统将待写入的数据对应的路由表项的目标数据库更新为只读库。

图3为数据写入过程的流程图,图2所示流程图以从中间件为执行主体进行描述,如3所示流程图是从整个数据库系统的交互过程进行描述,如图3所示,1、中间件接收来自客户端的数据写入请求;2、路由系统根据数据写入请求包括的待写入的数据为待写入的数据创建路由表项,如图3所示,该路由表项的键值包括为主键ID和Other-key,主键ID为4,Other-key的取值为NULL,Des的取值为RW;3、中间件将数据写入请求发送给读写库;4、读写库采用异步复制方式完成待写入的数据的同步;5、路由系统将路由表项的目标数据库设置为只读库,如图3所示,更新后的路由表项的Des的取值为R。

本实施例的方法,中间件通过接收客户端发送的数据写入请求,根据待写入的数据创建待写入的数据对应的路由表项,该路由表项的目标数据库为读写库,然后,将数据写入请求发送给读写库。所述方法通过为待写入的数据创建路由表项,后续可以根据键值查询该路由表项,根据路由表项确定要访问的目标数据库,实现对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

在实施例一的基础上,可选的待写入的数据对应的路由表项还包括时间戳(Req_time)和数据同步标识(Read-rsync),时间戳为中间件收到SQL修改请求的时间,SQL修改请求可以为数据写入请求或者数据更新请求,数据同步标识用于表示从读写库到只读库之间的数据同步是否完成,如果同步完成则数据同步标识取值为Y,如果同步没有完成则数据同步标识取值为N,中 间件可以采用JAVA中的new Date().getTime()方法获取毫秒级的时间戳。实施例一中,待访问数据对应的路由表项中包括的时间戳为数据写入请求的接收时间戳,在创建待写入的数据对应的路由表项时,此时还没有将待写入的数据写入读写库,因此待写入的数据对应的路由表项中包括的数据同步标识为同步未完成标识,在确定读写库将待访问数据同步到只读库后,中间件将数据同步标识更新为同步完成标识。

图4为本发明实施例二提供的数据库访问方法的流程图,本实施例以数据查询流程为例进行说明,如图4所示,本实施例提供的方法可以包括以下步骤:

步骤201、接收来自客户端的的数据访问请求,数据访问请求中携带待访问的数据的键值。

步骤202、根据键值确定待访问的数据对应的路由表项。

本实施例中以数据访问请求中包括的待访问的数据的键值为上述待写入的数据中包含的键值,即本实施例是在实施例一的基础上,对写入的待数据进行查询,当然,待访问的数据的键值可以不为上述待写入的数据中包含的键值,此时,路由系统根据待访问的数据的键值查询路由表,确定路由表中是否有待访问的数据的键值对应的路由表项,如果没有查询到待访问的数据的键值对应的路由表项,则向客户端返回访问失败,如果查询到待访问的数据的键值对应的路由表项,则执行步骤203。

本实施例中,数据访问请求对应的路由表项包含键值和待访问数据的目标数据库,目标数据库为读写库或只读库。

步骤203、将数据访问请求发送至目标数据库数据。

目标数据库可能为读写库也可能为只读库,中间件根据数据访问请求中包括的地址信息将数据访问请求发送给目标数据库,目标数据库根据数据访问请求查询待访问的数据,并将待访问的数据携带在查询结果中返回给中间件,中间件接收来自目标数据库返回的结果,并将结果返回给客户端。

如果目标数据库为只读库,且数据库包含至少两个只读库,则可以根据至少两个只读库的负载大小,从至少两个只读库中确定一个目标只读库,并将数据访问请求发送至目标只读库。使得多个只读库之间负载均衡,从而提高了数据库系统的整体性能。

图5为数据查询过程的流程图,图4所示流程图以从中间件为执行主体进行描述,如5所示流程图是从整个数据库系统的交互过程进行描述,如图5所示,1、中间件接收来自客户端的数据访问请求;2、路由系统根据键值确定待访问的数据的对应的路由表项;如图3所示,该路由表项的键值包括主键ID和Other-key,主键ID为4,Des的取值为RW;3、中间件将数据写入请求发送给路由表项中包括的目标数据库RW。

本实施例的方法,中间件通过接收客户端发送的数据访问请求,根据数据访问请求中包括的键值确定数据访问请求对应的路由表项,将数据访问请求发送至路由表项中包括的目标数据库进行查询。所述方法中,中间件通过查询路由表项,获取待访问的数据的目标数据库,对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

在实施例二的基础上,可选的路由表项中还可以包括时间戳和数据同步标识,相应的,中间件接收到应用发送的数据访问请求时,还需要确定数据访问请求的接收时间戳,判断数据访问请求的接收时间戳是否等于数据访问请求对应的路由表项中包括的时间戳。如果数据访问请求的接收时间戳不等于该路由表项中包括的时间戳,说明待访问的数据与路由表项的键值对应的数据不是并发数据,可以从该路由表项中包括的目标数据库读取数据。如果数据访问请求的接收时间戳等于路由表项中包括的时间戳,说明待访问的数据与路由表项的键值对应的数据是并发数据,此时并发操作有可能对该路由表项的键值对应的数据进行了修改,为了保证读写一致性,需要从读写库读取待访问的数据。

图6为本发明实施例三提供的数据库访问方法的流程图,本实施例以数据修改流程为例进行说明,如图6所示,本实施例提供的方法可以包括以下步骤:

步骤301、接收来自客户端的数据更新请求,数据更新请求中携带待更新的数据,待更新的数据中包含键值。

本实施例中以数据更新请求中包括的待更新的数据的键值为上述待写入的数据的键值,即本实施例是在实施例一或实施例二的基础上,对已经写入的数据进行修改,当然,待更新的数据的标识可以不为上述待写入的数据的键值,此时,路由系统根据待更新的数据的键值查询路由表,确定待更新的 数据对应的路由表项。

步骤302、根据键值确定待更新的数据对应的路由表项。

步骤303、将路由表项中的目标数据库设置为读写库。

步骤304、将数据更新请求发送至读写库。

数据更新请求用于对数据进行修改,即属于写操作,因此,中间件确定需要对读写库进行访问,将路由表项中的目标数据库设置为读写库,将数据更新请求发送至读写库。

本实施例中,步骤304与步骤302和303可以同时执行。

步骤305、在确定读写库将待更新的数据同步到只读库之后,将路由表项中的目标数据库设置为只读库。

中间件将数据更新请求发送给读写库后,读写库根据数据更新请求对待更新的数据进行修改,修改完成之后向中间件返回更新成功响应,中间件向客户端返回更新成功响应,同时读写库还要将待更新的数据同步到只读库,在同步完成之后,向中间件返回同步完成确定消息,中间件根据该同步完成确定消息确定数据库将待更新的数据从读写库同步到只读库,则对数据更新请求对应的路由表项进行更新,将路由表项中包括的目标数据库设置为只读库。

图7为数据修改过程的流程图,图6所示流程图以从中间件为执行主体进行描述,如7所示流程图是从整个数据库系统的交互过程进行描述,如图7所示,1、中间件接收客户端发送的数据更新请求;2、中间件将数据更新请求发送给读写库;3、路由系统根据数据更新请求中包括的待更新的数据的键值确定数据待更新的数据对应的路由表项,将路由表项中的目标数据库设置为读写库;如图7所示,该路由表项的Des的取值被更新为RW;4、读写库采用异步复制方式完成待更新的数据的同步;5、将路由表项的目标数据库设置为只读库,如图7所示,更新后的路由表项的Des的取值为R。

本实施例的方法,中间件接收客户端发送的数据更新请求,将数据更新请求发送给读写库,同时根据数据更新请求中包括的待更新的数据的键值查询路由表,确定待更新的数据对应的路由表项,将路由表项中的目标数据库设置为读写库,在确定读写库将待更新的数据同步到只读库之后,将路由表项中包括的目标数据库更新为只读库。所述方法中间件通过更新路由表项, 使得中间件能够获取待访问的数据的目标数据库,对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

在实施例三的基础上,可选的路由表项中还可以包括时间戳和数据同步标识,相应的,中间件在接收到数据更新请求后,还需要确定数据更新请求的接收时间戳,在确定数据更新请求对应的路由表项后,将该路由表项中包括的时间戳更新为数据更新请求的接收时间戳,此时由于数据同步操作还没有完成,需要将该路由表项中包括的数据同步标识更新为同步未完成标识,中间件在确定待更新的数据同步到只读库之后,将该路由表项中包括的数据同步标识更新为同步完成标识。

图8为本发明实施例四提供的数据库访问方法的流程图,本实施例以数据删除流程为例进行说明,如图8所示,本实施例提供的方法可以包括以下步骤:

步骤401、接收客户端发送的数据删除指令,数据删除指令中携带待删除的数据的键值。

本实施例中以待删除的数据的键值为上述待写入的数据的键值,即本实施例是在实施例一至实施例三任意实施例的基础上,对待写入的数据进行删除,当然,待删除的数据的键值也可以不为上述待写入的数据的键值,此时,路由系统根据待删除的数据的键值查询路由表,确定数据删除指令对应的路由表项。

步骤402、根据键值确定待删除的数据对应的路由表项。

步骤403、删除路由表项。

步骤404、将数据删除指令发送至读写库。

中间件将数据删除指令发送给读写库,以使得读写库根据待删除的数据的键值对待删除的数据进行删除,读写库在删除本地保存的待删除的数据后,向中间件返回删除成功响应,中间件向APP返回删除成功响应,同时读写库采用异步复制的方法删除只读库中的待访问数据,保持读写库和只读库的数据一致性,并在同步完成后,向中间件返回同步完成确定消息。

图9为数据删除过程的流程图,图8所示流程图以从中间件为执行主体进行描述,如9所示流程图是从整个数据库系统的交互过程进行描述,如图9所示,1、中间件接收客户端发送的数据删除指令;2、中间件将数据删除 指令发送给读写库;3、路由系统删除待删除的数据对应的路由表项;4、读写库采用异步复制方式删除只读库中的待删除的数据。需要说明的是,3和4在执行时没有先后顺序,也可以同时执行。

本实施例的方法,中间件接收客户端发送的数据删除指令,将数据删除指令发送给读写库,以使得读写库待删除的数据进行删除,并删除只读库中的待访问数据,同时根据据删除指令中携带待删除的数据的键值确定待删除的数据对应的路由表项,并删除路由表项。所述方法在删除待删除的数据之后,中间件会相应删除路由表项,保证路由表中的路由表项的有效性,能够对待访问的数据进行精确路由,不需要对客户端进行任何修改就能够保证数据的一致性。

需要说明的是,上述实施例一至实施例四中,只读库的数量可以为一个或多个,当只读库的数量为一个时,如果中间件确定只读库故障;则将路由表中的目标数据库修改为读写库,此时,只能从读写库中读取数据,从而保证数据库的强读写一致性。由于只读库故障,只需修改路由系统中相应路由表项的Des字段为RW,即可逐条动态引导流量,使得数据库的维护更加高效、简便。

图10为本发明实施例五提供的数据库访问装置的结构示意图,如图10所示,本实施例提供的数据库访问装置包括:接收模块11、第一确定模块12和发送模块13。

接收模块,用于接收来自客户端的数据访问请求,数据访问请求中携带待访问的数据的键值。

第一确定模块12,用于根据所述键值确定所述待访问的数据对应的路由表项,其中,所述路由表项中包含所述键值和所述待访问数据的目标数据库,所述目标数据库为所述读写库或所述只读库。

发送模块13,用于将所述数据访问请求发送至所述目标数据库。

可选的,如果目标数据库为只读库,数据库包含至少两个只读库,则发送模块13具体用于:根据所述至少两个只读库的负载大小,从所述至少两个只读库中确定一个目标只读库,并将所述数据访问请求发送至所述目标只读库。

图11为本发明实施例六提供的数据库访问装置的结构示意图,如图11 所示,本实施例提供的数据库访问装置在图10所示装置的基础上还包括:创建模块14、第二确定模块15和设置模块16。

所述接收模块11还用于:接收来自所述客户端的数据写入请求,所述数据写入请求中携带待写入的数据,所述待写入的数据中包含所述键值。

创建模块14,用于根据所述待写入的数据,为所述待写入的数据创建所述路由表项,并将所述路由表项中的目标数据库设置为读写库。

所述发送模块13还用于:将所述数据写入请求发送至所述读写库,第二确定模块15用于确定所述读写库将所述待写入的数据同步到所述只读库,设置模块16用于将所述路由表项的目标数据库设置为所述只读库。

图12为本发明实施例七提供的数据库访问装置的结构示意图,如图12所示,本实施例提供的数据库访问装置在图10所示装置的基础上还包括:设置模块16。

所述接收模块11还用于:接收来自所述客户端的数据更新请求,所述数据更新请求中携带待更新的数据,所述待更新的数据中包含所述键值;

所述第一确定模块12还用于:根据所述键值确定所述待更新的数据对应的所述路由表项;

设置模块16,用于将所述路由表项中的目标数据库设置为所述读写库;

所述发送模块13还用于:将所述数据更新请求发送至所述读写库;

所述设置模块16还用于:在确定所述读写库将所述待更新的数据同步到所述只读库后,将所述路由表项的目标数据库设置为所述只读库。

图13为本发明实施例八提供的数据库访问装置的结构示意图,如图13所示,本实施例提供的数据库访问装置在图10所示装置的基础上还包括:删除模块17。

所述接收模块11还用于:接收来自所述客户端的数据删除指令,所述数据删除指令中携带待删除的数据的所述键值;

所述第一确定模块12还用于:根据所述键值确定所述待删除的数据对应的所述路由表项;

删除模块17,用于删除所述路由表项;

所述发送模块13还用于:将所述数据删除指令发送至所述读写库。

图14为本发明实施例九提供的数据库访问装置的结构示意图,如图14 所示,本实施例提供的数据库访问装置包括:接收模块21、创建模块22和发送模块23。

接收模块21,用于接收来自客户端的数据写入请求,所述数据写入请求中携带待写入的数据,所述待写入的数据中包含键值.

创建模块22,用于根据所述待写入的数据,为所述待写入的数据创建路由表项,所述路由表项中包含所述键值和所述待写入数据的目标数据库,所述目标数据库为所述读写库。

发送模块23,用于将所述数据写入请求发送至所述读写库。

在上述图10-14所示的数据库访问装置的基础上,可选的,所述数据库访问装置还包括:故障处理模块,故障处理模块用于确定所述只读库发生故障,将所述路由表项中的所述目标数据库设置为所述读写库。

在上述图10-14所示的数据库访问装置的基础上,可选的,所述接收模块还用于:接收来自所述目标数据库返回的结果,并将所述结果返回给所述客户端。

实施例五至实施例九提供的数据库访问装置包括的各功能模块的具体实现方式,请参照实施例一至实施例四所示的方法的相关描述,这里不再赘述。

图15为本发明实施例十提供的数据库访问装置的实体结构的示意图,如图15所示,数据库访问装置300包括通信接口31、处理器32、存储器33和总线34,其中,通信接口31、处理器32、存储器33通过总线34相互连接。总线34可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口31用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器33可能包含随机存取存储器(random access memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

处理器32执行存储器33所存放的程序代码,实现实施例一至实施例四的方法。

上述的处理器32可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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