CN108460047A - 数据同步方法及设备 - Google Patents
数据同步方法及设备 Download PDFInfo
- Publication number
- CN108460047A CN108460047A CN201710093376.5A CN201710093376A CN108460047A CN 108460047 A CN108460047 A CN 108460047A CN 201710093376 A CN201710093376 A CN 201710093376A CN 108460047 A CN108460047 A CN 108460047A
- Authority
- CN
- China
- Prior art keywords
- transaction information
- library
- request
- response process
- standby
- 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.)
- Granted
Links
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
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的目的是提供一种数据同步方法及设备,通过将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态,在确保多副本可靠性的前提下,可以有效的减少睡眠或避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率,减少冗长的等待。另外,所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,所以事务数据在落盘前即存储至主库的磁盘前,事务数据就可以发送给备库,缩短了等待时间,减少了整体的响应延迟。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据同步方法及设备。
背景技术
如图1所示,现有的数据库,要实现多副本的同步,需要依次分如下几个步骤:
1.用户发送结束事务的请求,包括回滚(rollback)或提交(commit),根据所述结束事务的请求生成对应的请求响应进程;
2.所述请求响应进程(Backend process)产生事务数据(redo/WAL),记录事务数据在备库的存储位置即WAL位置(LSN),并将事务数据写入主库对应的进程共享缓存(walbuffer);
3.请求响应进程等待wal buffer调用write接口,将事务数据写入主库对应的操作系统共享缓存(os buffer);
4.请求响应进程等待事务数据由所述主库对应的操作系统共享缓存(os buffer)写入主库对应的磁盘,即实现落盘;
5.主库落盘后,请求响应进程发起一发送进程(Wal sender)后,请求响应进程进入睡眠状态,等待发送进程完成将事务数据同步至备库后将请求响应进程从所述睡眠状态中唤醒,AL的LSN将所述事务数据同步入,同时,所述发送进程会将已经在主库中落盘的事务数据发送给备库。
6.sync_commit=remote_write备库在收到WAL后,又要写入备库对应的进程共享缓存(wal buffer),等待备库对应的wal buffer调用write接口,将事务数据写入备库对应的操作系统共享缓存(os buffer);/7.sync_commit=on或者还要等待事务数据由所述备库对应的操作系统共享缓存(os buffer)写入备库对应的磁盘,即实现落盘(fsync)的过程。
7.(如果步骤只进行到前面的第6步)/8.(如果步骤进行到前面的第7步)最后备库再把写WAL的位置信息反馈给主库的发送进程(Wal sender)。
8.(如果步骤只进行到前面的第7步)/(如果步骤进行到前面的第8.步)主库的发送进程(Wal sender)在收到备库反馈的WAL位置信息后,唤醒比收到备库反馈的WAL位置信息更小对应的睡眠中的请求响应进程(backend process(es)
上述现有的多副本的同步方案有如下缺陷:
1.由于每个请求响应进程都要进入睡眠状态,会带来额外的上下文切换,同时唤醒也会带来比较大的锁的开销,影响并发性。
2.请求响应进程的唤醒等待的流程很冗长,因为需要本地主库的事务数据落盘后,才将事务数据发送给备库,然后又要等备库将事务数据落盘后再返还唤醒睡眠的请求响应进程。
发明内容
本发明的一个目的是提供一种数据同步方法及设备,解决现有的每个请求响应进程都要进入睡眠状态,会带来额外的上下文切换,同时唤醒也会带来比较大的锁的开销,影响并发性的问题。
根据本发明的一个方面,提供了一种数据同步方法,该方法包括:
获取客户端发起的事务结束请求;
请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
进一步的,上述方法中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。
进一步的,上述方法中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。
进一步的,上述方法中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,
判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。
进一步的,上述方法中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。
进一步的,上述方法中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,包括:
所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求。
进一步的,上述方法中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,包括:
所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述主库对应的进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求。
进一步的,上述方法中,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,包括:
向备库发起将所述事务数据同步至备库的同步请求;
根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。
根据本发明的另一方面,还提供了一种数据同步设备,该设备包括:
获取装置,用于获取客户端发起的事务结束请求;
同步装置,用于供请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
睡眠切换装置,用于将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
进一步的,上述设备中,所述睡眠切换装置,用于若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。
进一步的,上述设备中,所述睡眠切换装置,用于若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。
进一步的,上述设备中,睡眠切换装置,用于若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,
判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。
进一步的,上述设备中,睡眠切换装置,用于若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。
进一步的,上述设备中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求。
进一步的,上述设备中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求。
进一步的,上述设备中,所述同步装置,用于向备库发起将所述事务数据同步至备库的同步请求;及根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。
根据本发明的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取客户端发起的事务结束请求;
请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
与现有技术相比,本发明通过将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态,在确保多副本可靠性的前提下,可以有效的减少睡眠或避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率,减少冗长的等待。另外,所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,所以事务数据在落盘前即存储至主库的磁盘前,事务数据就可以发送给备库,缩短了等待时间,减少了整体的响应延迟。此外,将所述事务数据同步至备库对应的进程共享缓存后,即可向请求响应进程反馈当前备库已经同步到的位置,无需等待事务数据在备库落盘,从而进一步减少请求响应进程等待同步结束的时间。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出现有的数据同步方法的原理图;
图2示出本发明一种数据同步方法一实施例的原理图。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本发明提供一种数据同步方法,该方法包括:
步骤S1,获取客户端发起的事务结束请求,根据所述事务结束请求发起请求响应进程;在此,当某项事务结束时,客户端会发起事务结束请求,以将所述事务结束请求对应的事务数据存储入主库和备库;
步骤S2,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;在此,所述事务数据的存储位置即该事务数据将在备库中的对应存储位置,该存储位置可以由所述请求响应进程确定,主库可以通过网络向备库同步事务数据;
步骤S3,将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。具体的,由于进入睡眠状态,会带来额外的上下文切换,同时唤醒也会带来比较大的锁的开销,影响并发性,而且,并不是所有的请求响应进程都需要进入睡眠状态,如果主库向备库同步事务数据足够快,就没有必要让请求响应进程入睡眠状态。所以本实施例通过将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态,在确保多副本可靠性的前提下,可以有效的减少睡眠或避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率,减少冗长的等待。
本发明的数据同步方法一实施例中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。在此,若所述备库当前同步到的位置大于等于所述事务数据的存储位置,说明该请求响应进程对应的事务数据已经由主库同步到备库中,即同步已经完成,则不需要将请求响应进程转入睡眠状态来等待同步完成,本实施例可以有效的避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率。
本发明的数据同步方法一实施例中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。在此,若所述备库当前同步到的位置小于所述事务数据的存储位置,则说明所述请求响应进程对应的事务数据还没有由主库同步至备库,即同步还没有完成,此时需要请求响应进程等待同步完成,但等待的过程中也不是一定需要将所述请求响应进程转入睡眠状态,具体取决于需要等待的时间,所以本实施例中根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间,根据所述实际等待时间和预设等待时间的比较,可以精确判断出所述请求响应进程是否转入睡眠状态,从而可以有效的减少睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率。
本发明的数据同步方法一实施例中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,
判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。具体的,接上一实施例若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,在这种情况下,还需要进一步判断当前是否等待超时,如果超时,则需要将请求响应进程转入睡眠状态,后续等待事务数据同步完成后被唤醒后,所述请求响应进程再向所述客户端反馈事务结束成功;若未超时,通过判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,来确定主库向备库同步事务数据是否完成,如果完成,则所述请求响应进程无需转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功即可,本实施例可初步确定不需要将请求响应进程转入睡眠状态的情况下,可以根据后续实际的数据同步情况进一步精确确定是否需要将请求响应进程转入睡眠状态。
本发明的数据同步方法一实施例中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。具体的,接上两个实施例,若所述实际等待时间大于所述预设等待时间,则所述请求响应进程需要转入睡眠状态,后续等待事务数据同步完成后被唤醒后,所述请求响应进程再向所述客户端反馈事务结束成功。
本发明的数据同步方法一实施例中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,包括:
所述请求响应进程将事务数据写入主库对应的操作系统共享缓存(os buffer)后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置。在此,由于事务数据在多个主机存在即可满足多副本的要求,所以事务数据在落盘前即存储至主库的磁盘前,事务数据就可以发送给备库,是不违反多副本的根本需求的,同时缩短了等待时间,减少了整体的响应延迟,因此,本实施例所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,从而减少请求响应进程等待同步完成的时间。
本发明的数据同步方法一实施例中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,包括:
所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述主库对应的进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置。在此,作为上一实施例的替换方式,如果事务数据在主库上落盘的速度足够快,也可以待所述事务数据由所述进程共享缓存存储(wal buffer)入操作系统共享缓存(os buffer)后,然后由所述操作系统共享缓存(os buffer)写入备库对应的硬盘后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,从而保证事务数据的存储和同步更可靠。
本发明的数据同步方法一实施例中,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,包括:
向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。在此,将所述事务数据同步至备库对应的进程共享缓存后,即可认为同步结束,可向请求响应进程反馈当前备库已经同步到的位置,无需等待事务数据在备库落盘,从而进一步减少请求响应进程等待同步结束的时间。
如图2的所示,本发明一具体的应用实施例中,可新增如下几个参数,用于精细的控制:
1.当local_sync_commit=off表示本地wal write后即事务数据写入主库的操作系统共享缓存(os buffer)后,即可进入将事务数据同步至备库的下一流程;当local_sync_commit=fsync表示本地wal fsync后即事务数据写入进程共享缓存后,并由所述进程共享缓存将所述事务数据写入,即可进入将事务数据同步至备库的下一流程;
2.预设一个网络延迟参数,表示主库到备库发送8K包的网络延迟,用于判定循环需要实际等待的时长;
3.设置一个超时时间,表示等待备库反馈当前同步到的位置(LSN)的过程中的总的超时时间,表示等待多长时间后,进入深睡眠,等待发送进程(Wal sender)的唤醒。
如图2所示,具体流程如下:
1.客户端发起事务结束请求(commit);
2.生成事务数据如重作日志(REDO),将重作日志写入主库对应的进程共享缓存(WAL BUFFER);
3.Write wal file,如果用户设置本地异步(local_sync_commit=off),那么write后进入第5步check LSN;
4.Fsync wal file,如果用户设置本地同步模式(local_sync_commit=fsync),那么fsync后再进入第5步check LSN;
5.check LSN,计算当前事务数据的存储位置(WAL LSN)与当前备库已经同步的位置(WAL LSN),相减后的差值。如果所述差值<=0,则直接返回客户端事务结束成功(endreturn)。如果所述差值大于0,那么计算这个(差值/8K)乘以(所述网络延迟参数)得到评估出来的需要实际等待的时间,如果这个时间大于预设的超时时间,则所述请求响应进程(backend process)进入深度睡眠,等待发送进程(WAL SENDER)唤醒所述请求响应进程(wakeup backend)。如果这个时间小于预设的超时时间,那么所述请求响应进程进入循环的等待,直到备库反馈的当时同步到的位置LSN大于等于当前事务数据的同步位置(WALLSN),然后返回客户端事务结束成功为止,或者直到超时,后进入睡眠。
如图2所示,当local_sync_commit=off,日志发送(wal sender)进程,不需要等待WAL BUFFER落盘(fsync file),如果重作日志数据在WAL BUFFER中未清除(when existsin WAL BUFFER),由WAL BUFFER将已经写入WAL BUFFER中的重作日志数据发送给备库;如果重作日志数据在WAL BUFFER中已经清除了(when not exists in WAL BUFFER),则到WALfile(通常会有一层OS buffer,用户不需要关心,是操作系统自动控制的buffer)中查找并发送给备库,现实使用中,通常不需要查文件,可以设置较大的WAL BUFFER区域。由于事务数据在多个主机存在即可满足多副本的要求,所以重做日志在落盘主库前就可以发送给备库,是不违反多副本的根本需求的,同时缩短了等待时间,减少了整体的响应延迟。
事务数据发送到备库后,备库立即反馈给(feedback)主数据库当前已经同步到的位置,即备库已经接收到的WAL位置(LSN)。
从实际的测试来看,写一个8K的事务数据块到主库对应的操作系统共享缓存(osbuffer)通常需要3us,同由主库对应的操作系统共享缓存(os buffer)将事务数据存储到主库对应的磁盘如一块比较好的SSD盘,需要17us.而网络传输的情况是这样的,1G网卡的网络传输8K的块需要70us,随着网络带宽的增加成倍降低传输时间,10G网卡的网络传输8K的块需要7us,25GGRDMA网卡的网络传输8K的块需要3us。从设备的机械特性来看,磁盘或者SSD都有电气擦写的请求。而网络设备则只有数据传输的需求,还可以通过优化协议达到更低的延迟。所以长远来看网络并不会成为瓶颈。实际的使用中10GB网络是通常的场景,在网络传输足够快的情况下,大部分是不需要请求响应进程进入睡眠状态的,所以本方案可以大大减少用户进程睡眠的时间,也不需要唤醒,从而达到提升高并发写吞吐率的目的。
本发明还提供一种数据同步设备,该设备包括:
获取装置,用于获取客户端发起的事务结束请求;在此,当某项事务结束时,客户端会发起事务结束请求,以将所述事务结束请求对应的事务数据存储入主库和备库;
同步装置,用于供请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;在此,所述事务数据的存储位置即该事务数据将在备库中的对应存储位置,该存储位置可以由所述请求响应进程确定,主库可以通过网络向备库同步事务数据;
睡眠切换装置,用于将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。具体的,由于进入睡眠状态,会带来额外的上下文切换,同时唤醒也会带来比较大的锁的开销,影响并发性,而且,并不是所有的请求响应进程都需要进入睡眠状态,如果主库向备库同步事务数据足够快,就没有必要让请求响应进程入睡眠状态。所以本实施例通过将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态,在确保多副本可靠性的前提下,可以有效的减少睡眠或避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率,减少冗长的等待。
本发明的数据同步设备一实施例中,所述睡眠切换装置,用于若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。在此,若所述备库当前同步到的位置大于等于所述事务数据的存储位置,说明该请求响应进程对应的事务数据已经由主库同步到备库中,即同步已经完成,则不需要将请求响应进程转入睡眠状态来等待同步完成,本实施例可以有效的避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率。
本发明的数据同步设备一实施例中,所述睡眠切换装置,用于若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。在此,若所述备库当前同步到的位置小于所述事务数据的存储位置,则说明所述请求响应进程对应的事务数据还没有由主库同步至备库,即同步还没有完成,此时需要请求响应进程等待同步完成,但等待的过程中也不是一定需要将所述请求响应进程转入睡眠状态,具体取决于需要等待的时间,所以本实施例中根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间,根据所述实际等待时间和预设等待时间的比较,可以精确判断出所述请求响应进程是否转入睡眠状态,从而可以有效的减少睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率。
本发明的数据同步设备一实施例中,睡眠切换装置,用于若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,
判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。具体的,接上一实施例若所述实际等待时间小于等于所述预设等待时间,则所述请求响应进程不转入睡眠状态,在这种情况下,还需要进一步判断当前是否等待超时,如果超时,则需要将请求响应进程转入睡眠状态,后续等待事务数据同步完成后被唤醒后,所述请求响应进程再向所述客户端反馈事务结束成功;若未超时,通过判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,来确定主库向备库同步事务数据是否完成,如果完成,则所述请求响应进程无需转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功即可,本实施例可初步确定不需要将请求响应进程转入睡眠状态的情况下,可以根据后续实际的数据同步情况进一步精确确定是否需要将请求响应进程转入睡眠状态。
本发明的数据同步设备一实施例中,用于若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。具体的,接上两个实施例,若所述实际等待时间大于所述预设等待时间,则所述请求响应进程需要转入睡眠状态,后续等待事务数据同步完成后被唤醒后,所述请求响应进程再向所述客户端反馈事务结束成功。
本发明的数据同步设备一实施例中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置。在此,由于事务数据在多个主机存在即可满足多副本的要求,所以事务数据在落盘前即存储至主库的磁盘前,事务数据就可以发送给备库,是不违反多副本的根本需求的,同时缩短了等待时间,减少了整体的响应延迟,因此,本实施例所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,从而减少请求响应进程等待同步完成的时间。
本发明的数据同步设备一实施例中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述主库对应的进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置。在此,作为上一实施例的替换方式,如果事务数据在主库上落盘的速度足够快,也可以待所述事务数据由所述进程共享缓存存储(wal buffer)入操作系统共享缓存(os buffer)后,然后由所述操作系统共享缓存(os buffer)写入备库对应的硬盘后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,从而保证事务数据的存储和同步更可靠。
本发明的数据同步设备一实施例中,所述同步装置,用于向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;及根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。在此,将所述事务数据同步至备库对应的进程共享缓存后,即可认为同步结束,可向请求响应进程反馈当前备库已经同步到的位置,无需等待事务数据在备库落盘,从而进一步减少请求响应进程等待同步结束的时间。
根据本发明的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取客户端发起的事务结束请求;
请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
综上所述,本发明通过将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态,在确保多副本可靠性的前提下,可以有效的减少睡眠或避免睡眠,提升在高并发写入的应用场景中,数据有多副本要求时的总体吞吐率,减少冗长的等待。另外,所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置,所以事务数据在落盘前即存储至主库的磁盘前,事务数据就可以发送给备库,缩短了等待时间,减少了整体的响应延迟。此外,将所述事务数据同步至备库对应的进程共享缓存后,即可向请求响应进程反馈当前备库已经同步到的位置,无需等待事务数据在备库落盘,从而进一步减少请求响应进程等待同步结束的时间。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (17)
1.一种数据同步方法,其中,该方法包括:
获取客户端发起的事务结束请求;
请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
2.根据权利要求1所述的方法,其中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。
3.根据权利要求1所述的方法,其中,根据比较结果判断是否将所述请求响应进程转入睡眠状态,包括:
若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。
4.根据权利要求3所述的方法,其中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间小于等于所述预设等待时间,则判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。
5.根据权利要求3所述的方法,其中,根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态,包括:
若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。
6.根据权利要求1至5任一项所述的方法,其中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,包括:
所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求。
7.根据权利要求1至5任一项所述的方法,其中,请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,包括:
所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述主库对应的进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求。
8.根据权利要求1至5任一项所述的方法,其中,向备库发起将所述事务数据同步至备库的同步请求,包括:
向备库发起将所述事务数据同步至备库的同步请求;
根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。
9.一种数据同步设备,其中,该设备包括:
获取装置,用于获取客户端发起的事务结束请求;
同步装置,用于供请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
睡眠切换装置,用于将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
10.根据权利要求9所述的设备,其中,所述睡眠切换装置,用于若所述备库当前同步到的位置大于等于所述事务数据的存储位置,
则所述请求响应进程不转入睡眠状态,所述请求响应进程向所述客户端反馈事务结束成功。
11.根据权利要求9所述的设备,其中,所述睡眠切换装置,用于若所述备库当前同步到的位置小于所述事务数据的存储位置,
根据所述备库当前同步到的位置与所述事务数据的存储位置的差值计算实际等待时间;
根据所述实际等待时间和预设等待时间的比较,判断所述请求响应进程是否转入睡眠状态。
12.根据权利要求11所述的设备,其中,睡眠切换装置,用于若所述实际等待时间小于等于所述预设等待时间,则判断是否等待超时,
若未超时,判断所述备库当前同步到的位置是否大于等于所述事务数据的存储位置,若是,所述请求响应进程向所述客户端反馈事务结束成功,若否,重新转入判断是否等待超时;
若超时,则所述请求响应进程转入睡眠状态。
13.根据权利要求11所述的设备,其中,睡眠切换装置,用于若所述实际等待时间大于所述预设等待时间,则所述请求响应进程转入睡眠状态。
14.根据权利要求9至13任一项所述的设备,其中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的操作系统共享缓存后,向备库发起将所述事务数据同步至备库的同步请求。
15.根据权利要求9至13任一项所述的设备,其中,所述同步装置,用于供所述请求响应进程将事务数据写入主库对应的进程共享缓存,并由所述主库对应的进程共享缓存将所述事务数据写入主库对应的磁盘后,向备库发起将所述事务数据同步至备库的同步请求。
16.根据权利要求9至13任一项所述的设备,其中,所述同步装置,用于向备库发起将所述事务数据同步至备库的同步请求;及根据备库基于所述同步请求反馈的备库对应的进程共享缓存内已经接收的事务数据,确定所述备库当前同步到的位置并反馈至所述请求响应进程。
17.一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取客户端发起的事务结束请求;
请求响应进程根据所述事务结束请求将对应的事务数据写入主库后,向备库发起将所述事务数据同步至备库的同步请求,所述同步请求包括事务数据的存储位置;
将所述事务数据的存储位置与所述备库基于所述同步请求的当前同步到的位置进行比较,根据比较结果判断所述请求响应进程是否转入睡眠状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710093376.5A CN108460047B (zh) | 2017-02-21 | 2017-02-21 | 数据同步方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710093376.5A CN108460047B (zh) | 2017-02-21 | 2017-02-21 | 数据同步方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108460047A true CN108460047A (zh) | 2018-08-28 |
CN108460047B CN108460047B (zh) | 2021-11-16 |
Family
ID=63221974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710093376.5A Active CN108460047B (zh) | 2017-02-21 | 2017-02-21 | 数据同步方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108460047B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113608845A (zh) * | 2021-07-12 | 2021-11-05 | 阿里巴巴新加坡控股有限公司 | 数据处理方法及装置 |
CN114327289A (zh) * | 2021-12-31 | 2022-04-12 | 展讯通信(天津)有限公司 | 数据同步方法、装置和电子设备 |
CN116244041A (zh) * | 2022-12-02 | 2023-06-09 | 湖南亚信安慧科技有限公司 | 一种数据库子事务的性能优化方法 |
EP4170519A4 (en) * | 2020-06-30 | 2023-12-27 | Huawei Technologies Co., Ltd. | DATA SYNCHRONIZATION METHOD AND APPARATUS |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090199029A1 (en) * | 2008-02-01 | 2009-08-06 | Arimilli Ravi K | Wake-and-Go Mechanism with Data Monitoring |
US20110173631A1 (en) * | 2008-02-01 | 2011-07-14 | Arimilli Ravi K | Wake-and-Go Mechanism for a Data Processing System |
CN102541661A (zh) * | 2010-12-02 | 2012-07-04 | 微软公司 | 等待地址同步接口 |
CN102609466A (zh) * | 2012-01-13 | 2012-07-25 | 广州从兴电子开发有限公司 | 一种共享内存的控制方法及系统 |
CN103678718A (zh) * | 2013-12-31 | 2014-03-26 | 金蝶软件(中国)有限公司 | 数据库同步方法及系统 |
US20140173320A1 (en) * | 2012-12-18 | 2014-06-19 | Apple Inc. | Maintaining synchronization during vertical blanking |
CN105468659A (zh) * | 2014-09-28 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 一种数据同步方法及装置 |
CN105528366A (zh) * | 2014-09-30 | 2016-04-27 | 阿里巴巴集团控股有限公司 | 一种数据同步控制方法和装置 |
CN105573825A (zh) * | 2014-10-11 | 2016-05-11 | 华为技术有限公司 | 一种跨操作系统的任务间同步的方法及装置 |
CN105760216A (zh) * | 2016-02-29 | 2016-07-13 | 惠州市德赛西威汽车电子股份有限公司 | 一种多进程同步控制方法 |
-
2017
- 2017-02-21 CN CN201710093376.5A patent/CN108460047B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090199029A1 (en) * | 2008-02-01 | 2009-08-06 | Arimilli Ravi K | Wake-and-Go Mechanism with Data Monitoring |
US20110173631A1 (en) * | 2008-02-01 | 2011-07-14 | Arimilli Ravi K | Wake-and-Go Mechanism for a Data Processing System |
CN102541661A (zh) * | 2010-12-02 | 2012-07-04 | 微软公司 | 等待地址同步接口 |
CN102609466A (zh) * | 2012-01-13 | 2012-07-25 | 广州从兴电子开发有限公司 | 一种共享内存的控制方法及系统 |
US20140173320A1 (en) * | 2012-12-18 | 2014-06-19 | Apple Inc. | Maintaining synchronization during vertical blanking |
CN103678718A (zh) * | 2013-12-31 | 2014-03-26 | 金蝶软件(中国)有限公司 | 数据库同步方法及系统 |
CN105468659A (zh) * | 2014-09-28 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 一种数据同步方法及装置 |
CN105528366A (zh) * | 2014-09-30 | 2016-04-27 | 阿里巴巴集团控股有限公司 | 一种数据同步控制方法和装置 |
CN105573825A (zh) * | 2014-10-11 | 2016-05-11 | 华为技术有限公司 | 一种跨操作系统的任务间同步的方法及装置 |
CN105760216A (zh) * | 2016-02-29 | 2016-07-13 | 惠州市德赛西威汽车电子股份有限公司 | 一种多进程同步控制方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4170519A4 (en) * | 2020-06-30 | 2023-12-27 | Huawei Technologies Co., Ltd. | DATA SYNCHRONIZATION METHOD AND APPARATUS |
CN113608845A (zh) * | 2021-07-12 | 2021-11-05 | 阿里巴巴新加坡控股有限公司 | 数据处理方法及装置 |
CN114327289A (zh) * | 2021-12-31 | 2022-04-12 | 展讯通信(天津)有限公司 | 数据同步方法、装置和电子设备 |
CN114327289B (zh) * | 2021-12-31 | 2023-08-11 | 展讯通信(天津)有限公司 | 数据同步方法、装置和电子设备 |
CN116244041A (zh) * | 2022-12-02 | 2023-06-09 | 湖南亚信安慧科技有限公司 | 一种数据库子事务的性能优化方法 |
CN116244041B (zh) * | 2022-12-02 | 2023-10-27 | 湖南亚信安慧科技有限公司 | 一种数据库子事务的性能优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108460047B (zh) | 2021-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102265277B (zh) | 数据存储系统的操作方法和装置 | |
CN108460047A (zh) | 数据同步方法及设备 | |
CN105808736B (zh) | 一种榜单数据更新方法、装置及系统 | |
JP7549137B2 (ja) | トランザクション処理方法、システム、装置、機器、及びプログラム | |
CN107656937B (zh) | 用于实现读写数据一致性的方法和装置 | |
CN108319617A (zh) | 确定数据库主从差异的方法、装置及切换控制方法、装置 | |
US20090307375A1 (en) | Synchronization improvements | |
CN109821235B (zh) | 游戏录像方法、装置及服务器 | |
CN109933609A (zh) | 一种批量生成id的方法及终端 | |
CN110099084A (zh) | 一种保证存储服务可用性的方法、系统及计算机可读介质 | |
WO2024032632A1 (zh) | 一种事务的处理方法、设备及存储介质 | |
CN115617908A (zh) | 一种MySQL数据同步方法、装置、数据库终端、介质及系统 | |
CN111666266A (zh) | 一种数据迁移方法及相关设备 | |
CN105610917A (zh) | 实现系统中同步数据修复的方法及系统 | |
CN112084264B (zh) | 一种日志数据同步方法、装置及服务器 | |
WO2021189283A1 (zh) | 数据处理方法、装置、电子装置及存储介质 | |
CN112052104A (zh) | 基于多机房实现的消息队列的管理方法及电子设备 | |
CN101610225A (zh) | 一种同步处理方法、系统和装置 | |
CN115934742A (zh) | 一种故障处理方法、装置、设备及存储介质 | |
US20180309702A1 (en) | Method and device for processing data after restart of node | |
CN115238006A (zh) | 检索数据同步方法、装置、设备及计算机存储介质 | |
CN113253924B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN115640280A (zh) | 数据迁移方法及装置 | |
CN111813334A (zh) | 一种Ceph的写性能优化和双控节点组合方法 | |
CN113760934B (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 |