CN113094431A - 读写分离方法、装置及服务器 - Google Patents

读写分离方法、装置及服务器 Download PDF

Info

Publication number
CN113094431A
CN113094431A CN202110340981.4A CN202110340981A CN113094431A CN 113094431 A CN113094431 A CN 113094431A CN 202110340981 A CN202110340981 A CN 202110340981A CN 113094431 A CN113094431 A CN 113094431A
Authority
CN
China
Prior art keywords
gtid
database
server
session
read
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.)
Pending
Application number
CN202110340981.4A
Other languages
English (en)
Inventor
钱恒
钟靓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Dajia Internet Information Technology Co Ltd
Original Assignee
Beijing Dajia Internet Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Dajia Internet Information Technology Co Ltd filed Critical Beijing Dajia Internet Information Technology Co Ltd
Priority to CN202110340981.4A priority Critical patent/CN113094431A/zh
Publication of CN113094431A publication Critical patent/CN113094431A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开关于一种读写分离方法、装置及服务器。其中,该方法包括:监听到第一服务器发送的读操作请求,确定读操作请求所属的第一会话标识Session ID、及第一Session ID对应的第一全局事务标识GTID;获取任一从数据库当前对应的第二GTID;在第二GTID大于第一GTID的情况下,将读操作发送给任一从数据库;在监听到第一服务器发送的写操作请求的情况下,将写操作发送给主数据库。由此,通过该读写分离方法可将元数据库接收到的读操作请求和写操作请求分离执行,使元数据库的主从数据库分别执行对应的操作,从而降低了元数据库的单点工作负荷,并且可以确保在主数据库与从数据库具有数据一致性时再将读操作发送至从数据库,提高从数据库进行读操作的准确性。

Description

读写分离方法、装置及服务器
技术领域
本公开涉及数据处理技术领域,尤其涉及一种读写分离方法、装置及服务器。
背景技术
目前,对于大规模数据的处理,通常是通过数据仓库工具先将数据文件存储在分布式文件系统上,再将描述数据文件的元数据信息存储在具有高访问效率和事务性的数据库上。而由于元数据库负责的事务数量巨大,导致元数据库会面临较大的工作负荷。
发明人发现相关技术存在问题:相关技术中,通常是采用对元数据库进行分库分表的方案缓解元数据库的压力,即划分出多个元数据库协同工作,或者,先将数据量过大的单个数据表划分为多个数据表,再元数据库由依次处理划分出的各数据表。然而,该方案在分库分表后存在多个元数据库,在执行事务时需要各元数据库执行分布式协作,即先将待执行的事务分解成多个子事务,再将多个子事务对应分配各元数据库,由每个元数据库执行对应的子事务,最后把每个元数据库返回的结果综合起来得到待执行的事务最终的执行结果,该处理方式占用了较多的资源,影响了元数据库的性能,并且,当单个事务涉及的元数据存储在不同的元数据库上时,需要依次查询每个元数据库上的数据,并将查到的数据进行排序后按序组装在一起才能返回结果,等待时间较长且实现过程较为复杂。
因此,目前亟需一种可以更加便捷和高效地降低元数据库工作负荷的方案。
发明内容
本公开提供一种读写分离方法、装置及服务器、存储介质及计算机程序产品,以至少解决相关技术中由于外部元数据库负责的事务量巨大,导致外部元数据库面临较大的工作负荷的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种读写分离方法,包括:
监听到第一服务器发送的读操作请求,确定所述读操作请求所属的第一会话标识Session ID、及所述第一Session ID对应的第一全局事务标识GTID;
获取任一从数据库当前对应的第二GTID;
在所述第二GTID大于所述第一GTID的情况下,将所述读操作发送给所述任一从数据库;
在监听到所述第一服务器发送的写操作请求的情况下,将所述写操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,在所述监听到第一服务器发送的读操作请求之前,还包括:监听到所述第一服务器发送的建立第一连接的请求,根据当前已建立的各连接对应的各Session ID,确定所述第一连接对应的第一Session ID,其中,所述第一Session ID与其余各Session ID不同;将所述主数据库当前对应的第一GTID,确定为所述第一Session ID对应的GTID。
在本公开实施例一种可能的实现方式中,在所述将所述写操作发送给所述主数据库之后,还包括:在监听到所述主数据库返回的写操作事务结束消息的情况下,更新所述主数据库及所述第一连接对应的第一GTID。
在本公开实施例一种可能的实现方式中,在所述将所述读操作发送给所述任一从数据库连接之后,还包括:在监听到所述读操作失败的情况下,将所述读操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,在所述获取任一从数据库当前对应的第二GTID之后,还包括:在所述第二GTID小于所述第一GTID的情况下,将所述读操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,所述元数据读写分离方法还包括:在监听到所述第一服务器断开所述第一Session ID对应的连接时,清除所述第一Session ID及第一GTID。
在本公开实施例一种可能的实现方式中,所述元数据读写分离方法还包括:监听到第二服务器发送的建立第二连接的请求,根据当前已建立的各连接对应的各SessionID,确定所述第二连接对应的第二Session ID及第三GTID,其中,所述第三GTID为主数据库当前对应的GTID;监听到所述第二服务器发送的写操作请求、且所述写操作请求所属的会话标识为第二Session ID的情况下,将所述写操作发送给所述主数据库;在监听到所述主数据库的写操作事务结束后,更新所述主数据库及所述第二Session ID对应的第三GTID。
根据本公开实施例的第二方面,提供一种读写分离装置,包括:
第一确定模块,被配置为监听到第一服务器发送的读操作请求,确定所述读操作请求所属的第一会话标识Session ID、及所述第一Session ID对应的第一全局事务标识GTID;
第一获取模块,被配置为获取任一从数据库当前对应的第二GTID;
第一发送模块,被配置为在所述第二GTID大于所述第一GTID的情况下,将所述读操作发送给所述任一从数据库;
第二发送模块,被配置为在监听到所述第一服务器发送的写操作请求的情况下,将所述写操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,所述读写分离装置,还包括:第二确定模块,被配置为监听到所述第一服务器发送的建立第一连接的请求,根据当前已建立的各连接对应的各Session ID,确定所述第一连接对应的第一Session ID,其中,所述第一Session ID与其余各Session ID不同;第三确定模块,被配置为将所述主数据库当前对应的第一GTID,确定为所述第一Session ID对应的GTID。
在本公开实施例一种可能的实现方式中,所述读写分离装置,还包括:第一更新模块,被配置为在监听到所述主数据库返回的写操作事务结束消息的情况下,更新所述主数据库及所述第一连接对应的第一GTID。
在本公开实施例一种可能的实现方式中,所述读写分离装置,还包括:第三发送模块,被配置为在监听到所述读操作失败的情况下,将所述读操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,所述元数据读写分离装置,还包括:第四发送模块,被配置为在所述第二GTID小于所述第一GTID的情况下,将所述读操作发送给所述主数据库。
在本公开实施例一种可能的实现方式中,所述读写分离装置,还包括:清除模块,被配置为在监听到所述第一服务器断开所述第一Session ID对应的连接时,清除所述第一Session ID及第一GTID。
在本公开实施例一种可能的实现方式中,所述读写分离装置,还包括:第四确定模块,被配置为监听到第二服务器发送的建立第二连接的请求,根据当前已建立的各连接对应的各Session ID,确定所述第二连接对应的第二Session ID及第三GTID,其中,所述第三GTID为主数据库当前对应的GTID;第五发送模块,被配置为监听到所述第二服务器发送的写操作请求、且所述写操作请求所属的会话标识为第二Session ID的情况下,将所述写操作发送给所述主数据库;第二更新模块,被配置为在监听到所述主数据库的写操作事务结束后,更新所述主数据库及所述第二Session ID对应的第三GTID。
根据本公开实施例的第三方面,提供一种服务器,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如前所述的读写分离方法。
根据本公开实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行如前所述的读写分离方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,该计算机程序由服务器的处理器执行时,使得服务器能够执行如前所述的读写分离方法。
本公开的实施例提供的技术方案至少带来以下有益效果:监听第一服务发送的操作请求的类型,当发送读操作请求时,若任一从数据库当前对应的全局事务标识大于主数据库当前对应的全局事务标识,则将读操作路由至该从数据库,当发送写操作请求时,则将写操作发送给所述主数据库。在本公开实施例中,一个主数据库对应多个从数据库,由从数据库进行读操作而主数据库进行写操作的方式,实现元数据库的读写分离,将流量巨大但实际并没有事务操作的读操作发送至各从数据库,由各从数据库对应执行分配到的读操作,从而降低了元数据库的单点工作负荷,并且,根据从数据库全局事务标识大于主数据库的全局事务标识,可以判断出主数据库与从数据库已同步完成,主从数据库的数据具有一致性,然后再路由读操作至从数据库,从而确保了从数据库进行读操作的准确性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种读写分离方法的流程图。
图2是本公开实施例所涉及的一种应用场景的示意图。
图3是根据一示例性实施例示出的另一种读写分离方法的流程图。
图4是根据一示例性实施例示出的再一种读写分离方法的流程图。
图5是根据一示例性实施例示出的一种具体的读写分离方法的流程图。
图6是根据一示例性实施例示出的一种读写分离装置框图。
图7是根据一示例性实施例示出的一种服务器的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种读写分离方法的流程图,如图1所示,该读写分离方法用于服务器中,至少包括以下步骤S101-S104。
在步骤S101中,监听到第一服务器发送的读操作请求,确定所述读操作请求所属的第一会话标识Session ID、及所述第一Session ID对应的第一全局事务标识GTID。
需要说明的是,本公开的读写分离方法的执行主体为服务器。本公开实施例的读写分离方法可以由本公开实施例的读写分离装置执行,本公开实施例的读写分离装置可以配置在本公开实施例的服务器中,以执行本公开实施例的读写分离方法。
其中,本公开实施例的服务器可以是任意的数据仓库基础构架对应的元数据管理服务器(MetaStore Server),比如,当通过Hive数据仓库系统管理数据时,本公开的读写分离方法可以由Hive MetaStore Server执行。其中,Hive是建立在一种分布式系统架构(Hadoop)上的数据仓库基础构架,Hive提供了一系列的数据仓库工具用来进行数据的提取、转化、加载,通过Hive可以存储、查询和分析存储在Hadoop中的大规模数据。Hive预先把数据文件存储在分布式文件系统(Hadoop Distributed File System,简称HDFS)上,另一方面再将元数据信息存储在访问效率高且具有事务性的数据库上,比如,MySQL数据库,该数据库即为元数据库。当然,本公开实施例中的服务器也可以是其他类型的数据管理服务器,以通过执行本申请提出的读写分离方法对其他类型的数据进行读写分离,此处不做限制,为便于描述,以下以元数据管理服务器为例进行说明。
为了更加清楚的说明本公开的读写分离方法的执行过程,本公开还提出了一种读写分离方法的应用场景,图2是本公开实施例所涉及的一种应用场景的示意图,如图2所示,该应用场景包括:第一服务器10、服务端接口20、元数据管理服务器30、主数据库40和多个从数据库50。其中,第一服务器10通过服务端接口20与元数据管理服务器30建立连接,第一服务器10通过该连接向元数据管理服务器30发送对元数据进行读、写操作的请求,元数据管理服务器30基于相应的控制逻辑将请求发送给主数据库40或从数据库50,以使主数据库40或从数据库50执行对应的事务。其中,服务端接口20是数据仓库系统Hive提供的接口,比如,HiveServer2。元数据管理服务器通过服务端接口20可以向其他服务器提供对Hive进行各种操作的服务,比如,对元数据进行读、写操作的服务。其他服务器与Hive MetaStoreServer建立连接后,可以发送操作请求至Hive MetaStore Server以进行对应的操作,举例而言,其他服务器可以通过HiveServer2与Hive MetaStore Server建立连接,然后发送读取或写入元数据的请求至Hive MetaStore Server,进而通过Hive MetaStore Server访问元数据库,元数据库根据请求执行对应的操作并返回结果。本公开实施例通过HiveMetaStore Server向元数据库发送事务,可以减少元数据库访问所需的驱动、资源定位地址、用户名和密码等条件,提高了执行元数据读写分离的效率。
还需说明的是,在本公开的实施例中,预先扩展了多个元数据库,形成元数据库集群,并以其中一个为主数据库,其余的为与该主数据库对应的从数据库,当主数据库产生数据更新时,各从数据库的数据同步更新。通过本公开实施例的读写分离方法将读操作和写操作分离后,可以由从数据库进行读操作,从而可以将大量读操作发送至不同的从数据库,由各从数据库对应执行分配到的读操作,降低了元数据库集群中单个数据库的工作量。
具体实施时,元数据管理服务器先监听第一服务器发送的操作请求,若监听到第一服务器发送读操作请求,则确定读操作请求所属的第一会话标识Session ID、及第一Session ID对应的第一GTID。
其中,第一服务器可以是向元数据管理服务器请求读、写服务的任一服务器,即第一服务器是数据读、写服务的请求方,元数据管理服务器向包括第一服务器在内的其他请求方服务器提供数据读写服务,用户可以根据需要通过第一服务器发送不同类型的操作请求至元数据管理服务器。
其中,读操作是读取元数据库中的数据,写操作请求是向元数据库中写入数据,以更新元数据库中内容。读操作请求所属的第一会话标识Session ID,是传输读操作的连接对应的第一会话标识Session ID,可以理解,在第一服务器向元数据管理服务器发送请求前,需要先在第一服务器和元数据管理服务器间建立连接,而会话标识Session ID是元数据管理服务器在当前连接请求建立连接后生成的,用于标示该连接请求的标识,会话标识Session ID具有唯一性,通过会话标识Session ID可以区分元数据管理服务器当前建立的各个连接。
全局事务标识GTID为主数据库当前对应的全局事务标识(Global TransactionID,简称GTID),当前连接对应的GTID与主数据库当前对应GTID相同,即确定当前连接的会话标识Session ID后,以当前的主数据库对应GTID为当前Session ID对应的GTID。其中,GTID是元数据库提供的在元数据库集群的全局范围内标示事务的标识,GTID在全局具有唯一性,即在元数据库集群中每一个事务对应一个GTID,当元数据库集群中任一数据库执行一次事务后,GTID自动更新例如增加1或N(N为正整数),而该执行事务后的元数据库对应的GTID为增加后的GTID。举例而言,初始时刻主数据库和从数据库对应的GTID为1,而当主数据库进行一次写操作时,该次写操作的GTID为2,进而执行完写操作后主数据库当前对应的GTID变化为2,然后,为从数据库进行数据同步的事务重新分配的GTID为3,进而从数据库完成数据同步后GTID变化为3,再进一步的,若从数据库再进行一次读操作时,该次读操作的GTID为4,进而执行完读操作后从数据库当前对应的GTID变化为4。
在本公开的一个实施例中,在第一服务器向元服务器发送操作请求之前,先向元数据管理服务器发送建立连接的请求,然后元数据管理服务器监听到第一服务器发送的建立第一连接的请求后,根据当前已建立的各连接对应的各Session ID,确定第一连接对应的第一Session ID,其中,第一Session ID与其余各Session ID不同。其中,第一连接请求是第一服务器通过服务端接口向元数据管理服务器发送的访问元数据管理服务器的连接请求,当元数据管理服务器监听到连接请求时,可以与传输该连接请求的接口建立连接,从而第一服务器可以通过该连接向元数据管理服务器发送对元数据进行事务操作的请求。元数据管理服务器建立第一连接后,在当前已建立的连接对应的Session ID之外,为第一连接分配一个全新的、与当前任意一个已存在的Session ID均不重复的Session ID,从而确保第一Session ID具有全局唯一性。然后,元数据管理服务器将元数据库集群中的主数据库当前对应的第一GTID,确定为第一Session ID对应的第一全局事务标识GTID。
进一步的,若元数据管理服务器监听到第一连接传输了第一服务器发送的读操作请求,则以第一连接对应的第一Session ID为当前读操作请求所属的第一会话标识Session ID,以第一Session ID对应的GTID为当前读操作请求所属的第一会话标识Session ID对应的第一全局事务标识GTID。
作为其中一种可能实现的方式,元数据管理服务器可以根据第一服务器调用的应用程序接口(Application Programming Interface,简称API)判断第一服务器发送的操作请求,其中,API是元数据管理服务器预先定义的对元数据库进行不同类型的访问的接口,在本公开实施例中应用程序接口可包括读操作API和写操作API,元数据管理服务器通过读操作API可以读取元数据库中的数据,通过写操作API可以向元数据库中写入数据,更新元数据库中内容。从而当元数据管理服务器监听到第一服务器调用读操作API时,即可确定本次连接请求为读操作请求。本公开的读写分离方法,由元数据管理服务器根据自身被调用的API确定当前连接对应的事务类型,判断方式较为简单,易于实现。
需要说明的是,本公开实施例中传输连接请求的接口可以是数据仓库基础构架提供的服务端接口,也可以是其他为大规模数据处理而设计的快速通用的计算引擎提供的接口,比如,SPARK计算引擎提供的接口等,即本公开实施例中的第一连接请求可以是第一服务器通过任意可访问元数据管理服务器的接口发送的请求,此处不做限制,由此,本公开实施例的元数据读写分离方法可以适用于更多的计算环境。
在步骤S102中,获取任一从数据库当前对应的第二GTID。
在本公开实施例中,在确定第一服务器发送读操作请求后,元数据管理服务器在从数据库集群中获取任一从数据库当前对应的第二GTID,便于后续根据该数据库当前对应的第二GTID确定是否可以将读操作路由至该从数据库,进而可通过该API进行读事务。而本公开在从数据库集群中任意获取其中一个对应的第二GTID,不需要遍历全部的从数据库,可以减少获取从数据库当前对应的第二GTID的等待时间。
在步骤S103中,在第二GTID大于第一GTID的情况下,将读操作发送给该任一从数据库。
可以理解的是,在读取元数据库中的数据之前,需要预先将元数据写入在元数据库中,由于在本公开中由主数据库执行写操作,即已预先将元数据写入主数据库中。而在向主数据库写入元数据后,由于主数据库执行了一个写入的事务,主数据库的GTID发生了改变。进一步的,从数据库需要复制主数据库更新的内容,而由上述描述可知,GTID在元数据库集群的全局范围内具有唯一性,且GTID的大小是自动增加的,所以从数据库进行数据同步的事务对应的GTID大于主数据库执行写入的事务的GTID,因此,从数据库数据同步完成后,若主从数据库之间未发生延迟,主从数据库之间的数据具有一致性,则从数据库当前对应的GTID应当大于主数据库对应的GTID。
举例而言,在主数据库写入数据后,主数据库本次写操作对应的事务的GTID为“01”,即写入数据后主数据库当前的GTID为“01”,而从数据库进行数据同步的事务与主数据库的写入事务并不相同,为保证唯一性,为从数据库进行数据同步的事务重新分配了一个GTID,且按照GTID自动增加的机制,为从数据库分配的GTID的取值大于主数据库当前对应的GTID的取值,比如,从数据库进行数据同步的事务的GTID为“02”,则若从数据库完成数据同步后,从数据库当前对应的GTID为“02”,即当元数据库中的内容发生更新时,若主从数据库之间的数据具有一致性,则从数据库当前对应的GTID的取值应当大于主数据库对应的GTID。
因此,在本公开的实施例中,元数据管理服务器根据获取到的主数据库当前对应的GTID和任一从数据库当前对应的第二GTID,判断主从数据库是否具有一致性,在第二GTID大于第一GTID的情况下,表明之前元数据库产生更新时,从数据库完成了数据同步更新,从数据库与主数据库的数据具有一致性,从数据库读取的数据是准确的,可以由从数据库执行本次的读操作。
在本公开的一个实施例中,由于从数据库更新数据需要耗费一定的时间,而实际应用中两个事务之间的间隔可能较短,因此,元数据管理服务器还可以设置判断主从数据库是否具有一致性的等待时间,若在等待时间内主从数据库完成同步,即在等待时间内从数据库对应的第二GTID变为大于第一GTID,则元数据管理服务器确定主从数据库具有一致性;若在等待时间过后,从数据库对应的第二GTID仍然是小于第一GTID,则元数据管理服务器确定主从数据库的同步发生延迟,禁止由该从数据库执行本次的读操作。
进一步的,元数据管理服务器将本次连接请求的读操作发送至该从数据库,由该从数据库执行读操作。在从数据库执行完读操作后,可向元数据管理服务器返回读取的结果,进而元数据管理服务器根据第一会话标识Session ID向相应的接入端口返回读取到的元数据,完成本次读操作。由此,在主从数据库具有一致性的基础上,将本次的读操作发送至从数据库执行,减少了主数据库的工作负荷。
可选的,在本公开的一个实施例中,在确定主从数据库的数据具有一致性后,元数据管理服务器还可以根据各从数据库当前的工作负荷确定执行该读操作的目标从数据库。比如,元数据管理服务器在确定主数据库与各从数据库的数据均具有一致性后,还可以获取每个从数据库的每秒查询率(Queries-per-second,简称QPS),其中,QPS是指每个从数据库在规定时间内所处理流量多少的衡量标准,根据从数据库的实时QPS,可以反映从数据库当前的数据处理压力,从数据库的实时QPS越小,说明从数据库当前执行的读操作处理少,工作负荷较小,进而,元数据管理服务器将本次的读操作发送至QPS较小的从数据库,从而保证从数据库执行读操作的效率,进一步平均每个元数据库的工作量,降低元数据库的单点工作负荷。
在步骤S104中,在监听到第一服务器发送的写操作请求的情况下,将写操作发送给主数据库。
在本公开的一个实施例中,当元数据管理服务器监听到第一服务器调用写操作API时,确定本次连接是请求向元数据库中写入数据,进而将写操作发送至主数据库,由主数据库执行写操作。
由此,元数据管理服务器根据监听到的操作请求的类型,将读操作请求发送至从数据库,由从数据库执行读操作,将写操作请求发送至主数据库,由主数据库执行读操作,实现了元数据的读写分离。
本公开的实施例提供的读写分离方法,通过第一连接接收到第一服务器发送的操作请求后,确定操作请求的类型,在监听到第一服务器发送读操作请求时,确定读操作请求所属的第一会话标识对应的第一全局事务标识,若任一从数据库当前对应的第二全局事务标识大于读操作请求所属的第二全局事务标识,则将读操作发送至该从数据库,在监听到第一服务器发送写操作请求时,将写操作请求发送至主数据库。由此,通过一个主数据库对应多个从数据库,由从数据库进行读操作而主数据库进行写操作的方式,实现元数据库的读写分离,将流量巨大但实际并没有事务操作的读操作发送至各从数据库,由各从数据库对应执行分配到的读操作,从而降低了元数据库的单点工作负荷,并且,根据从数据库全局事务标识大于主数据库的全局事务标识,可以判断出主数据库与从数据库已同步完成,主从数据库的数据具有一致性,从而确保了从数据库进行读操作的准确性。
基于上述实施例,在实际应用中可能存在从数据库无法执行读操作的状况,比如,将读操作路由至从数据库后,由于从数据库故障或无法连接等原因,本次访问从数据库失败,无法读取数据,又比如,若主数据库与从数据库的同步存在延迟,导致主从数据库的数据存在差异,即上述实施例中的从数据库当前对应的第二GTID小于等于主数据库当前对应的第一GTID,则为保证读取数据的准确性,无法将读操作发送至从数据库。因此,为了确保在各种应用场景下,元数据库均可以准确的执行读操作,需要由主数据库在从数据库无法执行读操作时执行读操作。
即在本公开的一个实施例中,在上述实施例的步骤S103中,将读操作发送至任一从数据库后,还可以监听本次读操作的执行状况,在监听到读操作失败的情况下,比如,访问从数据库失败时,则进行读操作重试,即将本次读操作发送至主数据库,由主数据库进行读操作。由此,在从数据库执行读操作失败时将读操作发送至主数据库,确保在从数据库访问异等特殊场景下元数据库仍可以提供正常的服务,保证了元数据库的事务性。
在本公开的另一个实施例中,在上述实施例的步骤S103中,若确定第二GTID小于第一GTID,则将读操作发送至主数据库,即在确定主从数据库的同步存在延迟时,将本次元数据读操作由主数据库执行,从而避免读取从数据库中未同步更新的数据,保证本次读操作读取数据的准确性。
基于上述实施例,由于主数据库执行完写操作事务后,主数据库和第一连接对应的全局事务标识GTID均会发生改变,为了更加清楚的说明主数据库执行写操作的具体实现过程,本公开的实施例还提出了另一种读写分离方法。
图3是根据一示例性实施例示出的另一种读写分离方法的流程图。如图3所示,该读写分离方法至少还包括以下步骤S201-S202。
在步骤S201中,在监听到第一服务器发送的写操作请求的情况下,将写操作发送给主数据库。
其中,步骤201的具体执行方法可以参照上述实施例的描述,此处不再赘述。
在步骤S202中,在监听到主数据库返回的写操作事务结束消息的情况下,更新主数据库及第一连接对应的第一GTID。
在本公开实施例中,主数据库完成写操作并返回事务结束消息的情况后,首先获取主数据库当前对应的第四GTID,其中,第四GTID为本次写操作的GTID,也是主数据库执行本次写操作后更新的GTID。
具体的,当主数据库执行完成写操作后,即已将全部更新的数据写入主数据库后,主数据库向元数据管理服务器返回写操作事务结束消息,并且,由于主数据库执行了一次事务,主数据库对应的GTID发生了变化,由第一GTID变为本次写事务的第四GTID。
需要说明的是,由上述描述可知,在主数据库更新存储数据内容后,从数据库需要复制更新的内容,以便保证从数据库后续读操作的准确性。而在本公开的一个实施例中,主数据库执行完元数据管理服务器提交的写操作后,会向元数据管理服务器返回本次写操作事务结束消息,而不会等待从数据库完成数据的更新后再返回事务结束消息,即在本公开的实施例中,从数据库通过异步更新的方式更新主数据库在本次写操作中更新的数据,主数据库执行写操作不受从数据库更新数据的影响,从而节省了主数据库执行写操作所需的时间,提高了执行写操作的效率。
还需说明的是,在本公开的实施例中,当主数据库执行完写操作后,从数据库会自动在较短的时间内完成数据的更新,而在实际应用中,为了确保主从数据库之间未产生延迟,即从数据库完成了数据的同步,在从数据库执行读操作时,可通过上述实施例中的判断主从数据库的GTID的取值大小的方式确定主从数据库之间的数据一致性。
由此,本公开实施例的读写分离方法既可以通过主从数据库异步更新数据的方式提高主数据库执行写操作的效率,避免主从数据库同步更新数据可能产生的同步超时问题,又可以通过判断主从数据库的GTID的取值大小的方式确定主从数据库之间的数据一致性,保证从数据库读取数据的准确性。
在本公开的实施例中,元数据管理服务器将第一连接对应的第一GTID,替换为主数据库当前对应的第四GTID,从而在主数据库执行写操作后,实时更新当前连接对应的GTID,根据当前连接对应的GTID可确定当前连接已执行的事务,便于确认当前连接的任务进度。并且,后续该连接发送其他请求时,以第四GTID为基础执行相应的事务,便于根据主数据库当前最新的GTID进行相应的事务。
可选的,在本公开的一个实施例中,当元数据管理服务器执行完第一连接发送的请求时,断开第一连接,并清除第一连接对应的第一Session ID及当前对应的GTID。举例而言,若第一连接发送了读操作请求,建立第一连接时对应的第一GTID未发生改变,则清除第一连接对应的第一Session ID及第一GTID,若在断开第一连接前,第一连接对应的的GTID变为第四GTID,则清除第一连接对应的第一Session ID及第四GTID。由此,在连接断开后,清除本次连接对应的信息,避免无用的数据堆积,节省元数据管理服务器的存储空间。
本公开实施例的元数据读写分离方法,在监听到主数据库返回的写操作事务结束消息的情况下,更新主数据库及第一连接对应的第一GTID。在主数据库执行完元数据管理服务器提交的写操作后,会立即将向元数据管理服务器返回本次写操作事务结束消息,主从数据库通过异步更新的方式更新数据,节省了主数据库执行写操作所需的时间,提高了执行写操作的效率。还在主数据的GTID发生变化时对应更新当前连接的GTID,确保以更新后的实时数据进行后续事务。
基于上述实施例,在实际应用中,元数据管理服务器可能会同时向不同的服务器提供多个服务,即可能存在元数据管理服务器同时与多个接口建立连接的情况,为了更加清楚的描述存在多个连接的情况下,元数据管理服务器执行元数据读写分离的具体过程,本公开的实施例还提出了再一种读写分离方法。
图4是根据一示例性实施例示出的再一种读写分离方法的流程图。如图4所示,该读写分离方法包括以下步骤S301-S303。
在步骤S301中,监听到第二服务器发送的建立第二连接的请求,根据当前已建立的各连接对应的各Session ID,确定第二连接对应的第二Session ID及第三GTID,其中,第三GTID为主数据库当前对应的GTID。
在本公开的实施例中,当元数据管理服务器建立第一连接后,若监听到第二服务器通过其他接口发送的建立第二连接的请求,则根据第二连接请求建立第二连接,并确定第二连接对应的第二Session ID及第三GTID,其中,第三GTID为建立第二连接时主数据库当前对应的GTID。具体确定第二连接对应的第二Session ID及第三GTID的实现方式可以参照上述是实施例中确定第一连接的第一Session ID及对应的GTID的描述,此处不再赘述。
在步骤S302中,监听到第二服务器发送的写操作请求、且写操作请求所属的会话标识为第二Session ID的情况下,将写操作发送给主数据库。
具体的,元数据管理服务器根据第二服务器调用的应用程序接口,元数据管理服务器判断第二服务器通过第二连接发送写操作请求时,将写操作发送给主数据库,以使主数据库执行第二连接发送的写操作请求。
在步骤S303中,在监听到主数据库的写操作事务结束后,更新主数据库及第二Session ID对应的第三GTID。
在本公开的一个实施例中,在元数据管理服务器监听到主数据库的执行完第二服务器发送的写操作请求后,获取主数据库当前对应的第五GTID。其中,第五GTID为第二服务器发送的本次写操作的GTID,也是主数据库执行本次写操作后的对应的GTID。
进一步的,利用第五GTID,替换第二连接对应的第三GTID及第一连接对应的第一GTID。需要说明的是,如上所述,元数据管理服务器与其他服务器建立的连接的GTID是与主数据库当前的GTID对应的,因此,在元数据管理服务器建立了多个连接的情况下,若任一连接传输的操作请求使得主数据的GTID发生了变化,则全部的连接对应的GTID都应当同步更新,以确保各连接的GTID与主数据当前的GTID相同。
具体的,元数据管理服务器将第二连接对应的第三GTID,替换为主数据库当前对应的第五GTID,从而在主数据库执行写操作后,实时更新第二连接对应的GTID。并且,元数据管理服务器还将第一连接当前对应的GTID,替换为主数据库当前对应的第五GTID,比如,若第一连接对应的GTID未发生变化,而主数据库执行第二连接发送的写操作后对应的GTID变为第五GTID,则还将第一连接对应的第一GTID替换为第五GTID。
由此,在存在多个连接时,若任一连接传输的事务对主数据库的数据进行了更新,则元数据管理服务器同步更新其余每个连接对应的GTID,确保每个连接对应的GTID是主数据库当前最新的GTID,在元数据管理服务器执行不同的连接传输的事务时,避免读写数据时产生混乱,提高元数据读写分离的可靠性。
更进一步的,在本公开的一个实施例中,当不同连接同时对一个元数据库中的数据表进行操作时,元数据管理服务器以串行的方式执行各连接传输的事务。
举例而言,当第一连接和第二连接均调用写操作的API,以向主数据库中的同一个数据表写入数据时,元数据管理服务器根据调用时间的先后顺序,先进行第一连接传输的写操作事务,在第一连接传输的本次写操作事务结束后,再进行第二连接传输的写操作。其中,在元数据管理服务器执行完第一连接传输的写操作事务时,按照上述方式将第一连接和第二连接对应的GTID替换为主数据库当前对应的GTID,以使第二连接可以自动根据主数据库更新后的GTID进行写操作,从而,第一连接和第二连接在传输写操作的请求时仅需要关注本连接在传输写操作时主数据库的GTID的变化,而不需要考虑其他连接传输写操作时对主数据产生的影响,有利于保持数据的一致性。
还需说明的是,在本公开的其他实施例中,当不同连接传输对不同的数据表进行操作的事务时,元数据管理服务器可以以并行的方式执行各连接传输的事务,即不同连接可以同时传输对不同的数据表进行读写操作的事务,从而提高了执行事务的效率,缩短了等待时间。
因此,本公开的元数据读写分离方法,在存在多个连接时,若任一连接传输的事务对主数据库的数据进行了更新,则元数据管理服务器同步更新其余每个连接对应的GTID,确保每个连接对应的GTID是主数据库当前最新的GTID,在元数据管理服务器执行不同的连接传输的事务时,避免读写数据时产生混乱,并且,当不同连接同时传输对一个数据表进行操作的事务时,元数据管理服务器通过锁机制,以串行的方式每次执行一个连接传输的事务,从而每个连接在传输调用元数据库中的数据的请求时,仅需要关注自身调用过程中的GTID进度变化,避免存在多个连接同时传输调用数据的请求时相互影响,便于确认主从数据库的数据一致性,避免元数据库进行分布式事务对元数据库的性能带来的损耗。
为了更加清楚的说明描述前述实施例中所述的读写分离方法的实现过程,下面结合图2所示的应用场景,以一个具体实施例进行详细说明。图5是根据一示例性实施例示出的一种具体的读写分离方法的流程图。如图5所示,该方法包括以下步骤S401-S413。
在步骤S401中,第一服务器10通过服务端接口20发送建立第一连接的请求,元数据管理服务器30监听到第一连接的请求后,根据当前已建立的各连接对应的各SessionID,确定第一连接对应的第一Session ID。
在步骤S402中,元数据管理服务器30将主数据库40当前对应的第一GTID,确定为第一Session ID对应的GTID。
在步骤S403中,元数据管理服务器30监听到第一服务器发送的读操作请求,确定读操作请求所属的第一会话标识Session ID、及第一Session ID对应的第一全局事务标识GTID。
在步骤S404中,元数据管理服务器30获取任一从数据库50当前对应的第二GTID。
在步骤S405中,元数据管理服务器30判断第二GTID是否大于第一GTID,若是,则执行步骤S406,若否,则执行步骤S409。
在步骤S406中,元数据管理服务器30将读操作发送给该从数据库50。
在步骤S407中,元数据管理服务器30监听读操作的执行结果,判断读操作是否执行成功,若是,则执行步骤S408,若否,则执行步骤S409。
在步骤S408中,从数据库50返回读取结果至元数据管理服务器30。
在步骤S409中,元数据管理服务器30将读操作发送给主数据库40。
在步骤S410中,主数据库40执行读操作并返回读取结果至元数据管理服务器30,元数据管理服务器30将读取的数据发送至第一服务器10。
在步骤S411中,元数据管理服务器30监听到第一服务器发送的写操作请求的情况下,将写操作发送给主数据库40。
在步骤S412中,元数据管理服务器30在监听到主数据库40返回的写操作事务结束消息的情况下,更新主数据库40及第一连接对应的第一GTID。
在步骤S413中,各从数据库50进行数据同步,并更新各从数据库50对应的第二GTID。
其中,步骤S401-S413的具体实现方式可参照上述实施例的描述,此处不再赘述。需要说明的是,步骤S411和步骤S401的先后顺序在此不做限制,也就是说,在本公开实施例中可以根据用户的需要先执行相应的写操作或读操作。
还需说明的是,实际应用中元数据管理服务器可能会同时向不同的服务器提供多个服务,即在附图2中可能还存在第二服务器60(图中未示出),第二服务器60也是向元数据管理服务器请求读、写服务的任一服务器,则在元数据管理服务器30执行步骤步骤S401-S413的过程中还可以执行并行上述步骤S301-S303,具体实现方式可参照上述实施例的描述,此处不再赘述。由此,元数据管理服务器30根据监听到的操作请求的类型,将读操作请求发送至从数据库,由从数据库执行读操作,将写操作请求发送至主数据库,由主数据库执行读操作,实现了元数据的读写分离。
图6是根据一示例性实施例示出的一种读写分离装置框图。参照图6,该装置100包括第一确定模块110、第一获取模块120、第一发送模块130和第二发送模块140。
其中,第一确定模块110,被配置为监听到第一服务器发送的读操作请求,确定读操作请求所属的第一会话标识Session ID、及第一Session ID对应的第一GTID。
第一获取模块120,被配置为获取任一从数据库当前对应的第二GTID。
第一发送模块130,被配置为在第二GTID大于第一GTID的情况下,将读操作发送给任一从数据库;
第二发送模块140,被配置为在监听到第一服务器发送的写操作请求的情况下,将写操作发送给所述主数据库。
在本公开的一个实施例中,该装置,还包括:
第二确定模块,被配置为监听到第一服务器发送的建立第一连接的请求,根据当前已建立的各连接对应的各Session ID,确定第一连接对应的第一Session ID,其中,第一Session ID与其余各Session ID不同;
第三确定模块,被配置为将主数据库当前对应的第一GTID,确定为第一SessionID对应的GTID。
在本公开的一个实施例中,该装置,还包括:
第一更新模块,被配置为在监听到主数据库返回的写操作事务结束消息的情况下,更新主数据库及第一连接对应的第一GTID。
在本公开的一个实施例中,该装置,还包括:
第三发送模块,被配置为在监听到读操作失败的情况下,将读操作发送给主数据库。
在本公开的一个实施例中,该装置,还包括:
第四发送模块,被配置为在第二GTID小于第一GTID的情况下,将读操作发送给主数据库。
在本公开的一个实施例中,该装置,还包括:
清除模块,被配置为在监听到第一服务器断开第一Session ID对应的连接时,清除第一Session ID及第一GTID。
在本公开的一个实施例中,该装置,还包括:
第四确定模块,被配置为监听到第二服务器发送的建立第二连接的请求,根据当前已建立的各连接对应的各Session ID,确定第二连接对应的第二Session ID及第三GTID,其中,第三GTID为主数据库当前对应的GTID;
第五发送模块,被配置为监听到第二服务器发送的写操作请求、且写操作请求所属的会话标识为第二Session ID的情况下,将写操作发送给主数据库;
第二更新模块,被配置为在监听到主数据库的写操作事务结束后,更新主数据库及第二Session ID对应的第三GTID。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开的实施例提供的读写分离装置,在存在连接请求时,确定本次连接对应的会话标识及主数据库当前对应的全局事务标识,在进行读操作时,若任一从数据库当前对应的全局事务标识大于主数据库当前对应的全局事务标识,则将读操作发送至该从数据库。由此,通过一个主数据库对应多个从数据库,由从数据库进行读操作而主数据库进行写操作的方式,实现元数据库的读写分离,将流量巨大但实际并没有事务操作的读操作发送至各从数据库,由各从数据库对应执行分配到的读操作,从而降低了元数据库的单点工作负荷,并且,根据从数据库全局事务标识大于主数据库的全局事务标识,可以判断出主数据库与从数据库已同步完成,主从数据库具有数据一致性,从而确保了从数据库进行读操作的准确性。
图7是根据一示例性实施例示出的一种用于读写分离的服务器200的框图。
如图7所示,上述服务器200包括:
存储器210及处理器220,连接不同组件(包括存储器210和处理器220)的总线230,存储器210存储有计算机程序,当处理器220执行所述程序时实现本公开实施例所述的读写分离方法。
总线230表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
服务器200典型地包括多种电子设备可读介质。这些介质可以是任何能够被服务器200访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器210还可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)240和/或高速缓存存储器250。服务器200可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统260可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线230相连。存储器210可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本公开各实施例的功能。
具有一组(至少一个)程序模块270的程序/实用工具280,可以存储在例如存储器210中,这样的程序模块270包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块270通常执行本公开所描述的实施例中的功能和/或方法。
服务器200也可以与一个或多个外部设备290(例如键盘、指向设备、显示器291等)通信,还可与一个或者多个使得用户能与该服务器200交互的设备通信,和/或与使得该服务器200能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口292进行。并且,服务器200还可以通过网络适配器293与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器293通过总线230与服务器200的其它模块通信。应当明白,尽管图中未示出,可以结合服务器200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器220通过运行存储在存储器210中的程序,从而执行各种功能应用以及数据处理。
需要说明的是,本实施例的服务器的实施过程和技术原理参见前述对本公开实施例的读写分离方法的解释说明,此处不再赘述。
本公开实施例提供的服务器,可以执行如前所述的读写分离方法,在存在连接请求时,确定本次连接对应的会话标识及主数据库当前对应的全局事务标识,在进行读操作时,若任一从数据库当前对应的全局事务标识大于主数据库当前对应的全局事务标识,则将读操作路由至该从数据库。由此,通过一个主数据库对应多个从数据库,由从数据库进行读操作而主数据库可以只进行写操作的方式,实现元数据库的读写分离,将流量巨大但实际并没有事务操作的读操作发送至各从数据库,由各从数据库对应执行分配到的读操作,从而降低了元数据库的单点工作负荷,并且,根据从数据库全局事务标识大于主数据库的全局事务标识,可以判断出主数据库与从数据库已同步完成,主从数据库具有数据一致性,从而确保了从数据库进行读操作的准确性。
为了实现上述实施例,本公开还提出一种存储介质。
其中,该存储介质中的指令由服务器的处理器执行时,使得服务器能够执行如前所述的读写分离方法。
为了实现上述实施例,本公开还提供一种计算机程序产品,该计算机程序由服务器的处理器执行时,使得服务器能够执行如前所述的读写分离方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (10)

1.一种读写分离方法,其特征在于,包括:
监听到第一服务器发送的读操作请求,确定所述读操作请求所属的第一会话标识Session ID、及所述第一Session ID对应的第一全局事务标识GTID;
获取任一从数据库当前对应的第二GTID;
在所述第二GTID大于所述第一GTID的情况下,将所述读操作发送给所述任一从数据库;
在监听到所述第一服务器发送的写操作请求的情况下,将所述写操作发送给所述主数据库。
2.如权利要求1所述的方法,其特征在于,在所述监听到第一服务器发送的读操作请求之前,还包括:
监听到所述第一服务器发送的建立第一连接的请求,根据当前已建立的各连接对应的各Session ID,确定所述第一连接对应的第一Session ID,其中,所述第一Session ID与其余各Session ID不同;
将所述主数据库当前对应的第一GTID,确定为所述第一Session ID对应的GTID。
3.如权利要求1所述的方法,其特征在于,在所述将所述写操作发送给所述主数据库之后,还包括:
在监听到所述主数据库返回的写操作事务结束消息的情况下,更新所述主数据库及所述第一连接对应的第一GTID。
4.如权利要求1所述的方法,其特征在于,在所述将所述读操作发送给所述任一从数据库连接之后,还包括:
在监听到所述读操作失败的情况下,将所述读操作发送给所述主数据库。
5.如权利要求1所述的方法,其特征在于,在所述获取任一从数据库当前对应的第二GTID之后,还包括:
在所述第二GTID小于所述第一GTID的情况下,将所述读操作发送给所述主数据库。
6.如权利要求1-5任一所述的方法,其特征在于,还包括:
监听到第二服务器发送的建立第二连接的请求,根据当前已建立的各连接对应的各Session ID,确定所述第二连接对应的第二Session ID及第三GTID,其中,所述第三GTID为主数据库当前对应的GTID;
监听到所述第二服务器发送的写操作请求、且所述写操作请求所属的会话标识为第二Session ID的情况下,将所述写操作发送给所述主数据库;
在监听到所述主数据库的写操作事务结束后,更新所述主数据库及所述第二SessionID对应的第三GTID。
7.一种读写分离装置,其特征在于,包括:
第一确定模块,被配置为监听到第一服务器发送的读操作请求,确定所述读操作请求所属的第一会话标识Session ID、及所述第一Session ID对应的第一全局事务标识GTID;
第一获取模块,被配置为获取任一从数据库当前对应的第二GTID;
第一发送模块,被配置为在所述第二GTID大于所述第一GTID的情况下,将所述读操作发送给所述任一从数据库;
第二发送模块,被配置为在监听到所述第一服务器发送的写操作请求的情况下,将所述写操作发送给所述主数据库。
8.一种服务器,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1-6中任一项所述的读写分离方法。
9.一种存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行如权利要求1-6中任一项所述的读写分离方法。
10.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-6中任一所述的读写分离方法。
CN202110340981.4A 2021-03-30 2021-03-30 读写分离方法、装置及服务器 Pending CN113094431A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110340981.4A CN113094431A (zh) 2021-03-30 2021-03-30 读写分离方法、装置及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110340981.4A CN113094431A (zh) 2021-03-30 2021-03-30 读写分离方法、装置及服务器

Publications (1)

Publication Number Publication Date
CN113094431A true CN113094431A (zh) 2021-07-09

Family

ID=76670964

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110340981.4A Pending CN113094431A (zh) 2021-03-30 2021-03-30 读写分离方法、装置及服务器

Country Status (1)

Country Link
CN (1) CN113094431A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023160551A1 (zh) * 2022-02-28 2023-08-31 北京有竹居网络技术有限公司 请求处理方法及设备

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591964A (zh) * 2011-12-30 2012-07-18 北京新媒传信科技有限公司 数据读写分离机制的实现方法和装置
CN106372115A (zh) * 2016-08-23 2017-02-01 成都乾威科技有限公司 一种数据读写方法、系统及数据库系统
WO2017165827A1 (en) * 2016-03-25 2017-09-28 Amazon Technologies, Inc. Low latency distributed storage service
WO2018010501A1 (zh) * 2016-07-13 2018-01-18 中兴通讯股份有限公司 全局事务标识gtid的同步方法、装置及系统、存储介质
CN107766575A (zh) * 2017-11-14 2018-03-06 中国联合网络通信集团有限公司 读写分离的数据库访问方法及装置
CN108038157A (zh) * 2017-12-05 2018-05-15 北京星河星云信息技术有限公司 主从数据库读写方法、系统、存储装置和服务器
US20190197173A1 (en) * 2017-12-22 2019-06-27 Dropbox, Inc. Techniques for a linearizable primary-secondary database system that replicates database data with eventual consistency
CN110019496A (zh) * 2017-07-27 2019-07-16 北京京东尚科信息技术有限公司 数据读写方法和系统
CN110489092A (zh) * 2019-08-27 2019-11-22 四川长虹电器股份有限公司 一种数据库读写分离架构下读取数据延迟问题的解决方法
CN110955719A (zh) * 2018-09-27 2020-04-03 阿里巴巴集团控股有限公司 一种数据存取处理设备、系统和方法
CN111008220A (zh) * 2019-11-14 2020-04-14 珠海格力电器股份有限公司 数据源的动态识别方法及装置、存储介质和电子装置

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591964A (zh) * 2011-12-30 2012-07-18 北京新媒传信科技有限公司 数据读写分离机制的实现方法和装置
WO2017165827A1 (en) * 2016-03-25 2017-09-28 Amazon Technologies, Inc. Low latency distributed storage service
WO2018010501A1 (zh) * 2016-07-13 2018-01-18 中兴通讯股份有限公司 全局事务标识gtid的同步方法、装置及系统、存储介质
CN106372115A (zh) * 2016-08-23 2017-02-01 成都乾威科技有限公司 一种数据读写方法、系统及数据库系统
CN110019496A (zh) * 2017-07-27 2019-07-16 北京京东尚科信息技术有限公司 数据读写方法和系统
CN107766575A (zh) * 2017-11-14 2018-03-06 中国联合网络通信集团有限公司 读写分离的数据库访问方法及装置
CN108038157A (zh) * 2017-12-05 2018-05-15 北京星河星云信息技术有限公司 主从数据库读写方法、系统、存储装置和服务器
US20190197173A1 (en) * 2017-12-22 2019-06-27 Dropbox, Inc. Techniques for a linearizable primary-secondary database system that replicates database data with eventual consistency
CN110955719A (zh) * 2018-09-27 2020-04-03 阿里巴巴集团控股有限公司 一种数据存取处理设备、系统和方法
CN110489092A (zh) * 2019-08-27 2019-11-22 四川长虹电器股份有限公司 一种数据库读写分离架构下读取数据延迟问题的解决方法
CN111008220A (zh) * 2019-11-14 2020-04-14 珠海格力电器股份有限公司 数据源的动态识别方法及装置、存储介质和电子装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023160551A1 (zh) * 2022-02-28 2023-08-31 北京有竹居网络技术有限公司 请求处理方法及设备

Similar Documents

Publication Publication Date Title
CN109684307B (zh) 一种数据存储方法、装置、设备及存储介质
CN108319623A (zh) 一种数据重分布方法、装置及数据库集群
CN111897638A (zh) 分布式任务调度方法及系统
CN109561151B (zh) 数据存储方法、装置、服务器和存储介质
CN101751415A (zh) 元数据服务系统、元数据同步方法与写服务器更新方法
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN113360519B (zh) 数据处理方法、装置、设备和存储介质
CN115668141A (zh) 使用时间戳对网络中的事务进行分布式处理
EP3786802A1 (en) Method and device for failover in hbase system
CN111475519A (zh) 数据缓存方法及装置
CN105373563B (zh) 数据库切换方法及装置
CN113946276A (zh) 集群中的磁盘管理方法、装置及服务器
CN113094431A (zh) 读写分离方法、装置及服务器
CN114493602B (zh) 区块链交易的执行方法、装置、电子设备和存储介质
CN110659303A (zh) 一种数据库节点的读写控制方法及装置
EP3082050A1 (en) Mass data fusion storage method and system
CN111399753B (zh) 写入图片的方法和装置
CN113836238A (zh) 数据命令的批量处理方法及装置
CN111221857B (zh) 从分布式系统中读数据记录的方法和装置
CN112711606A (zh) 数据库访问方法、装置、计算机设备和存储介质
CN113760862A (zh) 一种增量数据断点续传方法、装置、设备及存储介质
CN112052104A (zh) 基于多机房实现的消息队列的管理方法及电子设备
CN116775684A (zh) 数据处理方法、系统、装置、电子设备及存储介质
CN111666338B (zh) 数据复制方法、控制节点及电子设备
CN111639089B (zh) 事务处理方法、装置、电子设备和计算机可读存储介质

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