CN108121782B - 查询请求的分配方法、数据库中间件系统以及电子设备 - Google Patents
查询请求的分配方法、数据库中间件系统以及电子设备 Download PDFInfo
- Publication number
- CN108121782B CN108121782B CN201711371653.0A CN201711371653A CN108121782B CN 108121782 B CN108121782 B CN 108121782B CN 201711371653 A CN201711371653 A CN 201711371653A CN 108121782 B CN108121782 B CN 108121782B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- database
- slave
- slave node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Abstract
本发明提供了一种查询请求的分配方法、数据库中间件系统以及电子设备,涉及数据管理技术领域,查询请求的分配方法包括:根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据;根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点,解决了现有技术中存在的在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主、从节点同步时延而无法达到数据库中数据同步的技术问题。
Description
技术领域
本发明涉及数据管理技术领域,尤其是涉及一种查询请求的分配方法、数据库中间件系统以及电子设备。
背景技术
关系型数据库的种类有很多,经常用到的数据库主要有关系型数据库管理系统(简称MySQL)。单机版本的数据库服务器的性能和容量是有限的,为了支持更大的并发访问数以及提升数据库访问性能,经常用到数据库的主备,以及读写分离技术。
在数据库主备环境下,有一个或多个数据库主节点,有多个数据库从节点。数据库客户端通过数据库访问系统等数据库中间件来访问数据库服务器。数据库中间件将写入请求发往数据库主节点,将查询请求发往数据库从节点。数据库从节点建立与数据库主节点的连接,从主节点上读取二进制日志数据,并将数据同步到自身。数据库主备模式下可以横向扩展多个从节点,从而可以支撑更大的并发查询量。写入请求只发往主节点,保障写入速度,从节点与主节点的数据同步通常情况下大约在几毫秒之内完成。
但是,如果主节点和从节点在网络上相隔很远,或者从节点要同步的数据量很大时,数据同步的耗时会增加。在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主从同步时延而无法达到数据库的数据同步。
发明内容
有鉴于此,本发明的目的在于提供一种查询请求的分配方法、数据库中间件系统以及电子设备,以解决现有技术中存在的在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主、从节点同步时延而无法达到数据库中数据同步的技术问题。
第一方面,本发明实施例提供了一种查询请求的分配方法,应用于数据库中间件,所述方法包括:
根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据;
根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据之前,还包括:
分别计算数据库中间件的系统时钟与主节点的系统时钟、每个从节点的系统时钟的时间差,得到数据库中间件与主节点间的主节点时间差异,以及数据库中间件与每个从节点间的从节点时间差异。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据,具体包括:
根据主节点中数据表的更新时间、每个从节点中数据表的更新时间、所述主节点时间差异以及每个所述从节点时间差异,计算数据表从主节点同步至每个从节点的同步延时数据。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点之前,还包括:
根据客户端发送的写入请求记录主节点中数据表的数据写入更新时间。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点,具体包括:
根据客户端发送的查询请求,获取所述查询请求对应的若干个目标数据表,并对每个从节点中每个所述目标数据表的所述同步延时数据进行比较,得到在每个从节点中,若干个目标数据表中的最大同步延时值;
根据所述数据写入更新时间与每个所述目标数据表在数据库中间件的数据更新时间,获取所述若干个目标数据表中的最小延时值;
将所述最小延时值与多个所述最大同步延时值进行比较,判断在多个所述最大同步延时值中,是否存在小于所述最小延时值的最大同步延时值;
如果是,则将所述查询请求发送至小于所述最小延时值的最大同步延时值对应的从节点之一;
如果否,则将所述查询请求发送至主节点。
结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,所述将所述查询请求发送至小于所述最小延时值的最大同步延时值对应的从节点之一,具体包括:
将小于所述最小延时值的最大同步延时值对应的从节点作为预设从节点;
根据负载均衡对所述预设从节点进行选择,得到目标从节点;
将所述查询请求发送至所述目标从节点。
结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,当主节点为多个时,所述将所述查询请求发送至主节点,具体包括:
将小于所述最大同步延时值的最小延时值对应的主节点作为预设主节点;
根据负载均衡对所述预设主节点进行选择,得到目标主节点;
将所述查询请求发送至所述目标主节点。
第二方面,本发明实施例还提供一种数据库中间件系统,包括:
延时计算模块,用于根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据;
节点确定模块,用于根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点。
第三方面,本发明实施例还提供一种电子设备,包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述如第一方面所述的方法的步骤。
第四方面,本发明实施例还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行如第一方面所述的方法。
本发明实施例提供的技术方案带来了以下有益效果:本发明实施例提供的查询请求的分配方法、数据库中间件系统以及电子设备中,查询请求的分配方法包括:首先,根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,然后,计算数据表从主节点同步至每个从节点的同步延时数据,之后,根据数据库中间件的数据更新时间与所述同步延时数据,以确定接收查询请求的目标节点,通过计算出数据库主节点与每个从节点之间的同步延时,能够比较出每个同步延时的长短,以判断最适合的处理节点,并将查询请求发往这个最优化的节点,以此来实现在数据同步过程中降低同步延时的影响,实现将客户端的查询请求自动的分发到不会出现主、从节点同步延时问题的节点上,从而解决了现有技术中存在的在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主、从节点同步时延而无法达到数据库中数据同步的技术问题。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例一所提供的查询请求的分配方法的流程图;
图2示出了本发明实施例一所提供的查询请求的分配方法对应的结构示意图;
图3示出了本发明实施例二所提供的查询请求的分配方法的流程图;
图4示出了本发明实施例二所提供的查询请求的分配方法的另一流程图;
图5示出了本发明实施例三所提供的一种数据库中间件系统的结构示意图;
图6示出了本发明实施例四所提供的一种电子设备的结构示意图。
图标:3-数据库中间件系统;31-延时计算模块;32-节点确定模块;4-电子设备;41-存储器;42-处理器。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主、从节点同步时延而无法达到数据库中数据同步,基于此,本发明实施例提供的一种查询请求的分配方法、数据库中间件系统以及电子设备,可以解决现有技术中存在的在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据,导致由于数据库的主、从节点同步时延而无法达到数据库中数据同步的技术问题。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种查询请求的分配方法、数据库中间件系统以及电子设备进行详细介绍。
实施例一:
本发明实施例提供的一种查询请求的分配方法,可以应用于数据库中间件,如图1所示,该方法包括:
S11:根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据。
其中,数据库中间件可以是用于交互、通讯的,支持客户端访问的服务程序。需要说明的是,数据库中间件可以设置于数据库以外的服务器等电子设备中,且比数据库所在服务器的要求低,可以相当于一种数据库读写分离负载均衡器。
需要说明的是,数据库的主节点数据表与数据库的从节点数据表是位于不同节点上的同一个表,两个数据表之间具有同步关系。
S12:根据数据库中间件的数据更新时间与同步延时数据,确定接收查询请求的目标节点。
需要说明的是,数据表是数据库的目标对象,是存储数据的基本单元,数据表结构创建完成后就涉及向表中插入新的数据,以及对已有数据进行修改与删除,这就是数据更新,数据更新可以使用“对象资源管理器”和结构化查询语言语句(Structured QueryLanguage,简称SQL)两种方式实现。也就是说,数据更新是以新数据项或记录、替换数据文件或数据库中与之相对应的旧数据项或记录的过程,通过删除、修改、再插入的操作来实现。因此,数据库中间件的数据更新时间是指数据库中间件的数据表中数据的删除、修改、插入等时间。
如图2所示,在数据库的主备环境下,有一个或多个数据库主节点,有多个数据库从节点。数据库的客户端通过数据库中间件来访问数据库服务器,数据库中间件将写入请求发往数据库主节点,并将查询请求发往数据库从节点1或数据库从节点2,从而实现在多个数据库从节点上进行负载分担。数据库从节点1与数据库从节点2建立与数据库主节点的连接,从节点主动从主节点上同步数据,即从节点从主节点上读取二进制日志数据,并将数据同步到自身。数据库主备模式下可以横向扩展多个从节点,从而可以支撑更大的并发查询量,而写入请求只发往主节点,以保障写入速度。
对于现有技术而言,从节点与主节点的数据同步通常情况下大约在几毫秒之内完成,但是在主节点和从节点在网络上相隔很远,或者从节点要同步的数据量很大时,数据同步的耗时会增加。因此,在从节点同步数据的过程中,如果客户端的请求经由中间件发往从节点,那么客户端有可能读不到最新的数据。
现有的避免数据库主、从节点同步时延引起问题的方法有:从客户端处进行代码梳理,发现可能会增加同步延迟问题出现几率的代码实现,针对性的进行修改。具体的,在第二条查询语句发往从节点进行数据查询时,很可能从节点尚未完成数据同步,而不能正确查出结果,因此在客户端处进行代码的修改,从而优化数据库主从同步方案的配置。例如,从行模式(row-based)修改为语句模式(statement-based),达到优化数据库主从节点网络配置,让主从节点有更快、更稳定的数据传输效率,从而降低主从同步延迟问题发生的概率。但是,该方法需要梳理整体项目的代码和实现,因此工作量较大。
现有的避免数据库主、从节点同步时延引起问题的另一种方法是:数据库主、从节点强一致性同步,也就是确保只有当所有从节点真正完成主备同步之后,才将数据最终进行更新完成。具体的,当主节点收到写入请求时,首先写入数据库主节点,并通知从节点进行数据同步,从节点完成数据同步后返回同步结果给主节点,主节点提交事务并返回给客户端,从而保证了主从数据的完全同步,避免了同步延迟问题。但是,这种强一致性同步要求写入指令必须在主从节点上都完成才算真正完成,会成倍降低数据库写入性能。此外,增加从节点的数量在提升整体查询性能的同时也会降低数据写入的性能,导致增加过多从节点后,整体数据库集群因为写入性能过慢而不再适用。而且,强一致性同步内部使用分布式锁机制来实现,实现形式复杂、技术难度高,增加了系统的不稳定性。
本实施例中,数据库中间件能够根据计算数据库主节点与每个从节点之间的同步延时,感知并记录当前数据库主备集群中的同步情况,将客户端的查询请求自动的分发到不会出现主、从节点同步问题的节点上。因此,通过提供该查询请求的分配方法,不仅实现将主、从节点同步延迟问题出现的可能性降低到最小,而且不要求客户端应用程序做代码梳理和修改,同时底层数据库也不使用强一致性同步,以此保障了写入性能和数据库集群读取性能的可扩展性。通过该查询请求的分配方法能够充分利用数据库主从读写分离的性能和扩展性方面的优势,并且避免客户端应用程序的修改,减少项目工作量和开发投入以降低工作量。
实施例二:
本发明实施例提供的一种查询请求的分配方法,可以应用于数据库中间件,如图3所示,该方法包括:
S21:分别计算数据库中间件的系统时钟与主节点的系统时钟、每个从节点的系统时钟的时间差,得到数据库中间件与主节点间的主节点时间差异,以及数据库中间件与每个从节点间的从节点时间差异。
其中,数据库中间件可以是数据库中间件服务器,需要说明的是,数据库中间件是可以是用于交互、通讯的支持客户端访问的服务程序。
本步骤中,数据库中间件服务器可以记录自身与各个数据库节点之间的系统时间差异,以确保包括数据库中间件与各个数据库服务器的整个系统中都使用网络时间协议(Network Time Protocol,简称NTP)进行时间同步。
作为一个优选方案,在数据库中间件中启动定时任务,定期统计数据库中间件与各个数据库节点之间的时间差,并将获取到的时间差异写入数据库中间件自身系统的内存中。
作为本实施例的优选实施方式,可以使用时间对比程序(clockdiff)工具来计算时间差异,以达到1毫秒级别的精度。
具体的,将数据库中间件的系统时间减去数据库主节点的系统时间得到主节点时间差异,将数据库中间件的系统时间分别减去每个数据库从节点的系统时间得到每个从节点时间差异。
作为本实施例的另一种实施方式,在本步骤之前还可以包括:根据数据库主节点和从节点记录的当前数据库服务器中每张表的最后更新时间,获取数据库主节点更新时间与数据库从节点更新时间,即数据库主节点和从节点记录各个表中最后更新时间,之后数据库中间件获取这些更新时间。现有技术中,某些数据库类型会自动记录每张表的最后更新时间,如某些MySQL数据库可以自动记录数据库引擎下数据表的更新。
而对于没有这个功能的数据库系统,可以通过触发器的触发方式来记录,利用触发方式记录的步骤可以为:首先创建相关的数据存储表,然后创建更新记录表的处理函数,之后为更新事件创建触发器以更新记录表,然后为插入事件创建触发器以更新记录表,最后为删除事件创建触发器以更新记录表。
S22:根据主节点中数据表的更新时间、每个从节点中数据表的更新时间、主节点时间差异以及每个从节点时间差异,计算数据表从主节点同步至每个从节点的同步延时数据。
在实际应用中,数据库中间件服务器与各个数据库节点同步每张表的最后更新时间,以计算每个从节点、每张表在数据库中间件中的同步时延数据。
优选的,数据库中间件服务器可以启动定时任务,定期获取各个节点的时间更新表,并根据步骤S21得到的时间差异,来计算各个从节点下每张表在数据库中间件中的同步时延值,计算公式可以为:
主节点与从节点间的同步时延=(从节点里表的更新时间-从节点时间差异)-(主节点里的表的更新时间-主节点时间差异)
具体的,先将数据库主节点中同步数据表的更新时间与主节点时间差异进行相减,得到数据库主节点在数据库中间件中数据表的主节点更新时间;然后,将数据库从节点中同步数据表的更新时间与从节点时间差异进行相减,得到数据库从节点在数据库中间件中数据表的从节点更新时间;最后,将主节点更新时间与从节点更新时间进行相减,便得到相对于数据库中间件而言,同步数据表在数据库主节点与若干个数据库从节点之间的同步延时数据。
由于该主节点到从节点之间的同步时延,是指各节点在数据库中间件中的同步时延,即按照数据库中间件的时钟为准而计算得出的主节点到从节点之间的同步时延,因此主、从节点的数据更新时间需要先各自减去相应的与中间件之间的时间差异,之后再进行相减,才能得到在数据库中间件中各个从节点下的数据表与主节点之间的同步时延值。
S23:根据客户端发送的查询请求,获取查询请求对应的若干个目标数据表,并对每个从节点中每个目标数据表的同步延时数据进行比较,得到在每个从节点中,若干个目标数据表中的最大同步延时值。
如图4所示,首先,解析客户端发送的查询请求的语句,得到与该查询请求相关联的表名,然后,获取这些表在每个从节点的最大时延。具体的,数据库中间件根据客户端发送的查询请求,可以从结构化查询语言(Structured Query Language,简称SQL)的语句中解析出该查询请求涉及到的目标数据表,并记录每个从节点中每个目标数据表对应的同步时延数据,然后对这些同步时延数据进行大小对比,对比后选择并记录其中每个从节点的最大同步延时值。需要说明的是,某个查询请求涉及到的目标数据表个数可能为一个,也可能为多个。例如,当查询请求的内容较为简单时,有可能涉及到的目标数据表仅为一个,而内容较为复杂的查询请求涉及到的目标数据表很可能会有多个。当然,这些多个目标数据表的内容不一定相同,因此,同一从节点中的目标数据表内容也不一定相同。
需要说明的是,在一个从节点中具有若干个目标数据表。本步骤中,是对这些目标数据表中的同步延时值进行大小比较,得到若干个目标数据表中的最大延时值。也就是说,在每个目标数据表中对应每个表各自的一个同步延时值,对这些位于不同目标数据表中的同步延时值进行大小比较,比较出其中值最大的同步延时值。因此,该最大同步时延值是针对多个目标数据表比较而得出的。之后,由于需要得出的是多个从节点中的该最大同步延时值,所以得到的结果是每个从节点各自对应的一个最大同步延时值,最后记录这些最大同步延时值。
例如,在每个从节点中都有3个目标数据表,其中,在某一个从节点中的3个目标数据表对应的同步延时值分别为5、9、7,对该三个数进行大小比较得出最大值为9,因此,在该从节点中的最大同步延时值为9。对于其他几个从节点,也通过上述方法进行比较得出这些从节点的最大同步延时值。最后记录所有从节点的最大同步延时值,当然其中包括9。
作为本实施例的优选实施方式,数据库中间件针对查询请求的SQL,使用正则表达式获取该查询请求相关联的数据表。
作为本实施例的另一种实施方式,在记录每个从节点的最大同步延时值之后,还可以根据这些最大同步延时值的大小,对这些最大同步延时值对应的每个从节点进行排序,得到从节点同步延时序列。如图4所示,在获取这些表在每个从节点的最大时延之后,对所有从节点的时延值进行排序,获取从节点的最小时延值d1,并记录所对应的从节点N。
S24:根据客户端发送的写入请求记录主节点中数据表的数据写入更新时间。
具体的,数据库中间件根据客户端发送的写入请求,可以从编程语言SQL的语句中解析出涉及到的数据表,并记录数据库主节点中每张数据表的数据写入更新时间。
作为一个优选方案,数据库中间件针对写入请求的SQL,使用正则表达式获取该写入请求相关联的数据表,更新每张数据表在主节点中的对应更新时间。
因此,数据写入更新时间是在数据库中间件中记录的,记录的内容是数据库主节点的数据表的数据写入更新时间。
作为本实施例的另一种实施方式,本步骤S24也可以在步骤S25之前的任意一个时间点实现,对实现本步骤S24的具体时间顺序不做固定的限定,步骤S24的过程也可以在步骤S23之前或步骤S22之前或步骤S21之前的任意时间点实现。
S25:根据数据写入更新时间与每个目标数据表在数据库中间件的数据更新时间,获取若干个目标数据表中的最小延时值。
本步骤中,获取每个目标数据表在数据库中间件中的最近更新时间,计算该最近更新时间与步骤S24中的数据写入更新时间之间的同步延时值,然后对每个目标数据表中的该同步延时值进行比较,得到若干个目标数据表中的最小延时值。
具体的,在每个目标数据表中对应每个表各自的一个延时值,对这些位于不同目标数据表中的延时值进行大小比较,比较出其中最小的延时值,即某个目标数据表中的延时值是在这些目标数据表中,延时值最小的值。因此,该最小延时值也是针对多个目标数据表比较而得出的。
需要说明的是,在计算完该最近更新时间与步骤S24中的数据写入更新时间之间的同步延时值之后,对同步延时值进行比较的过程为针对每个目标数据表而进行的比较。例如,有四个目标数据表,其中,该四个目标数据表对应的同步延时值分别为8、5、9、6,对该四个数进行大小比较得出最小值为5,因此,比较出四个目标数据表中的最小的延时值为5。
作为本实施例的另一种实施方式,如图4所示,分别获取这些表在中间件服务器中存储的最近更新时间,计算该最近更新时间与步骤S24中的数据写入更新时间之间的同步延时值,然后对每个目标数据表中的该同步延时值进行排序,得到若干个目标数据表中的最小延时值,排序得到最小值d2。
S26:将最小延时值与多个最大同步延时值进行比较,判断在多个最大同步延时值中,是否存在小于最小延时值的最大同步延时值。如果是,则进行步骤S27;如果否,进行步骤S28。
进一步,将每个最大同步延时值与每个最小延时值进行比较,判断是否存在小于最小延时值的最大同步延时值;如果是,则进行步骤S27;如果否,进行步骤S28。
作为本实施例的另一种实施方式,如图4所示,如果d1小于d2,则将查询请求发往从节点N;如果d1大于或等于d2,则将查询请求发往主节点。最后结束该数据同步的流程。
S27:将查询请求发送至小于最小延时值的最大同步延时值对应的从节点之一。
具体的,将小于最小延时值的最大同步延时值对应的从节点作为预设从节点,然后,根据负载均衡对若干个预设从节点进行选择,得到目标从节点,之后,将查询请求发送至目标从节点。因此,将查询请求发送至若干个预设从节点之一。
例如,最小延时值为5,多个最大同步延时值分别为2、4、7、9,则小于最小延时值5的最大同步延时值分别有2与4,然后对最大同步延时值为2所对应的从节点与最大同步延时值为4所对应的从节点进行二选一,具体的,根据负载均衡原则对这两个从节点进行选择,从而得到目标从节点,最后,将查询请求发送至该目标从节点。
S28:将查询请求发送至主节点。
优选的,当主节点为多个时,本步骤具体可以包括:首先,将小于最大同步延时值的最小延时值对应的主节点作为预设主节点,然后,根据负载均衡对预设主节点进行选择,得到目标主节点,之后,将查询请求发送至目标主节点。
在步骤S23至步骤S28中,数据库中间件根据主节点数据表中的数据、每个从节点数据表中的数据以及当前的时间戳即步骤S21中的系统时间差异,计算最适合的处理节点。因此,通过步骤S23至步骤S28的方法,便能够实现根据客户端发送的查询请求、步骤S22记录的主节点与从节点间同步时延数据,计算出最优化的处理节点,并将查询请求发往这个节点。
对于现有技术而言,在很多云平台中,数据库主节点和从节点经常会部署在不同的地理位置或区域里,长跨度数据同步的时延非常大,但同时在各个区域中,又有加快数据库访问速度的要求。
通过本实施例提供的查询请求的分配方法,可以避免数据组主从同步时延的问题,而且客户端应用程序也能够在数据已经同步的情况下,充分利用本地的从节点来提升访问性能,同时还可以避免在主节点的数据发生改动时,由于从节点未能及时更新数据而引起的脏读。
实施例三:
本发明实施例提供的一种数据库中间件系统,可以用于实施上述实施例一或实施例二提供的查询请求的分配方法,如图5所示,数据库中间件系统3可以包括:延时计算模块31与节点确定模块32。
需要说明的是,延时计算模块31可以用于根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据。
此外,节点确定模块32可以用于根据数据库中间件的数据更新时间与同步延时数据,确定接收查询请求的目标节点。
实施例四:
本发明实施例提供的一种电子设备,如图6所示,电子设备4可以包括:存储器41、处理器42,存储器41中存储有可在处理器42上运行的计算机程序,处理器42执行计算机程序时实现上述实施例一或实施例二提供的方法的步骤。
其中,存储器41可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器41用于存储程序,处理器42在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器42中,或者由处理器42实现。
处理器42可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器42中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器42可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器42读取存储器41中的信息,结合其硬件完成上述方法的步骤。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本发明实施例提供的电子设备,与上述实施例提供的查询请求的分配方法以及数据库中间件系统具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
本发明实施例所提供的进行查询请求的分配方法的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种查询请求的分配方法,应用于数据库中间件,其特征在于,所述方法包括:
根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据;
根据客户端发送的写入请求记录主节点中数据表的数据写入更新时间;
根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点;
所述根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点,具体包括:
根据客户端发送的查询请求,获取所述查询请求对应的若干个目标数据表,并对每个从节点中每个所述目标数据表的所述同步延时数据进行比较,得到在每个从节点中,若干个目标数据表中的最大同步延时值;
根据所述数据写入更新时间与每个所述目标数据表在数据库中间件的数据更新时间,获取所述若干个目标数据表中的最小延时值;
将所述最小延时值与多个所述最大同步延时值进行比较,判断在多个所述最大同步延时值中,是否存在小于所述最小延时值的最大同步延时值;
如果是,则将所述查询请求发送至小于所述最小延时值的最大同步延时值对应的从节点之一;
如果否,则将所述查询请求发送至主节点。
2.根据权利要求1所述的查询请求的分配方法,其特征在于,所述根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据之前,还包括:
分别计算数据库中间件的系统时钟与主节点的系统时钟、每个从节点的系统时钟的时间差,得到数据库中间件与主节点间的主节点时间差异,以及数据库中间件与每个从节点间的从节点时间差异。
3.根据权利要求2所述的查询请求的分配方法,其特征在于,所述根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据,具体包括:
根据主节点中数据表的更新时间、每个从节点中数据表的更新时间、所述主节点时间差异以及每个所述从节点时间差异,计算数据表从主节点同步至每个从节点的同步延时数据。
4.根据权利要求1所述的查询请求的分配方法,其特征在于,所述将所述查询请求发送至小于所述最小延时值的最大同步延时值对应的从节点之一,具体包括:
将小于所述最小延时值的最大同步延时值对应的从节点作为预设从节点;
根据负载均衡对所述预设从节点进行选择,得到目标从节点;
将所述查询请求发送至所述目标从节点。
5.根据权利要求1所述的查询请求的分配方法,其特征在于,当主节点为多个时,所述将所述查询请求发送至主节点,具体包括:
将小于所述最大同步延时值的最小延时值对应的主节点作为预设主节点;
根据负载均衡对所述预设主节点进行选择,得到目标主节点;
将所述查询请求发送至所述目标主节点。
6.一种数据库中间件系统,其特征在于,包括:延时计算模块、数据更新模块与节点确定模块;
所述延时计算模块用于根据数据库中间件与数据库节点间的时间差异、数据库的主节点数据更新时间以及数据库的从节点数据更新时间,计算数据表从主节点同步至每个从节点的同步延时数据;
所述数据更新模块用于根据客户端发送的写入请求记录主节点中数据表的数据写入更新时间;
所述节点确定模块用于根据数据库中间件的数据更新时间与所述同步延时数据,确定接收查询请求的目标节点;
所述节点确定模块还用于:
根据客户端发送的查询请求,获取所述查询请求对应的若干个目标数据表,并对每个从节点中每个所述目标数据表的所述同步延时数据进行比较,得到在每个从节点中,若干个目标数据表中的最大同步延时值;
根据所述数据写入更新时间与每个所述目标数据表在数据库中间件的数据更新时间,获取所述若干个目标数据表中的最小延时值;
将所述最小延时值与多个所述最大同步延时值进行比较,判断在多个所述最大同步延时值中,是否存在小于所述最小延时值的最大同步延时值;
如果是,则将所述查询请求发送至小于所述最小延时值的最大同步延时值对应的从节点之一;
如果否,则将所述查询请求发送至主节点。
7.一种电子设备,包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至5任一项所述的方法的步骤。
8.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1-5任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711371653.0A CN108121782B (zh) | 2017-12-18 | 2017-12-18 | 查询请求的分配方法、数据库中间件系统以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711371653.0A CN108121782B (zh) | 2017-12-18 | 2017-12-18 | 查询请求的分配方法、数据库中间件系统以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108121782A CN108121782A (zh) | 2018-06-05 |
CN108121782B true CN108121782B (zh) | 2020-11-10 |
Family
ID=62229236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711371653.0A Active CN108121782B (zh) | 2017-12-18 | 2017-12-18 | 查询请求的分配方法、数据库中间件系统以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108121782B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189851B (zh) * | 2018-06-29 | 2021-06-01 | 网宿科技股份有限公司 | 数据访问方法、数据库设备以及主从数据库实例系统 |
CN108898448A (zh) * | 2018-07-25 | 2018-11-27 | 北京木瓜移动科技股份有限公司 | 一种广告数据同步方法及装置 |
CN110958287B (zh) * | 2018-09-27 | 2022-06-24 | 阿里云计算有限公司 | 操作对象数据同步方法、装置及系统 |
CN109783717B (zh) * | 2018-12-04 | 2022-02-01 | 北京奇艺世纪科技有限公司 | 查询任务处理方法、系统、服务器集群及装置、计算机可读存储介质 |
CN109684410B (zh) * | 2018-12-24 | 2021-06-15 | 浙江大华技术股份有限公司 | 一种确定主从数据库同步时延的系统、方法及储存介质 |
CN110196832A (zh) * | 2019-06-04 | 2019-09-03 | 北京百度网讯科技有限公司 | 用于获取快照信息的方法及装置 |
CN111340414A (zh) * | 2020-02-14 | 2020-06-26 | 上海东普信息科技有限公司 | 云仓大数据处理方法、云仓系统、计算机设备和存储介质 |
CN112636861A (zh) * | 2020-12-31 | 2021-04-09 | 深圳市英特瑞半导体科技有限公司 | 一种时钟同步方法、装置、设备及存储介质 |
CN113076343B (zh) * | 2021-04-30 | 2024-04-05 | 北京京东振世信息技术有限公司 | 数据查询方法、装置、设备及存储介质 |
CN113476853B (zh) * | 2021-07-26 | 2023-10-03 | 北京达佳互联信息技术有限公司 | 交互任务的数据处理方法、装置、电子设备、存储介质 |
CN113760934B (zh) * | 2021-09-08 | 2024-04-12 | 福建天泉教育科技有限公司 | 一种数据读取方法及终端 |
CN116303791A (zh) * | 2023-03-22 | 2023-06-23 | 合肥申威睿思信息科技有限公司 | 一种基于加速系统的数据同步方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591964A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 数据读写分离机制的实现方法和装置 |
CN104376127A (zh) * | 2014-12-12 | 2015-02-25 | 北京奇虎科技有限公司 | 一种数据操作方法及装置 |
CN105589797A (zh) * | 2015-09-17 | 2016-05-18 | 中国银联股份有限公司 | 主从数据库间数据同步延时检测的方法 |
CN106453297A (zh) * | 2016-09-30 | 2017-02-22 | 努比亚技术有限公司 | 检测主从延时方法、装置和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10108496B2 (en) * | 2014-06-30 | 2018-10-23 | International Business Machines Corporation | Use of replicated copies to improve database backup performance |
-
2017
- 2017-12-18 CN CN201711371653.0A patent/CN108121782B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591964A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 数据读写分离机制的实现方法和装置 |
CN104376127A (zh) * | 2014-12-12 | 2015-02-25 | 北京奇虎科技有限公司 | 一种数据操作方法及装置 |
CN105589797A (zh) * | 2015-09-17 | 2016-05-18 | 中国银联股份有限公司 | 主从数据库间数据同步延时检测的方法 |
CN106453297A (zh) * | 2016-09-30 | 2017-02-22 | 努比亚技术有限公司 | 检测主从延时方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108121782A (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108121782B (zh) | 查询请求的分配方法、数据库中间件系统以及电子设备 | |
CN107391628B (zh) | 数据同步方法及装置 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
US20160162562A1 (en) | Database system, computer program product, and data processing method | |
US20150213100A1 (en) | Data synchronization method and system | |
US20230244694A1 (en) | Database system, computer program product, and data processing method | |
Spirovska et al. | Wren: Nonblocking reads in a partitioned transactional causally consistent data store | |
CN107391634B (zh) | 数据迁移方法及装置 | |
Didona et al. | Causal consistency and latency optimality: Friend or foe? | |
CN112256401B (zh) | 基于Kubernetes环境下的Prometheus高可用系统及实现方法 | |
CN112612799B (zh) | 一种数据同步方法及终端 | |
JP2012234333A (ja) | クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
US20230418811A1 (en) | Transaction processing method and apparatus, computing device, and storage medium | |
CN109145060B (zh) | 数据处理方法及装置 | |
CN112084161A (zh) | 基于数据库的数据处理方法、装置以及可读存储介质 | |
CN111694865A (zh) | 基于分布式系统的四层结构数据获取方法和装置 | |
CN112384906A (zh) | 基于mvcc的数据库系统的异步缓存一致性 | |
CN114610680A (zh) | 分布式文件系统元数据管理方法、装置、设备及存储介质 | |
EP3377970B1 (en) | Multi-version removal manager | |
Huang et al. | Byz-gentlerain: An efficient byzantine-tolerant causal consistency protocol | |
CN112000850A (zh) | 进行数据处理的方法、装置、系统及设备 | |
CN112187889A (zh) | 一种数据同步方法、装置及存储介质 | |
EP2902909A1 (en) | Distributed storage apparatus, storage node, data provision method and program | |
US10860580B2 (en) | Information processing device, method, and medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |