CN113297231A - 数据库处理方法及装置 - Google Patents
数据库处理方法及装置 Download PDFInfo
- Publication number
- CN113297231A CN113297231A CN202010740412.4A CN202010740412A CN113297231A CN 113297231 A CN113297231 A CN 113297231A CN 202010740412 A CN202010740412 A CN 202010740412A CN 113297231 A CN113297231 A CN 113297231A
- Authority
- CN
- China
- Prior art keywords
- node
- read request
- queue
- slave
- sending
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 46
- 238000012545 processing Methods 0.000 claims description 27
- 238000000034 method Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 238000000926 separation method Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 230000001364 causal effect Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000010076 replication Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供数据库处理方法及装置,其中所述数据库处理方法包括:接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。本说明书提供的数据库处理方法通过代理节点确定所有从节点均针对主节点的最新操作进行了更新之后向从节点发送读请求,避免主节点与从节点之间因复制延迟对数据一致性的影响,实现在任意读节点读取的数据均为全局最新的数据,从而实现全局一致性读。
Description
技术领域
本说明书涉及计算机技术领域,特别涉及一种数据库处理方法。本说明书同时涉及一种数据库处理装置,一种计算设备,以及一种计算机可读存储介质。
背景技术
在互联网数据库解决方案中,MySQL(关系型数据库)是一种比较常用的数据库,MySQL在数据访问并发量较高的情况下,一般会采用读写分离的技术实现数据的读操作和写操作,在数据库中设置一个主节点(主库)和至少一个从节点(从库),主节点中的数据实时同步到从节点中,主节点负责写操作,从节点负责读操作。
读写分离下,很多应用的连接(会话)间存在因果依赖关系,但因为读写分离架构下复制的延迟,导致不能保证因果关系的正确性即一致性。例如,某一应用程序首先与主节点建立连接A,执行了数据的更新,然后与从节点建立连接B,查询这个更新对应的数据,在读写分离下,因为写操作针对主节点,读操作针对从节点,而主节点和从节点之间有复制延迟,所以在通过连接B来查询数据时可能查询不到前面通过连接A更新的数据,导致事务逻辑的一致性受影响。
现有技术通常通过分布式(XA)事务保证一致性,但这样做意味着将在多个读节点间加锁,交互次数多,造成采用多节点的性能可能反而比单个节点低,进而需要性能更高的方法保证一致性的操作或者处理。
发明内容
有鉴于此,本说明书实施例提供了一种数据库处理方法。本说明书同时涉及一种数据库处理装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种数据库处理方法,应用于代理节点,包括:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
可选地,从主节点获取所述主节点的最新操作,包括:
向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
可选地,确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新包括:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
可选地,所述接收读请求包括:
通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
可选地,所述向所述主节点发送询问请求包括:
通过第二线程向所述主节点发送询问请求;
所述接收所述主节点返回的表征所述主节点的最新操作的信息包括:通过所述第二线程接收所述主节点返回的所述信息。
可选地,所述向所述至少一个从节点中的任一从节点发送所述读请求包括:
向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
可选地,所述向所述至少一个从节点中的任一从节点发送所述读请求包括:
向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
可选地,所述信息包括所述主节点返回的表征所述最新操作的日志记录的日志序号,接收所述信息包括接收所述日志序号。
根据本说明书实施例的第二方面,提供了一种数据库处理装置,应用于代理节点,包括:
获取模块,被配置为:接收读请求,响应于所述读请求,从所述主节点获取所述主节点的最新操作;
发送模块,被配置为:确定所述至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
可选地,所述获取模块还被配置为向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
可选地,所述发送模块还被配置为:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
可选地,所述获取模块还被配置为:
通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
可选地,所述获取模块还被配置为:
通过第二线程向所述主节点发送询问请求;
通过所述第二线程接收所述主节点返回的所述信息。
可选地,所述发送模块还被配置为:
向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
可选地,所述发送模块还被配置为:
向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
可选地,所述信息包括所述主节点返回的表征所述最新操作的日志记录的日志序号,所述获取模块还被配置为接收所述日志序号。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现任意所述数据库处理方法的步骤。
本说明书提供的数据库处理方法,利用代理节点接收读请求,响应于读请求,从主节点获取主节点的最新操作,并且在确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,才向所述至少一个从节点中的任一从节点发送读请求。本说明书提供的数据库处理方法通过代理节点确定所有从节点均针对主节点的最新操作进行了更新之后向从节点发送读请求,避免主节点与从节点之间因复制延迟对数据一致性的影响,实现在任意读节点读取的数据均为全局最新的数据,从而实现全局一致性读。
附图说明
图1示出了根据本说明书一实施例提供的一种数据库处理方法的流程图;
图2示出了根据本说明书一实施例提供的一种数据库处理方法的代理节点、主节点、从节点之间的操作流的示意图;
图3示出了根据本说明书另一实施例提供的一种数据库处理方法的流程图;
图4示出了根据本说明书另一实施例提供的一种数据库处理方法的划分队列的示意图;
图5示出了根据本说明书再一实施例提供的一种数据库处理方法的流程图;
图6示出了根据本说明书再一实施例提供的一种数据库处理方法的划分队列的示意图;
图7示出了本说明书一实施例提供的一种数据库处理装置的结构示意图;
图8示出了根据本说明书一实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
读写分离:一种分布式扩张架构,利用事务读多写少的特点,将写集中到一个写节点即主节点(通常叫做主库),再将写节点的数据复制到多个读节点即从节点(通常叫做从节点),然后从读节点读数据,即让写节点处理事务性增加、修改、删除操作(INSERT、UPDATE、DELETE),而读节点处理查询(SELECT)操作。
全局一致性读:在读写分离架构下,存在多个读节点,全局一致性读即要保证,在任意读节点读到的数据都要是全局(整个集群)最新的数据。
SQL(Structured Query Language,结构化查询语言):是一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库***。SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库***,可以使用相同的SQL作为数据输入与管理的接口,SQL可以嵌套,这使它具有极大的灵活性和强大的功能。
MySQL:是一个关系型数据库管理***,随着MySQL的不断成熟,逐渐用于更多大规模网站和应用。
二进制日志(binlog):二进制格式的日志文件,用来记录MySQL内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。MySQL官方支持三种binlog数据格式,对应参数为binlog_format,可选值分别为ROW、STATEMENT、MIXED,对应的默认值为MIXED,需要调整为ROW模式,该模式的特点为:每个增加、修改、删除的SQL,都会在binlog里记录SQL所影响的行在变更前和变更后的值。
重做日志(REDO log):可以用于恢复数据库,生成任意时间点的数据页。对数据库进行写操作时会导致数据页的修改,每一个数据页的修改都会产生对应的REDO log,REDOlog没有记录用户的SQL,仅仅记录了最终的结果,即这个SQL执行后造成的数据页变化,所以依赖这种复制架构,不需要SQL解析SQL优化,MySQL直接找到对应的文件中的数据页,定位到指定偏移,直接更新即可。
接下来,对本说明书的基本构思进行简述:
读写分离下,很多应用的连接(会话)间存在因果依赖关系,但因为读写分离架构下复制的延迟,导致不能保证因果关系的正确性即一致性。例如,在一实施例中,某一应用程序首先与主节点建立连接A,执行了数据的更新,然后与从节点建立连接B,查询这个更新对应的数据,在读写分离下,因为写操作针对主节点,读操作针对从节点,而主节点和从节点之间有复制延迟,所以在通过连接B来查询数据时可能查询不到前面通过连接A更新的数据,导致事务逻辑的一致性受影响。例如在用户a通过电子银行应用向用户b转账100元的示例中,电子银行应用与主节点建立连接A,执行将用户a账户减100元和在用户b账户加100元的事务,之后与从节点建立连接B,查询用户b账户的余额时,可能由于复制延迟,导致通过连接B查询不到用户b账户余额增加100元。
本说明书提供了一种数据库处理方法,增设代理节点即代理服务器,代理节点与应用程序建立连接,解析发送进来的每一条SQL,如果是修改(UPDATE)、删除(DELETE)、增加(INSERT)、创建(CREATE)等写操作则直接发往主节点,如果是查询(SELECT)读请求,则响应于读请求,从主节点获取主节点的最新操作,并且在确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,才向所述至少一个从节点中的任一从节点发送读请求。本说明书提供的数据库处理方法通过代理节点确定所有从节点均针对主节点的最新操作进行了更新之后向从节点发送读请求,避免主节点与从节点之间因复制延迟对数据一致性的影响,实现在任意读节点读取的数据均为全局最新的数据,从而实现全局一致性读。
在本说明书中,提供了一种数据库处理方法,本说明书同时涉及一种数据库处理装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本说明书一实施例提供的一种数据库处理方法的流程图,具体包括步骤102至104。
步骤102:接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作。
读写分离架构中,将写操作集中到一个写节点即主节点,再将主节点的数据复制到多个读节点即从节点,然后从读节点读数据,即主节点处理事务性增加、修改、删除操作(INSERT、UPDATE、DELETE),而从节点处理查询(SELECT)操作。
读请求可以为SQL(Structured Query Language,结构化查询语言)查询(SELECT)请求,代理节点接收应用程序发送的读请求,响应于读请求,代理节点从主节点获取主节点的最新操作。主节点的最新操作为事务性增加、修改或删除操作(INSERT、UPDATE、DELETE)。
在本说明书一实施例中,从主节点获取所述主节点的最新操作可以通过以下实现:向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
图2示出了根据本说明书一实施例提供的一种数据库处理方法的代理节点、主节点、从节点之间的操作流的示意图,如图2所示,代理节点在收到读请求之后,向主节点发送询问(ask)请求,主节点在接收到询问请求之后,将表征主节点发生的最新操作的信息发送至代理节点,所述信息可以包括与主节点发生的最新操作(写操作)相关的SQL语句,记录SQL语句的二进制日志记录、或者记录SQL语句执行后结果的重做日志记录。
在本说明书一实施方式中,所述信息可以包括主节点返回的表征所述最新操作的日志记录的日志序号(LSN,Log sequence number),例如表征最新操作的二进制日志记录或表征最新操作的重做日志记录的LSN。LSN表示日志文件的寻址地址,针对每个操作的日志记录都有一个LSN,该LSN表示该日志记录在日志文件中的寻址位置。
步骤104:确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
以表征主节点的最新操作的信息为二进制日志记录为例进行说明,主节点在二进制日志记录中记录最新操作,从节点将主节点的二进制日志复制到其中继日志。具体地,从节点开始一个工作线程(I/O),I/O线程从主节点的二进制日志中读取事件,I/O线程将这些事件写入中继日志。从节点开始SQL从线程,从中继日志读取事件,并重放其中的事件而更新从节点数据,使其与主节点中的数据一致。如图2所示,从节点完成数据更新之后,向代理节点发送更新报告。图2示例性地示出从节点的数目为2,该数目仅为示例,不作具体限定。
以表征主节点的最新操作的信息为重做日志记录为例进行说明,主节点的重做日志记录中记录最新操作执行后造成的数据页变化,而非记录最新操作相关的SQL语句,MySQL直接找到对应的文件中的数据页,定位到指定偏移,直接更新即可。从节点完成数据更新之后,向代理节点发送更新报告。
以表征主节点的最新操作的信息为主节点返回的表征所述最新操作的日志记录的LSN为例进行说明,从节点在完成更新日志记录的LSN后,向代理节点发送更新报告。
实际应用中,确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新可以通过以下实现:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
代理节点将来自从节点的更新报告的数目与至少一个从节点的数目进行比较,如果确认两者相同,则判定接收到所有从节点的更新报告,确定所有从节点均针对所述最新操作进行了更新,之后向任一从节点发送读请求,实现提供了一种确定所有从节点均针对最新操作进行了更新的具体方法,使确定过程具体化。
本说明书提供的数据库处理方法通过代理节点确定所有从节点均针对主节点的最新操作进行了更新之后向从节点发送读请求,避免主节点与从节点之间因复制延迟对数据一致性的影响,实现在任意读节点读取的数据均为全局最新的数据,从而实现全局一致性读。
下面以上文描述的用户a通过电子银行应用向用户b转账的具体场景描述本说明书提供的数据库处理方法。
用户a通过电子银行应用向用户b转账100元,电子银行应用与主节点建立连接,向主节点执行将用户a账户减100元和在用户b账户加100元的事务,事务提交后,写入主节点的日志记录。如果电子银行应用直接向从节点发送查询请求来查询用户b账户的余额,可能出现由于复制延迟导致的查询不到用户b账户余额增加100元。
因此,本说明书提供的数据库处理方法中,增设代理节点,电子银行应用将查询(SELECT)请求(查询用户b账户余额)发送至代理节点,代理节点向主节点发送询问请求,主节点向代理节点返回表征其最新操作(用户b账户增加100元)的信息,例如与用户b账户增加100元相关的二进制日志记录中的SQL语句。
从节点将主节点的上述二进制日志记录复制到从节点的中继日志,从中继日志读取事件(用户b账户增加100元),重放事件从而更新从节点数据,在完成数据更新之后,向代理节点发送更新报告。代理节点确定接收到所有从节点的更新报告之后,向任一从节点发送读请求,查询用户b的账户余额。从而确保任一从节点读的用户b账户余额增加100元,从而实现全局一致性读。
在本说明书一实施方式中,所述接收读请求包括:通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
所述向所述主节点发送询问请求包括:通过第二线程向所述主节点发送询问请求;所述接收所述主节点返回的表征所述主节点的最新操作的信息包括:通过所述第二线程接收所述主节点返回的所述信息。
所述第一线程为独立的排队线程,代理节点开启排队线程将接收到的读请求按顺序添加至请求队列。所述第二线程为不同于第一线程的独立的询问线程,代理节点开启询问线程向主节点发送询问请求并接收主节点返回的信息。采用不同线程进行接收读请求和向主节点发送询问请求的操作,可以减少等待时间,减少整个操作的时间开销。
由于上述数据库处理方法在接收到每个读请求后都需要获取主节点的最新操作并确认所有从节点均针对最新操作进行更新,时间开销较大。为了进一步减小整个操作的时间开销,采用划分队列的方式进行批量处理。
图3示出了根据本说明书另一实施例提供的一种数据库处理方法的流程图,包括步骤302至310。
步骤302:接收读请求,并将所述读请求添加至请求队列,响应于所述读请求,向所述主节点发送询问请求;
步骤304:向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
步骤306:接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
步骤308:确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
步骤310:向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
下面结合图4对图3中的各步骤的操作流进行说明。
如图4所示,根据针对读请求的操作流划分为请求队列402、第一等待队列404、第二等待队列406、发送队列408四个队列,其中,接收到读请求后将其添加至请求队列402,向主节点发送询问请求的情况下读请求从请求队列402转移至第一等待队列404,接收到主节点返回的最新操作的情况下读请求从第一等待队列404转移至第二等待队列406,确定至少一个从节点中的所有从节点均针对最新操作进行了更新的情况下读请求从第二等待队列406转移至发送队列408。四个队列并行处理,读请求在每个队列中进行等待,每个队列中针对到达相应队列顶部的读请求进行处理,下面进行具体阐述。
如上文所述,通过第一线程接收读请求并将所述读请求添加至请求队列402,请求队列402中按顺序存储多个读请求,针对特定读请求,首先判断该读请求是否到达请求队列402的顶部,若未到达请求队列402的顶部,则等待其他读请求被处理,若到达请求队列402的顶部,则判断是否针对该读请求向主节点发送了询问请求,如果判断为是,则如图4第一个箭头所示将该读请求转移至第一等待队列404,如果判断为否,则等待针对该读请求向主节点发送询问请求。
判断第一等待队列404中的读请求是否到达第一等待队列404的顶部,若未到达,则等待其他读请求被处理,若到达第一等待队列404的顶部,判断是否接收到所述主节点返回的最新操作,若是,则如图4第二个箭头所示将该读请求转移至第二等待队列406,若否,则等待接收所述主节点返回的最新操作。接下来,确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,如图4第三个箭头所示将该读请求从第二等待队列406转移至发送队列408。接下来,判断所述读请求是否到达发送队列408的顶部,若未到达,等待其他读请求被发送,若到达发送队列408的顶部,则向所述至少一个从节点中的任一从节点发送该读请求。
根据本实施例提供的数据库处理方法根据接收到的所有读请求的操作流划分为四个并行处理的队列,无需等待针对上一读请求的全部操作完成之后执行当前读请求,而是在每个队列处理对应操作流阶段的读请求,从而在实现全局一致性读的前提下更快捷地将读请求发送至从节点,减小实现全局一致性读的时间开销。
上述对划分为四个队列的实施例进行了说明。本说明书对队列的具体数量不作具体限定,下面示例性地对划分为三个队列的实施例进行说明。
图5示出了根据本说明书再一实施例提供的一种数据库处理方法的流程图,包括步骤502至508。
步骤502:接收读请求,并将所述读请求添加至请求队列,响应于所述读请求,向所述主节点发送询问请求并接收所述主节点返回的最新操作;
步骤504:向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
步骤506:确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
步骤508:向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
下面结合图6对图5中的各步骤的操作流进行说明。
如图6所示,根据针对读请求的操作流划分为请求队列402、等待队列604、发送队列408三个队列,其中,接收到读请求后将其添加至请求队列402,向主节点发送询问请求并接收到所述主节点返回的最新操作的情况下读请求从请求队列402转移至等待队列604,确定至少一个从节点中的所有从节点均针对最新操作进行了更新的情况下读请求从等待队列604转移至发送队列408。三个队列并行处理,读请求在每个队列中进行等待,每个队列中针对到达相应队列顶部的读请求进行处理,下面进行具体阐述。
如上文所述,通过第一线程接收读请求并将所述读请求添加至请求队列402,请求队列402中按顺序存储多个读请求。针对请求队列402中的特定读请求,首先判断该读请求是否到达请求队列402的顶部,若未到达请求队列402的顶部,则等待其他读请求被处理,若到达请求队列402的顶部,则判断是否针对该读请求向主节点发送了询问请求并接收到所述主节点返回的最新操作,如果判断为是,则如图4第一个箭头所示将该读请求转移至等待队列604,如果判断为否,则等待针对该读请求向主节点发送询问请求并接收到所述主节点返回的最新操作。
判断等待队列604中的读请求是否到达等待队列604的顶部,若未到达,则等待其他读请求被处理,若到达等待队列604的顶部,确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,如图4第二个箭头所示将该读请求从等待队列604转移至发送队列408。接下来,判断所述读请求是否到达发送队列408的顶部,若未到达,等待其他读请求被发送,若到达发送队列408的顶部,则向所述至少一个从节点中的任一从节点发送该读请求。
图5所示的数据库处理方法根据接收到的所有读请求的操作流划分为三个并行处理的队列,无需等待针对上一读请求的全部操作完成之后执行当前读请求,而是在每个队列处理对应操作流阶段的读请求,从而在实现全局一致性读的前提下快捷地将读请求发送至从节点,减小实现全局一致性读的时间开销。本实施例提供的数据库处理方法与图3所示的实施例中的数据库处理方法相比对队列划分进行了简化,但时间开销减小程度小于图3所示的实施例的数据库处理方法的时间开销减小程度。
与上述方法实施例相对应,本说明书还提供了数据库处理装置实施例,图7示出了本说明书一实施例提供的一种数据库处理装置的结构示意图。如图7所示,该装置包括:
获取模块702,被配置为:接收读请求,响应于所述读请求,从所述主节点获取所述主节点的最新操作;
发送模块704,被配置为:确定所述至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
读请求可以为SQL查询(SELECT)请求,代理节点接收应用程序发送的读请求,响应于读请求,代理节点从主节点获取主节点的最新操作。主节点的最新操作为事务性增加、修改或删除操作(INSERT、UPDATE、DELETE)。
本说明书提供的数据库处理装置通过代理节点确定所有从节点均针对主节点的最新操作进行了更新之后向从节点发送读请求,避免主节点与从节点之间因复制延迟对数据一致性的影响,实现在任意读节点读取的数据均为全局最新的数据,从而实现全局一致性读。
可选地,所述获取模块还被配置为向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
可选地,所述发送模块还被配置为:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
可选地,所述获取模块还被配置为:
通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
可选地,所述获取模块还被配置为:
通过第二线程向所述主节点发送询问请求;
通过所述第二线程接收所述主节点返回的所述信息。
可选地,所述发送模块还被配置为:
向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
本实施例提供的数据库处理装置根据接收到的所有读请求的操作流划分为四个并行处理的队列,无需等待针对上一读请求的全部操作完成之后执行当前读请求,而是在每个队列处理对应操作流阶段的读请求,从而在实现全局一致性读的前提下更快捷地将读请求发送至从节点,减小实现全局一致性读的时间开销。
可选地,所述发送模块还被配置为:
向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
本实施例提供的数据库处理装置根据接收到的所有读请求的操作流划分为三个并行处理的队列,无需等待针对上一读请求的全部操作完成之后执行当前读请求,而是在每个队列处理对应操作流阶段的读请求,从而在实现全局一致性读的前提下快捷地将读请求发送至从节点,减小实现全局一致性读的时间开销。
可选地,所述信息包括所述主节点返回的表征所述最新操作的日志记录的日志序号,所述获取模块还被配置为接收所述日志序号。
上述为本实施例的一种数据库处理装置的示意性方案。需要说明的是,该数据库处理装置的技术方案与上述的数据库处理方法的技术方案属于同一构思,数据库处理装置的技术方案未详细描述的细节内容,均可以参见上述数据库处理方法的技术方案的描述。
图8示出了根据本说明书一实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。
计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备800还可以是移动式或静止式的服务器。
其中,处理器820用于执行如下计算机可执行指令:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据库处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据库处理方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据库处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据库处理方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (18)
1.一种数据库处理方法,应用于代理节点,包括:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
2.根据权利要求1所述的数据库处理方法,其中,从主节点获取所述主节点的最新操作,包括:
向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
3.根据权利要求1或2所述的数据库处理方法,其中,确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新包括:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
4.根据权利要求1所述的数据库处理方法,其中,所述接收读请求包括:
通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
5.根据权利要求2所述的数据库处理方法,其中,所述向所述主节点发送询问请求包括:
通过第二线程向所述主节点发送询问请求;
所述接收所述主节点返回的表征所述主节点的最新操作的信息包括:通过所述第二线程接收所述主节点返回的所述信息。
6.根据权利要求4所述的数据库处理方法,其中,所述向所述至少一个从节点中的任一从节点发送所述读请求包括:
向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
7.根据权利要求4所述的数据库处理方法,其中,所述向所述至少一个从节点中的任一从节点发送所述读请求包括:
向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
8.根据权利要求2所述的数据库处理方法,其中,所述信息包括所述主节点返回的表征所述最新操作的日志记录的日志序号,接收所述信息包括接收所述日志序号。
9.一种数据库处理装置,应用于代理节点,包括:
获取模块,被配置为:接收读请求,响应于所述读请求,从所述主节点获取所述主节点的最新操作;
发送模块,被配置为:确定所述至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
10.根据权利要求9所述的数据库处理装置,其中,所述获取模块还被配置为向所述主节点发送询问请求并接收所述主节点返回的表征所述主节点的最新操作的信息。
11.根据权利要求9或10所述的数据库处理装置,其中,所述发送模块还被配置为:
将从所述至少一个从节点接收的更新报告的数目与所述至少一个从节点的数目进行核实;
在接收到所有从节点的更新报告的情况下,确定所有从节点均针对所述最新操作进行了更新。
12.根据权利要求9所述的数据库处理装置,其中,所述获取模块还被配置为:
通过第一线程接收所述读请求,并将所述读请求添加至请求队列。
13.根据权利要求10所述的数据库处理装置,其中,所述获取模块还被配置为:
通过第二线程向所述主节点发送询问请求;
通过所述第二线程接收所述主节点返回的所述信息。
14.根据权利要求12所述的数据库处理装置,其中,所述发送模块还被配置为:
向所述主节点发送询问请求的情况下,将所述请求队列中的读请求转移至第一等待队列;
接收到所述主节点返回的最新操作的情况下,将所述第一等待队列中的读请求转移至第二等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述第二等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
15.根据权利要求12所述的数据库处理装置,其中,所述发送模块还被配置为:
向所述主节点发送询问请求并接收到所述主节点返回的最新操作的情况下,将所述请求队列中的读请求转移至等待队列;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新的情况下,将所述等待队列中的读请求转移至发送队列;
向所述至少一个从节点中的任一从节点发送所述发送队列中的读请求。
16.根据权利要求10所述的数据库处理装置,其中,所述信息包括所述主节点返回的表征所述最新操作的日志记录的日志序号,所述获取模块还被配置为接收所述日志序号。
17.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收读请求,响应于所述读请求,从主节点获取所述主节点的最新操作;
确定至少一个从节点中的所有从节点均针对所述最新操作进行了更新,则向所述至少一个从节点中的任一从节点发送所述读请求。
18.一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现权利要求1至8任意一项所述数据库处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010740412.4A CN113297231A (zh) | 2020-07-28 | 2020-07-28 | 数据库处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010740412.4A CN113297231A (zh) | 2020-07-28 | 2020-07-28 | 数据库处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113297231A true CN113297231A (zh) | 2021-08-24 |
Family
ID=77318172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010740412.4A Pending CN113297231A (zh) | 2020-07-28 | 2020-07-28 | 数据库处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113297231A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780296A (zh) * | 2022-05-09 | 2022-07-22 | 马上消费金融股份有限公司 | 数据库集群的数据备份方法、装置及*** |
WO2024114284A1 (zh) * | 2022-12-02 | 2024-06-06 | 华为云计算技术有限公司 | 基于云服务的事务处理方法、装置和计算设备集群 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011210107A (ja) * | 2010-03-30 | 2011-10-20 | Nippon Telegr & Teleph Corp <Ntt> | メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム |
US20130036092A1 (en) * | 2011-08-03 | 2013-02-07 | Amadeus S.A.S. | Method and System to Maintain Strong Consistency of Distributed Replicated Contents in a Client/Server System |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库***及其读写方法 |
CN110231915A (zh) * | 2019-05-29 | 2019-09-13 | 南昌大学 | 数据管理方法、***、装置、计算机设备及存储介质 |
-
2020
- 2020-07-28 CN CN202010740412.4A patent/CN113297231A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011210107A (ja) * | 2010-03-30 | 2011-10-20 | Nippon Telegr & Teleph Corp <Ntt> | メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム |
US20130036092A1 (en) * | 2011-08-03 | 2013-02-07 | Amadeus S.A.S. | Method and System to Maintain Strong Consistency of Distributed Replicated Contents in a Client/Server System |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库***及其读写方法 |
CN110231915A (zh) * | 2019-05-29 | 2019-09-13 | 南昌大学 | 数据管理方法、***、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
蹇云编著: "操作***原理简明基础教程", 31 August 2018, 北京邮电大学出版社, pages: 19 - 20 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780296A (zh) * | 2022-05-09 | 2022-07-22 | 马上消费金融股份有限公司 | 数据库集群的数据备份方法、装置及*** |
WO2024114284A1 (zh) * | 2022-12-02 | 2024-06-06 | 华为云计算技术有限公司 | 基于云服务的事务处理方法、装置和计算设备集群 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021238701A1 (zh) | 数据迁移方法以及装置 | |
CN113297320B (zh) | 分布式数据库***及数据处理方法 | |
US7698319B2 (en) | Database system management method, database system, database device, and backup program | |
CN111386522A (zh) | 数据库表的多区多主复制 | |
CN111797121A (zh) | 读写分离架构业务***的强一致性查询方法、装置及*** | |
CN111858676A (zh) | 一种数据处理的方法及装置 | |
CN113204435B (zh) | 数据处理方法以及*** | |
CN110188114A (zh) | 一种数据操作的优化方法、装置、***、设备和存储介质 | |
US10642530B2 (en) | Global occupancy aggregator for global garbage collection scheduling | |
CN113297231A (zh) | 数据库处理方法及装置 | |
WO2007078479A2 (en) | Method and mechanism for loading xml documents into memory | |
CN116108057B (zh) | 一种分布式数据库访问方法、装置、设备及存储介质 | |
CN115114374B (zh) | 事务执行方法、装置、计算设备及存储介质 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN110955719B (zh) | 一种数据存取处理设备、***和方法 | |
CN111475588A (zh) | 数据处理方法及装置 | |
CN113297159B (zh) | 数据存储方法以及装置 | |
US20230394024A1 (en) | Data processing method and apparatus, electronic device, storage medium, and program product | |
CN111475493B (zh) | 数据读取方法及装置 | |
CN108256019A (zh) | 数据库主键生成方法、装置、设备及其存储介质 | |
JP2018180688A (ja) | 更新処理プログラム、装置、及び方法 | |
CN116049306A (zh) | 数据同步方法、装置、电子设备以及可读存储介质 | |
CN112286947B (zh) | 保持不同存储***的数据一致的方法以及装置 | |
CN113297168A (zh) | 分布式***中数据迁移方法及装置 | |
CN117407042B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40057895 Country of ref document: HK |