CN110807062B - 一种数据同步的方法、装置和数据库主机 - Google Patents
一种数据同步的方法、装置和数据库主机 Download PDFInfo
- Publication number
- CN110807062B CN110807062B CN201810873311.7A CN201810873311A CN110807062B CN 110807062 B CN110807062 B CN 110807062B CN 201810873311 A CN201810873311 A CN 201810873311A CN 110807062 B CN110807062 B CN 110807062B
- Authority
- CN
- China
- Prior art keywords
- transaction
- thread
- host
- log
- database
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
-
- 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
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据同步的方法、装置和数据库主机,其中,所述数据同步的方法,包括:数据库主机接收事务提交请求;数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,所述主机事务线程退出;所述数据库主机接收到所述数据库备机发送的确认ACK响应,从线程池中选择线程执行事务提交操作。
Description
技术领域
本申请涉及但不限于数据库处理技术,尤指一种数据同步的方法、装置和数据库主机。
背景技术
目前分布式数据库已经成为数据库发展的一个重点方向,分布式数据库的总体架构如图1所示,其中:
客户接入层由多个APP(Application,应用)组成,支持通用的ODBC(OpenDatabase Connectivity,开放数据库连接)和JDBC(Java Database Connectivity,Java数据库连接)接口,用户通过客户接入层使用分布式数据库;
计算节点集群由多个DBProxy(数据库中间件)组成,SQL(Structured QueryLanguage,结构化查询语言)语句在计算节点中完成基本的处理和分发;
管理节点由多个组件组成,包括OMM Server(Operation Maintance ManagementServer,分布式数据库操作维护管理服务器),MDS(MetaData Server,元数据服务器),PM(ProxyManager,DBProxy管理中心),CM(Cluster Manager,集群管理中心)等,用于管理和保障分布式数据库系统;
GTM(Global Transaction Manage,全局事务管理)主要用于生成和维护分布式事务的全局事务ID;
数据节点集群由多个DB-GROUP(数据库组)组成,每个DB-GROUP由1主1备的DB(Database,数据库)构成,每一个数据节点主要用于存取数据,其性能高低直接影响了分布式数据库的整体性能;
后置中间件主要对数据节点进行监测,备份,恢复等;
数据节点集群中每个数据节点都是由1主1备的DB组成,用于在主库宕机的时候,保障数据库的数据一致性和对外服务的高可用性的特性。
数据节点主备数据库复制方案中,常常采用线程同步等待的半同步复制,该方案能够保证数据库备机不丢数据,但是其性能较低,影响用户体验。
发明内容
以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本发明实施例提供了一种数据同步的方法、装置和数据库主机,以提高主备数据库的同步性能。
本发明实施例提供了一种数据同步的方法,包括:
数据库主机接收事务提交请求;
数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,所述主机事务线程退出;
所述数据库主机接收到所述数据库备机发送的确认ACK响应,从线程池中选择线程执行事务提交操作。
本发明实施例还提供一种数据同步的装置,包括:
第一接收模块,用于接收事务提交请求;
日志模块,用于控制数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,控制所述主机事务线程退出;
第二接收模块,用于接收所述数据库备机发送的确认ACK响应;
事务提交模块,用于从线程池中选择线程执行事务提交操作。
本发明实施例还提供一种数据库主机,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述数据同步的方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述数据同步的方法。本发明实施例包括:数据库主机接收事务提交请求;数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,所述主机事务线程退出;所述数据库主机接收到所述数据库备机发送的确认ACK响应,从线程池中选择线程执行事务提交操作。在本发明实施例中,通过异步等待备机ACK响应机制,能够保证数据库主备机同步的数据一致性,提高数据库主备机同步的性能。
在阅读并理解了附图和详细描述后,可以明白其他方面。
附图说明
图1为分布式数据库的总体架构示意图;
图2为线程同步等待的流程图;
图3为本发明实施例的数据同步的方法的流程图;
图4为本发明实施例的数据同步的方法中步骤202的流程图;
图5为本发明实施例的数据同步的方法中步骤203的流程图;
图6为本发明实施例的数据同步的方法中步骤401的流程图;
图7为本发明实施例的数据同步的方法中步骤402的流程图;
图8为本发明一实施例的数据同步的方法的流程图;
图9为本发明应用实例一的数据同步的方法的流程图;
图10为本发明应用实例一的数据同步的方法的时序图;
图11为本发明应用实例二的数据同步的方法的流程图;
图12为本发明应用实例三的数据同步的方法的流程图;
图13为本发明应用实例四的数据同步的方法的流程图;
图14为本发明实施例的数据同步的装置的组成示意图;
图15为本发明实施例的数据库主机的组成示意图。
具体实施方式
下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
线程同步等待的同步技术是目前数据库主备数据节点同步的一个主流技术,其流程图如图2所示,包括:
步骤101,用户发起事务提交请求;
步骤102,数据库主机接收事务提交请求,开启一个线程进行处理;
步骤103,主机事务线程写入日志到磁盘文件;
步骤104,主机事务线程唤醒日志DUMP(转发)线程;
步骤105,日志DUMP线程开始发送日志到数据库备机;
步骤106,主机事务线程处于等待备机ACK(Acknowledgement,确认)响应状态;
步骤107,数据库备机接收相应的日志;
步骤108,数据库备机接收完相应的日志,向主机回ACK响应,表示已收到全部日志文件;
步骤109,主机ACK线程接收到备机ACK响应后,唤醒主机事务线程;
步骤110,主机事务线程被唤醒,继续完成最终的事务提交操作;
步骤111,向客户端返回事务提交成功信息。
这种线程同步等待的同步技术存在一个主要的问题:主机事务线程需要同步等待备机的ACK响应,不能充分利用线程资源,导致主备数据节点同步性能不高。
在本发明实施例中,将同步等待备机ACK响应修改为异步等待备机ACK响应,释放事务线程用于处理其余任务,提高整体性能。
本发明实施例的应用环境可参照图1。如图3所示,本发明实施例的数据同步的方法包括:
步骤201,数据库主机接收事务提交请求。
其中,由用户发起事务提交请求,数据库主机接收用户发送的事务提交请求。
在一实施例中,数据库主机从线程池中选择一个线程作为主机事务线程。
步骤202,数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,所述主机事务线程退出。
其中,所述主机事务线程退出,并归还线程池,无需同步等待备机的ACK响应,释放主机事务线程用于处理其余任务。
步骤203,所述数据库主机接收到所述数据库备机发送的确认ACK响应,从线程池中选择线程执行事务提交操作。
在本发明实施例中,通过异步等待备机ACK响应机制,能够保证数据库主备机同步的数据一致性,提高数据库主备机同步的性能。
如图4所示,在一实施例中,步骤202包括:
步骤301,数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件。
步骤302,主机事务线程指示日志转发线程发送所述日志到数据库备机。
其中,主机事务线程唤醒日志转发线程,由日志转发线程发送所述日志到数据库备机。
步骤303,主机事务线程将所述事务提交请求对应的事务信息保存到事务缓存列表中。
其中,所述事务缓存列表中的事务信息与日志位置相关联。
其中,所述事务信息可以包括:事务的连接信息,事务的执行语句信息,事务的日志位置信息,事务的组提交信息等。
在本发明实施例中,对于一个提交的事务,将事务信息与提交的事务的日志位置关联,保存在事务缓存列表中。该事务信息缓存列表的日志位置可以是顺序增大的,后来的事务信息放在列表尾,查找时从列表头开始查找。
步骤304,主机事务线程退出。
主机事务线程完成DUMP日志通知和事务信息缓存后,立即退出并归还线程池,采取线程异步等待备机ACK响应机制,释放主机事务线程用于处理其余任务。
如图5所示,在一实施例中,步骤203包括:
步骤401,所述数据库主机接收到所述数据库备机发送的ACK响应,将所述ACK响应对应的事务加入事务提交任务队列。
其中,可以是ACK监听线程或日志转发线程负责监听ACK响应。
步骤402,所述数据库主机从线程池中选择线程优先对所述事务执行事务提交操作。
本发明实施例中,通过优先对所述事务执行事务提交操作,保证了事务提交的时效性。
在一实施例中,如图6所示,步骤401包括:
步骤501,所述数据库主机中的ACK监听线程或日志转发线程监听ACK响应。
其中,针对不同类型的数据库,可采用不同类型的线程监听ACK响应,例如,可以是专门的ACK监听线程,也可以是日志转发线程。
步骤502,ACK监听线程或日志转发线程根据所述ACK响应中携带的日志位置,查找所述事务缓存列表中的事务信息。
其中,由于事务信息与提交的事务的日志位置关联,根据ACK响应的日志位置即可找到需要处理的缓存事务信息。
其中,所述事务缓存列表可以采用链表的形式。
步骤503,ACK监听线程或日志转发线程按照所述事务信息将所述ACK响应对应的事务加入事务提交任务队列。
其中,事务提交任务队列包括按顺序排列的待提交的事务。
在一实施例中,如图7所示,步骤402包括:
步骤601,所述数据库主机中的超级SUPER线程组检测到事务提交任务队列中有待处理任务,优先选择线程池中SUPER线程组中的SUPER线程对所述事务执行事务提交操作。
其中,当SUPER线程组监听到事务提交任务队列中存在任务后,分配SUPER线程处理最终的事务提交操作。
在本发明实施例中,提出采用SUPER线程组处理事务提交操作,SUPER线程组中的线程为高优先级的线程,保证事务提交的时效性。
步骤602,若所述SUPER线程组中没有空闲的SUPER线程,则分配所述线程池中普通线程优先对所述事务执行事务提交操作。
其中,普通线程为所述线程池中除所述SUPER线程组之外的其他线程。
其中,当SUPER线程组全都处于繁忙情况下,线程池中的线程也会优先处理事务提交队列中的最终事务提交操作,通过针对最终的事务提交操作进行二层优先级的调度,保证最终的事务提交操作优先完成。
本发明实施例采用异步等待备机ACK响应机制和事务提交优先机制,保证了数据库的主备数据节点同步复制的数据一致性,提高了数据库的主备数据节点同步性能。
如图8所示,本发明一实施例的数据同步的方法的流程图,包括:
步骤701,用户发起事务提交请求;
步骤702,数据库主机接收事务提交请求,从线程池中选择一个线程作为主机事务线程,开始执行事务提交操作;
步骤703,主机事务线程写入日志到磁盘文件;
步骤704,主机事务线程唤醒日志DUMP线程,日志DUMP线程开始执行步骤707;
步骤705,主机事务线程保存事务信息到事务缓存列表中;
步骤706,主机事务线程退出,归还线程池;
步骤707,日志DUMP线程发送日志到备机;
步骤708,备机接收相应的日志;
步骤709,备机接收完相应的日志,向主机回ACK响应,表示已收到全部日志文件;
步骤710,接收到备机ACK响应后,将ACK响应对应事务加入事务提交任务队列;
步骤711,主机SUPER线程组检测到有任务需要执行,判断是否有空闲线程,若有,则执行步骤713,若无,则执行步骤714;
步骤713,优先使用SUPER线程组中的SUPER线程完成最终的事务提交操作,执行步骤715;
步骤714,SUPER线程组中没有空闲的SUPER线程,使用线程池中的线程完成最终的事务提交操作;
步骤715,主机事务提交完成后,向客户端返回事务提交成功信息。
其中,需要说明的是,步骤705和步骤707均是在步骤704之后开始执行。
本发明实施例中,引入线程池中的SUPER线程组,定义事务处理优先级,优化事务提交处理机制;将同步等待备机ACK响应修改为异步等待备机ACK响应,释放事务线程用于处理其余任务,提高整体性能。采用数据库性能测试工具,例如benchmark-sql、sysbench等,针对本发明实施例的优化版本和未优化的版本进行对比测试,在最高性能处本发明实施例的优化版本相对于未优化的版本可提升10%左右。
下面以一些应用实例进行说明。在应用实例中,数据库主机简称为主机,数据库备机简称为备机,主机事务线程简称为事务线程。
应用实例一,基于MySQL数据库
基于MySQL数据库的主备数据节点同步复制中,采用了线程同步等待备机ACK响应的机制,存在需要提升主备数据节点同步性能的场景。
本发明应用实例一的数据同步方法的流程图如图9所示,包括:
步骤801,用户在MySQL客户端发起了一个事务提交请求;
步骤802,MySQL主机接收到事务提交的请求,从线程池中取出一个线程,处理接收到的事务提交请求;
步骤803,事务线程处理事务提交请求,flush&&sync BINLOG日志到磁盘,保证在任何场景下主机数据可恢复;
其中,flush表示对磁盘文件进行一次从缓存刷出到内存的操作,并未真正更新到磁盘文件中。Sync表示将磁盘文件的内存中同步到文件中,是真正的落盘操作。BINLOG日志是二进制格式的MySQL日志。
步骤804,事务线程唤醒独立的DUMP线程发送该事务的BINLOG日志,由DUMP线程根据事务的BINLOG位置发送相应的BINLOG事件到备机;
步骤805,事务线程保存事务信息到TranxNode链表中,TranxNode链表是由一组TranxNode节点组成,每个TranxNode节点包括了事务的事务信息,事务对应的BINLOG日志位置。TranxNode链表从头到尾是有序的,其BINLOG日志位置是逐渐增大的。因此最新的事务信息缓存在TranxNode链表的尾部;
步骤806,事务线程完成任务,归还线程池,继续处理其余任务。此处体现了异步等待备机ACK响应机制;
步骤807,DUMP线程被唤醒后,发送相应的BINLOG事件,发送完成后则继续处于waitting(等待)状态,继续等待后续的事务发送BINLOG事件请求;
步骤808,MySQL备机的IO(Input/Output,输入/输出)线程接收到主机发送的BINLOG事件,读取并写入RELAY_LOG文件;
步骤809,当备机的IO线程接收完所有的BINLOG事件后,给主机回ACK响应;
步骤810,主机存在一个专门接收备机ACK响应的ACK监听线程,当ACK监听线程接收到备机的ACK响应后,根据ACK响应中携带的BINLOG位置,从TranxNode链表中找出相应的事务信息,加入SUPER线程组的待提交事务处理队列;
步骤811,SUPER线程组始终存在一个用于监听的线程,循环监听待提交事务队列中是否存在需要处理的任务;
步骤812,当检测到待提交事务队列存在需要处理的任务,判断SUPER线程组中是否存在空闲的SUPER线程;若存在,执行步骤813,若不存在,执行步骤814;
步骤813,SUPER线程组中存在空闲的SUPER线程,分配SUPER线程处理最终的事务提交操作;
步骤814,SUPER线程组中不存在空闲的SUPER线程,分配线程池的普通线程优先执行;
步骤815,处理完最终的事务提交操作后,向用户回成功响应。
如图10所示,以时序图从时间推进的维度,展示了主备数据节点同步技术的实时过程。描述如下:
步骤901,用户在APP端发起了一个事务提交请求SQL;
步骤902,MySQL主机接收SQL请求,从线程池取出一个线程,开始事务提交过程;
步骤903,事务线程处理事务提交请求,flush&&sync BINLOG日志到磁盘,保证在任何场景下主机数据可恢复;
步骤904,事务线程唤醒独立的DUMP线程;
步骤905,事务线程保存事务信息,并退出线程,空闲线程则归还线程池;
步骤906,DUMP线程被唤醒后,发送相应的BINLOG事件,发送完成后则继续处于waitting状态,继续等待后续的事务发送BINLOG事件请求;
步骤907,MySQL备机的IO线程接收到主机发送的BINLOG事件,读取并写入RELAY_LOG文件,完成后给主机回ACK响应;
步骤908,主机存在一个专门接收备机ACK响应的ACK监听线程,当ACK监听线程接收到备机的ACK响应后,根据ACK响应中携带的BINLOG位置,从TranxNode链表中找出相应的事务信息,加入SUPER线程组的待提交事务处理队列;
步骤909,SUPER线程组完成最终的事务提交操作;
步骤910,向用户回成功响应。
应用实例二,基于MariaDB数据库
基于MariaDB数据库的主备数据节点同步复制中,采用了线程同步等待备机ACK响应的机制,存在需要提升主备数据节点同步性能的场景。
本发明应用实例二的数据同步方法的流程图如图11所示,包括:
步骤1001,用户在MariaDB客户端发起了一个事务提交请求;
步骤1002,MariaDB主机接收到事务提交的请求,从线程池中取出一个线程,处理接收到的事务提交请求;
步骤1003,事务线程处理事务提交请求,flush&&sync BINLOG日志到磁盘,保证在任何场景下主机数据可恢复;
步骤1004,事务线程唤醒独立的BINLOG DUMP线程发送该事务的BINLOG日志,BINLOG DUMP线程根据事务的BINLOG位置发送相应的BINLOG事件到备机;
步骤1005,事务线程保存事务信息到事务信息链表中,事务信息链表是由一组节点组成,每个节点包括了事务的事务信息,事务对应的BINLOG日志位置。事务信息链表从头到尾是有序的,其BINLOG日志位置是逐渐增大的。因此最新的事务信息缓存在事务信息链表的尾部;
步骤1006,事务线程完成任务,归还线程池,继续处理其余任务。此处体现了异步等待备机ACK响应机制;
步骤1007,DUMP线程被唤醒后,发送相应的BINLOG事件,发送完成后则等待备机回事务响应;
步骤1008,MariaDB备机的IO线程接收到主机发送的BINLOG事件,读取并写入RELAY_LOG文件;
步骤1009,当备机的IO线程接收完所有的BINLOG事件后,给主机回事务响应;
步骤1010,主机的BINLOG DUMP线程判断接收到备机的事务响应后,根据事务响应的BINLOG位置,将事务信息从事务信息列表中取出,加入SUPER线程组的待提交事务处理队列;
步骤1011,SUPER线程组始终存在一个用于监听的线程,循环监听待提交事务队列中是否存在需要处理的任务;
步骤1012,当检测到待提交事务队列存在需要处理的任务,判断SUPER线程组中是否存在空闲的SUPER线程;若存在,执行步骤1013,若不存在,执行步骤1014;
步骤1013,SUPER线程组中存在空闲的SUPER线程,分配SUPER线程处理最终的事务提交操作;
步骤1014,SUPER线程组中不存在空闲的SUPER线程,分配线程池的普通线程优先执行;
步骤1015,处理完最终的事务提交操作后,向用户回成功响应。
应用实例三,基于Percona数据库
基于Percona数据库的主备数据节点同步复制中,采用了线程同步等待备机ACK响应的机制,存在需要提升主备数据节点同步性能的场景。
本发明应用实例三的数据同步方法的流程图如图12所示,包括:
步骤1101,用户在Percona客户端发起了一个事务提交请求;
步骤1102,Percona主机接收到事务提交的请求,从线程池中取出一个线程,处理接收到的事务提交请求;
步骤1103,事务线程处理事务提交请求,flush&&sync二进制日志到磁盘,保证在任何场景下主机数据可恢复;
步骤1104,事务线程唤醒独立的DUMP线程发送该事务的二进制日志,由DUMP线程根据事务的二进制日志位置发送相应的二进制日志到备机;
步骤1105,事务线程保存事务信息到事务信息链表中,事务信息链表是由一组节点组成,每个节点包括了事务的事务信息,事务对应的二进制日志位置。事务信息链表从头到尾是有序的,其二进制日志位置是逐渐增大的。因此最新的事务信息缓存在事务信息链表的尾部;
步骤1106,事务线程完成任务,归还线程池,继续处理其余任务。此处主要体现了异步等待备机ACK响应机制原理;
步骤1107,DUMP线程被唤醒后,发送相应的二进制日志,发送完成后则继续处于waitting状态,继续等待后续的事务发送二进制日志请求;
步骤1108,Percona备机的IO线程接收到主机发送的二进制日志,读取并写入RELAY_LOG文件;
步骤1109,当备机的IO线程接收完所有的二进制日志后,给主机回事务ACK响应;
步骤1110,主机的ACK线程判断接收到备机的事务ACK响应后,根据事务ACK响应的二进制日志位置,将事务信息从事务信息列表中取出,加入SUPER线程组的待提交事务处理队列;
步骤1111,SUPER线程组始终存在一个用于监听的线程,循环监听待提交事务队列中是否存在需要处理的任务;
步骤1112,当检测到待提交事务队列存在需要处理的任务,判断SUPER线程组中是否存在空闲的SUPER线程;若存在,执行步骤1113,若不存在,执行步骤1114;
步骤1113,SUPER线程组中存在空闲的SUPER线程,分配SUPER线程处理最终的事务提交操作;
步骤1114,SUPER线程组中不存在空闲的SUPER线程,分配线程池的普通线程优先执行;
步骤1115,处理完最终的事务提交操作后,向用户回成功响应。
应用实例四,基于PostgreSQL数据库
基于PostgreSQL数据库的主备数据节点同步技术中,采用了线程同步等待备机ACK响应的机制,存在需要提升主备数据节点同步性能的场景。
本发明应用实例四的数据同步方法的流程图如图13所示,包括:
步骤1201,用户在PostgreSQL客户端发起了一个事务提交请求;
步骤1202,PostgreSQL数据库主机接收到用户事务提交请求,从线程池中取出一个线程处理事务提交请求;
步骤1203,事务线程将事务相关的WAL(Write Ahead Logging,预写日志)记录日志写到磁盘;
步骤1204,事务线程唤醒WAL_SENDER线程向备机发送WAL记录日志;
步骤1205,事务线程保存事务信息到事务缓存链表;
步骤1206,事务线程退出并归还线程池,实现线程异步等待备机ACK响应;
步骤1207,主机的WAL_SENDER线程发送WAL日志到备机;
步骤1208,备机的WAL_RECEIVER线程接收主机发送的WAL日志,并执行写盘等相关操作;
步骤1209,备机的WAL_RECEIVER线程会将最新已收到的WAL日志位置信息响应发送到主机的WAL_SENDER线程;
步骤1210,主机的WAL_SENDER线程接收到WAL日志位置信息响应后,根据位置信息判断事务可以进行最终的提交操作,如果可以则从事务缓存链表取出事务信息加入SUPER线程组的待提交事务处理队列;
步骤1211,SUPER线程组始终存在一个用于监听的线程,循环监听待提交事务队列中是否存在需要处理的任务;
步骤1212,当检测到待提交事务队列存在需要处理的任务,判断SUPER线程组中是否存在空闲的SUPER线程;若存在,则执行步骤1213,若不存在,执行步骤1214;
步骤1213,SUPER线程组中存在空闲的SUPER线程,分配SUPER线程处理最终的事务提交操作;
步骤1214,SUPER线程组中不存在空闲的SUPER线程,分配线程池的普通线程优先执行;
步骤1215,处理完最终的事务提交操作后,向用户回成功响应。
如图14所示,本发明实施例还提供一种数据同步的装置,包括:
第一接收模块131,用于接收事务提交请求;
日志模块132,用于控制数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,控制所述主机事务线程退出;
第二接收模块133,用于接收所述数据库备机发送的确认ACK响应;
事务提交模块134,用于从线程池中选择线程执行事务提交操作。
在本发明实施例中,通过异步等待备机ACK响应机制,能够保证数据库主备机同步的数据一致性,提高数据库主备机同步的性能。
在一实施例中,所述日志模块132,还用于控制所述主机事务线程将所述事务提交请求对应的事务信息保存到事务缓存列表中。
在一实施例中,所述事务缓存列表中的事务信息与日志位置相关联。
在一实施例中,事务提交模块134,用于将所述ACK响应对应的事务加入事务提交任务队列,从所述线程池中选择线程优先对所述事务执行事务提交操作。
在一实施例中,事务提交模块134,用于监听ACK响应,根据所述ACK响应中携带的日志位置,查找所述事务缓存列表中的事务信息,按照所述事务信息将所述ACK响应对应的事务加入事务提交任务队列。
在一实施例中,事务提交模块134,用于检测到事务提交任务队列中有待处理任务,优先选择所述线程池中SUPER线程组中的SUPER线程对所述事务执行事务提交操作。
在一实施例中,事务提交模块134,用于在所述SUPER线程组中没有空闲的SUPER线程时,分配所述线程池中普通线程优先对所述事务执行事务提交操作。
如图15所示,本发明实施例还提供一种数据库主机,包括存储器142、处理器141及存储在存储器142上并可在处理器141上运行的计算机程序,所述处理器执行所述程序时实现上述的数据同步的方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述数据同步的方法。
在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
Claims (6)
1.一种数据同步的方法,包括:
数据库主机接收事务提交请求;
数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,所述主机事务线程退出,归还线程池;
所述数据库主机接收到所述数据库备机发送的确认ACK响应,从线程池中选择线程执行事务提交操作;
其中,所述主机事务线程退出之前,还包括:所述主机事务线程将所述事务提交请求对应的事务信息保存到事务缓存列表中,所述事务缓存列表中的事务信息与日志位置相关联;
所述数据库主机接收到所述数据库备机发送的ACK响应,从线程池中选择线程执行事务提交操作,包括:
所述数据库主机中的ACK监听线程或日志转发线程监听ACK响应,根据所述ACK响应中携带的日志位置,查找所述事务缓存列表中的事务信息,按照所述事务信息将所述ACK响应对应的事务加入事务提交任务队列;
所述数据库主机从所述线程池中选择线程优先对所述事务执行事务提交操作。
2.如权利要求1所述的方法,其特征在于,所述数据库主机从所述线程池中选择线程优先对所述事务执行事务提交操作,包括:
所述数据库主机中的超级SUPER线程组检测到事务提交任务队列中有待处理任务,优先选择所述线程池中SUPER线程组中的SUPER线程对所述事务执行事务提交操作。
3.如权利要求2所述的方法,其特征在于,所述数据库主机从所述线程池中选择线程优先对所述事务执行事务提交操作,包括:
若所述SUPER线程组中没有空闲的SUPER线程,则分配所述线程池中普通线程优先对所述事务执行事务提交操作。
4.一种数据同步的装置,其特征在于,包括:
第一接收模块(131),用于接收事务提交请求;
日志模块(132),用于控制数据库主机中的主机事务线程按照所述事务提交请求将日志写入磁盘文件,指示日志转发线程发送所述日志到数据库备机,控制所述主机事务线程退出,归还线程池;
第二接收模块(133),用于接收所述数据库备机发送的确认ACK响应;
事务提交模块(134),用于从线程池中选择线程执行事务提交操作;
其中,所述日志模块(132)还用于所述主机事务线程退出之前,控制所述主机事务线程将所述事务提交请求对应的事务信息保存到事务缓存列表中,所述事务缓存列表中的事务信息与日志位置相关联;
所述事务提交模块(134)还用于监听ACK响应,根据所述ACK响应中携带的日志位置,查找所述事务缓存列表中的事务信息,按照所述事务信息将所述ACK响应对应的事务加入事务提交任务队列;
所述事务提交模块(134)还用于从所述线程池中选择线程优先对所述事务执行事务提交操作。
5.一种数据库主机,包括存储器(142)、处理器(141)及存储在存储器(142)上并可在处理器(141)上运行的计算机程序,其特征在于,所述处理器(141)执行所述程序时实现如权利要求1~3中任意一项所述数据同步的方法。
6.一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1~3中任意一项所述数据同步的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810873311.7A CN110807062B (zh) | 2018-08-02 | 2018-08-02 | 一种数据同步的方法、装置和数据库主机 |
PCT/CN2019/099048 WO2020025049A1 (zh) | 2018-08-02 | 2019-08-02 | 数据同步的方法、装置、数据库主机及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810873311.7A CN110807062B (zh) | 2018-08-02 | 2018-08-02 | 一种数据同步的方法、装置和数据库主机 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110807062A CN110807062A (zh) | 2020-02-18 |
CN110807062B true CN110807062B (zh) | 2021-06-22 |
Family
ID=69231509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810873311.7A Active CN110807062B (zh) | 2018-08-02 | 2018-08-02 | 一种数据同步的方法、装置和数据库主机 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110807062B (zh) |
WO (1) | WO2020025049A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414344B (zh) * | 2020-03-25 | 2023-03-14 | 电子科技大学 | 一种应用于遥爆系统的数据保存方法 |
CN113868014A (zh) * | 2020-06-30 | 2021-12-31 | 华为技术有限公司 | 一种数据同步方法及装置 |
CN112597251B (zh) * | 2020-12-29 | 2023-01-24 | 天津南大通用数据技术股份有限公司 | 数据库集群日志同步方法、装置、服务器及存储介质 |
CN112948136A (zh) * | 2021-02-02 | 2021-06-11 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 一种嵌入式操作系统异步日志记录的实现方法 |
CN113326318A (zh) * | 2021-05-28 | 2021-08-31 | 广州市炬元互联网科技有限公司 | 一种双系统间数据同步的方法与系统 |
CN113377582B (zh) * | 2021-08-16 | 2021-11-05 | 北京易鲸捷信息技术有限公司 | 基于日志推送的分布式数据库容灾方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102081611A (zh) * | 2009-11-26 | 2011-06-01 | 中兴通讯股份有限公司 | 一种主、备网管系统数据库同步的实现方法及装置 |
CN103064761A (zh) * | 2012-12-24 | 2013-04-24 | 华为技术有限公司 | 一种数据同步方法、设备和系统 |
CN103605498A (zh) * | 2013-12-05 | 2014-02-26 | 用友软件股份有限公司 | 单线程任务的多线程执行方法及系统 |
CN104899274A (zh) * | 2015-05-27 | 2015-09-09 | 北方信息控制集团有限公司 | 一种内存数据库高效远程访问方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8019720B2 (en) * | 2006-10-02 | 2011-09-13 | Salesforce.Com, Inc. | Asynchronous method and system for performing an operation on metadata |
JP2008134767A (ja) * | 2006-11-28 | 2008-06-12 | Hitachi Software Eng Co Ltd | コネクション割当管理方法 |
CN202058147U (zh) * | 2011-05-23 | 2011-11-30 | 北京六所和瑞科技发展有限公司 | 分布式实时数据库管理系统 |
US9619343B2 (en) * | 2015-02-19 | 2017-04-11 | International Business Machines Corporation | Accelerated recovery after a data disaster |
CN105468727A (zh) * | 2015-11-20 | 2016-04-06 | 国家电网公司 | 基于zookeeper实现MySQL强一致性复制方法 |
-
2018
- 2018-08-02 CN CN201810873311.7A patent/CN110807062B/zh active Active
-
2019
- 2019-08-02 WO PCT/CN2019/099048 patent/WO2020025049A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102081611A (zh) * | 2009-11-26 | 2011-06-01 | 中兴通讯股份有限公司 | 一种主、备网管系统数据库同步的实现方法及装置 |
CN103064761A (zh) * | 2012-12-24 | 2013-04-24 | 华为技术有限公司 | 一种数据同步方法、设备和系统 |
CN103605498A (zh) * | 2013-12-05 | 2014-02-26 | 用友软件股份有限公司 | 单线程任务的多线程执行方法及系统 |
CN104899274A (zh) * | 2015-05-27 | 2015-09-09 | 北方信息控制集团有限公司 | 一种内存数据库高效远程访问方法 |
Non-Patent Citations (1)
Title |
---|
"【MySQL】5.7新特性之七";杨奇龙;《ITPUB博客 blog.itpub.net/22664653/viewspace-2133818》;20170219;1-5 * |
Also Published As
Publication number | Publication date |
---|---|
WO2020025049A1 (zh) | 2020-02-06 |
CN110807062A (zh) | 2020-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110807062B (zh) | 一种数据同步的方法、装置和数据库主机 | |
US11010262B2 (en) | Database system recovery using preliminary and final slave node replay positions | |
EP2738695B1 (en) | Slave side transaction ID buffering for efficient distributed transaction management | |
US10831741B2 (en) | Log-shipping data replication with early log record fetching | |
US7979401B2 (en) | Time based file system for continuous data protection | |
EP3722973B1 (en) | Data processing method and device for distributed database, storage medium, and electronic device | |
CN110597910A (zh) | 一种异地数据同步方法、装置和系统 | |
CN115599747B (zh) | 一种分布式存储系统的元数据同步方法、系统及设备 | |
US11748215B2 (en) | Log management method, server, and database system | |
WO2019020081A1 (zh) | 分布式系统及其故障恢复方法、装置、产品和存储介质 | |
CN115292407A (zh) | 同步方法、设备及存储介质 | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
CN113282564B (zh) | 数据存储方法、系统、节点和存储介质 | |
CN109783578B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN113987078B (zh) | 数据同步方法、设备及计算机可读存储介质 | |
CN116400855A (zh) | 一种数据处理方法和数据存储系统 | |
US10579604B2 (en) | Database system, information processing device, method and medium | |
CN113438275B (zh) | 数据迁移方法、装置、存储介质及数据迁移设备 | |
CN112334891B (zh) | 用于搜索服务器的集中式存储 | |
US10572503B2 (en) | Database system, information processing device, method and medium | |
CN115658245A (zh) | 一种基于分布式数据库系统的事务提交系统、方法及装置 | |
CN113778975A (zh) | 基于分布式数据库的数据处理方法及装置 | |
CN114661690A (zh) | 多版本并发控制和日志清除方法、节点、设备和介质 | |
CN108376104B (zh) | 节点调度方法及装置、计算机可读存储介质 | |
CN117171266B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220113 Address after: 100176 floor 18, building 8, courtyard 10, KEGU 1st Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing (Yizhuang group, high-end industrial area of Beijing Pilot Free Trade Zone) Patentee after: Jinzhuan Xinke Co.,Ltd. Address before: 518057 Ministry of justice, Zhongxing building, South Science and technology road, Nanshan District hi tech Industrial Park, Shenzhen, Guangdong Patentee before: ZTE Corp. |