CN112307119A - 数据同步方法、装置、设备及存储介质 - Google Patents

数据同步方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112307119A
CN112307119A CN202011164017.2A CN202011164017A CN112307119A CN 112307119 A CN112307119 A CN 112307119A CN 202011164017 A CN202011164017 A CN 202011164017A CN 112307119 A CN112307119 A CN 112307119A
Authority
CN
China
Prior art keywords
request
data
cache
database
synchronization
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.)
Withdrawn
Application number
CN202011164017.2A
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.)
Guangzhou Wangxing Information Technology Co Ltd
Original Assignee
Guangzhou Wangxing 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 Guangzhou Wangxing Information Technology Co Ltd filed Critical Guangzhou Wangxing Information Technology Co Ltd
Priority to CN202011164017.2A priority Critical patent/CN112307119A/zh
Publication of CN112307119A publication Critical patent/CN112307119A/zh
Withdrawn 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1734Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
    • 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/23Updating
    • G06F16/2365Ensuring data consistency and integrity

Landscapes

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

Abstract

本发明实施例公开了数据同步方法、装置、设备及存储介质。其中,一种数据同步方法应用于跨机房***中机房内主机,包括:接收针对第一数据条目的更新请求,分配至缓存队列中,缓存队列中的项目供第一线程进行消费,在当前项目为更新请求时,将待更新数据更新至缓存和数据库,在当前项目为同步请求时,将待同步数据更新至缓存,对数据库中的日志文件进行解析,在得到第一数据条目的同步请求时,分配至缓存队列中,其中,同步请求由跨机房***中其他数据库发送,在接收到同步请求后,根据同步请求对本地的第一数据条目进行更新,并将同步请求写入日志文件。本发明实施例提供的技术方案,保证低延时同步的前提下,保证缓存和数据库的一致性。

Description

数据同步方法、装置、设备及存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及数据同步方法、装置、设备及存储介质。
背景技术
随着***访问量的持续增加,数据库磁盘输入输出(Input-Output,IO)最终会成为***性能的瓶颈之一,常见的提高***的并发读取每秒查询率(Queries-per-second,QPS)的方法是引入缓存层,缓存层可以挡下大量的数据库访问,取而代之的是高速的内存访问。
然而,由于缓存和数据库的更新不能保证原子性,增加缓存层必定会引入双方数据不一致的问题,在开发过程中,需要从实际使用场景出发,权衡数据读写QPS和数据一致性并进行取舍。随着网络服务的日益普及,经常需要将一些常用的数据(如业务数据等)同时存储在多个机房的服务器上,因此,上述问题在全球部署的分布式场景中同样存在,如何保证单点写入的数据可快速可靠的更新到各个机房的数据库和缓存,并且***保证良好的读写QPS是业界长期探讨的话题。
目前,基于多机房的数据同步方案一般优先在数据库层保证多机房的数据一致,本机房缓存设置过期时间,相当于定时从数据库刷新数据到缓存,此方法需要依赖缓存的过期,实时性较差,若通过缩短缓存过期时间缩减延时又会导致缓存命中率降低,数据库磁盘IO增加,大量缓存同时过期也会引发缓存雪崩。因此,现有的基于多机房的数据同步方案仍不够完善,需要改进。
发明内容
本发明实施例提供了数据同步方法、装置、设备及存储介质,可以优化现有的基于多机房的数据同步方案。
第一方面,本发明实施例提供了一种数据同步方法,应用于跨机房***中第一机房内的第一主机,所述方法包括:
接收客户端发送的针对第一数据条目的第一更新请求;
将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存;
对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
第二方面,本发明实施例提供了一种数据同步方法,该方法包括:
接收第一客户端发送的针对第一数据条目的读取请求;
若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中;
在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
第三方面,本发明实施例提供了一种数据同步装置,配置于跨机房***中第一机房内的第一主机,所述装置包括:
更新请求接收模块,用于接收客户端发送的针对第一数据条目的第一更新请求;
更新请求分配模块,用于将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存;
同步请求分配模块,用于对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
第四方面,本发明实施例提供了一种数据同步装置,该装置包括:
读取请求接收模块,用于接收第一客户端发送的针对第一数据条目的读取请求;
读取请求分配模块,用于若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中;
更新请求分配模块,用于在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
第五方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例提供的数据同步方法。
第六方面,本发明实施例提供了一种跨机房***,其特征在于,所述跨机房***包括多个机房,所述多个机房中的至少两个机房内的主机执行如本发明实施例第一方面提供的数据同步方法。
第七方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的数据同步方法。
本发明实施例中提供的数据同步方案,应用于跨机房***中第一机房内的第一主机,接收客户端发送的针对第一数据条目的第一更新请求,将第一更新请求分配至第一缓存队列中,其中,第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存,对第一数据库中的日志文件进行解析,在得到第一数据条目的第一同步请求时,将第一同步请求分配至第一缓存队列中,其中,第一同步请求由跨机房***中的第二机房内的第二数据库发送,第一数据库在接收到第一同步请求后,根据第一同步请求对本地的第一数据条目进行更新,并将第一同步请求写入所述日志文件。通过采用上述技术方案,针对同一个数据条目来说,将针对该数据条目的更新请求和同步请求分配至同一个缓存队列中,由对应的线程进行消费并将所要同步或更新的数据及时地更新到数据库和缓存中,且通过对数据库日志进行解析的方式得到同步请求,能够保证单个机房数据库和缓存同步所依据的更新来源相同,在保证低延时同步的前提下,还能够有效保证***中机房中缓存和数据库的一致性。
附图说明
图1为本发明实施例提供的一种数据同步方法所适用的应用场景的场景架构图;
图2为本发明实施例提供的一种数据同步方法的流程示意图;
图3为现有技术中一种读写并发操作过程示意图;
图4为本发明实施例提供的又一种数据同步方法的流程示意图;
图5为本发明实施例提供的一种读写并发操作过程示意图;
图6为本发明实施例提供的另一种数据同步方法的流程示意图;
图7为本发明实施例提供的一种数据同步装置的结构框图;
图8为本发明实施例提供的另一种数据同步装置的结构框图;
图9为本发明实施例提供的一种计算机设备的结构框图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
图1为本发明实施例提供的一种数据同步方法所适用的应用场景的场景架构图。具体的,参考图1,该应用场景中可以包括跨机房***和客户端120,其中,跨机房***中包含多个机房,可以根据实际情况进行部署,如全国或全球部署等,图1中仅示出三个机房作为示意性说明,机房的具体数量不做限定。以一个机房为例,第一机房110中包含第一主机111、第一缓存112和第一数据库113。主机可用于提供跨机房***的核心业务处理服务,也可称为主server或server主点等。数据库(DateBase,DB)可用于提供持久化存储服务,也可称为数据库层。缓存可用于提供短暂性高速数据存储服务,也可称为本地缓存或本地缓存层等。理想状态下,所有机房中的缓存和数据库中的数据能够同时进行更新且保证实时一致性,然而这种理想状态基本无法达到,且在开发过程中,还需要从实际使用场景出发,权衡数据读写QPS和数据一致性并进行取舍。现有技术中,一般优先在数据库层保证多机房的数据一致,本机房缓存设置过期时间,相当于定时从数据库刷新数据到缓存,此方法需要依赖缓存的过期,实时性较差,若通过缩短缓存过期时间缩减延时又会导致缓存命中率降低,数据库磁盘IO增加,大量缓存同时过期也会引发缓存雪崩。若在发生更新操作时,在更新数据库的同时通知本机缓存和其他机房缓存进行刷新,也即相当于DB层和缓存层各自实现同步机制,则由于数据同步操作与用户访问操作存在并行情况,且DB层同步与缓存数据同步先后完成顺序不可知,有可能出现从DB读出的旧数据覆盖缓存同步的新数据的情况,此时缓存数据的落后需要等待下一次缓存过期才可能恢复,更新的可靠性得不到保证。
图2为本发明实施例提供的一种数据同步方法的流程示意图,该方法可以由数据同步装置执行,其中该装置可由软件和/或硬件实现,一般可集成在计算机设备中,该计算机设备可以是跨机房***中第一机房内的第一主机,第一机房可以是该跨机房***中任意一个机房,第一机房可以有一个或多个主机,第一主机可以是第一机房中任意一个主机,需要说明的是,若当前主机发生异常,可能存在从机接替当前主机成为新的主机,此时该从机可以成为第一主机。如图2所示,该方法包括:
步骤201、接收客户端发送的针对第一数据条目的第一更新请求。
本发明实施例中,对数据库和缓存的实现形式均不做限定,对所存储的数据的具体类型也不做限定,可以将每个数据项称为一个数据条目。当客户端需要针对第一数据条目进行更新时,可以向第一主机发送对应的第一更新请求,第一更新请求中例如可以包括第一数据条目的身份标识以及第一数据条目对应的待更新数据(如由客户端确定的第一数据条目的新的数值)。
步骤202、将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存。
示例性的,在第一主机中可以存在多个缓存队列,每个缓存队列对应一个线程,该线程对对应的缓存队列中的项目进行消费。当接收到第一更新请求后,将该第一更新请求分配至第一缓存队列中,成为第一缓存队列中的一个项目,第一缓存队列可以是任意一个缓存队列。可选的,若某个缓存队列中已经存在第一数据条目对应的更新请求或同步请求,则可将第一更新请求分配至该缓存队列中,具体可以是分配至该缓存队列的队尾(也即在上一个被分配至该缓存队列中的项目之后被消费)。也就是说,若第一缓存队列中已经存在第一数据条目对应的更新请求或同步请求,则可将第一更新请求分配至第一缓存队列。其中,同步请求由其他机房的数据库发送至第一机房的数据库,具体含义将在下文中进行详细介绍。
本发明实施例中,第一机房通过第一线程对第一缓存队列中的项目进行消费。在当前项目为更新请求时,由第一线程将当前项目对应的待更新数据更新至第一主机的第一缓存和第一数据库,这样可以及时对缓存和数据库进行更新,并保证两者数据一致性;在当前项目为同步请求时,第一数据库的同步操作已完成,由第一线程将当前项目对应的待同步数据更新至第一主机的第一缓存,这样可以及时将数据库的更新同步至缓存,保证缓存数据是最新的,不会被旧数据覆盖。
步骤203、对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
示例性的,当第二机房的第二数据库内的第一数据条目被更新后,第二数据库会向跨机房***中的其他机房发送同步请求,则第一机房会收到该同步请求,这里记为第一同步请求。第一同步请求可以包括第一数据条目的身份标识以及第一数据条目对应的待同步数据(如第二数据库中第一数据条目更新后的的新的数值)。第一数据库在接收到第一同步请求后,根据第一同步请求对本地的第一数据条目进行更新,并将第一同步请求写入日志文件中。日志文件可以是任意格式的日志文件,可以与数据库的类型相关,具体不做限定。示例性的,日志文件可以是binlog文件,binlog文件是一种二进制格式的文件,可以用于记录数据库更新的结构化查询语言(Structured Query Language,SQL)语句信息。
第一主机可以是实时持续地消费本机房数据库生成的日志文件,对日志文件进行解析,便可得到其中包含的同步请求。若解析得到第一数据条目的第一同步请求,则将第一同步请求分配至第一缓存队列中,供第一线程进行消费。
需要说明的是,各更新请求被分配至缓存队列的过程、各同步请求被分配至缓存队列的过程以及线程对缓存队列中的项目进行消费的过程可以是并行的,因此,第一更新请求和第一同步请求被分配至第一缓存队列的先后顺序不确定,那么第一线程对第一更新请求和第一同步请求进行消费的时序也不确定,假设第一更新请求先于第一同步请求被分配至第一缓存队列,在将第一同步请求被分配至第一缓存队列之前,第一更新请求也可能已经被第一线程消费成功。本发明实施例中并未对第一线程消费第一缓存队列中的项目的具体时序进行限定。
本发明实施例中提供的数据同步方案,应用于跨机房***中第一机房内的第一主机,接收客户端发送的针对第一数据条目的第一更新请求,将第一更新请求分配至第一缓存队列中,其中,第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存,对第一数据库中的日志文件进行解析,在得到第一数据条目的第一同步请求时,将第一同步请求分配至第一缓存队列中,其中,第一同步请求由跨机房***中的第二机房内的第二数据库发送,第一数据库在接收到第一同步请求后,根据第一同步请求对本地的第一数据条目进行更新,并将第一同步请求写入所述日志文件。通过采用上述技术方案,针对同一个数据条目来说,将针对该数据条目的更新请求和同步请求分配至同一个缓存队列中,由对应的线程进行消费并将所要同步或更新的数据及时地更新到数据库和缓存中,且通过对数据库日志进行解析的方式得到同步请求,能够保证单个机房数据库和缓存同步所依据的更新来源相同,在保证低延时同步的前提下,还能够有效保证***中机房中缓存和数据库的一致性。
在一些实施例中,在所述将所述第一更新请求分配至第一缓存队列中之后,还包括:在所述第一线程将所述第一更新请求对应的数据更新至所述第一数据库后,通过所述第一数据库向所述跨机房***中的第三机房内的第三数据库发送与本次更新操作对应的第二同步请求。这样设置的好处在于,可以及时地通知***内其他机房中的数据库针对第一更新请求进行数据更新,保证数据更新的时效性以及***全局数据一致性。
在一些实施例中,所述在将所述第一更新请求分配至第一缓存队列中之前,还包括:根据所述第一数据条目对应的第一身份标识确定对应的第一缓存队列。这样设置的好处在于,在进行更新请求的分配之前,基于对应的数据条目的身份标识来确定待分配至的缓存队列,由于身份标识的唯一性,可以保证针对相同数据条目的更新请求被分配至相同的缓存队列中,避免时间靠前的更新请求相比于时间靠后的更新请求更晚地被消费,也即防止因分配至不同缓存队列所容易造成的旧数据覆盖新数据的情况发生。其中,身份标识例如可以是数据条目的主键(primaryKey)。
在一些实施例中,所述根据所述第一数据条目对应的第一身份标识确定对应的第一缓存队列,包括:基于预设哈希算法确定所述第一数据条目对应的第一身份标识的第一哈希值;根据所述第一哈希值确定对应的第一缓存队列。这样设置的好处在于,可以避免遍历各缓存队列并判断其中是否已存在第一数据条目,进而快速准确地确定第一缓存队列。哈希(Hash),一般也可翻译为散列或杂凑等,是把任意长度的输入(又叫做预映射pre-image)通过哈希算法变换成固定长度的输出,该输出就是哈希值,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。这种转换是一种压缩映射,也就是,哈希值的空间通常远小于输入的空间,不同的输入可能会哈希成相同的输出,虽然不能根据哈希值来确定唯一的输入值,但经过哈希运算后,能够保证相同的输入得到相同的输出,也即对于同样的身份标识,经过哈希算法计算后,所得到的哈希值是不变的,可以建立哈希值与缓存队列名称或编号的对应关系,进而达到根据第一数据条目对应的第一身份标识确定对应的第一缓存队列的目的。
在一些实施例中,所述第一机房内还存在所述第一主机对应的第一从机,所述第一主机和所述第一从机之间进行主从备份;在通过进程对缓存队列中的第三同步请求消费成功后,向所述第一机房反馈所述第三同步请求在所述日志文件中的偏移量,供所述第一从机根据所述偏移量继续解析所述日志文件。这样设置的好处在于,可以保证第一主机出现异常或宕机等情况时,不会造成日志文件的漏消费,更加可靠地保证数据同步的时效性以及全局数据的一致性。其中,偏移量的具体存储位置不做限定,例如可以存储在第一从机中或机房中的其他设备中等。
在上述各可选实施例基础上,为了保证全局数据一致性,单个机房也需要保证本地缓存与数据库的一致性,所采取的单机房的数据更新或同步策略可以根据实际需求设置,本发明实施例不做具体限定。
对于单机房的缓存更新,通常是写操作先更新数据库,更新成功后使缓存失效,读操作先读缓存,缓存中读到了则直接返回,缓存中读不到再读数据库,之后再将数据库数据加载到缓存中。但是此方法在读写并发情况存在问题,图3为现有技术中一种读写并发操作过程示意图。如图3所示,对于同一个数据条目来说,在查询操作(也即读操作)未命中缓存时,接着读取数据库旧数据之后、写缓存之前,此时,另一个用户发起了更新操作(也即写操作),更新了数据库并清除相应的缓存数据,接着查询操作将读取到的数据库中的旧数据更新到缓存。这就导致缓存中数据变成脏数据,并且会一直脏下去,直到缓存过期或发起新的更新操作。上述问题出现需要满足以下条件:1、读操作读缓存失效;2、存在并发的写操作;3、写操作比读操作更快;4、读操作早于写操作进入数据库,晚于写操作更新缓存。虽然出现此种情况的概率较低,但是并不能保证数据更新的100%可靠。因此,本发明实施例针对上述情况以及出现上述情况所导致的问题对第一机房进行进一步改进。
图4为本发明实施例提供的又一种数据同步方法的流程示意图,在上述各可选实施例基础上,在一些实施例中,还可包括:接收客户端发送的针对第二数据条目的第一读取请求;若所述第一缓存中不包含所述第二数据条目,则将所述第一读取请求分配至第二缓存队列中,其中,所述第二缓存队列中的项目供对应的第二线程进行消费,在当前项目为读取请求时,由所述第二线程从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中;在检测到针对所述第二数据条目的第一写请求时,将所述第一写请求分配至所述第二缓存队列中的所述第一读取请求的后面,其中,所述第一写请求包括更新请求和/或同步请求,所述第二线程在从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中之后,对所述第一写请求进行消费。
进一步的,在所述接收客户端发送的针对第二数据条目的第一读取请求之后,还可包括:若所述第一缓存中包含所述第二数据条目,则将所述第一缓存中存储的所述第二数据条目对应的数据返回至所述客户端。
具体的,该方法可包括:
步骤401、接收客户端发送的针对第一数据条目的第一更新请求。
步骤402、基于预设哈希算法确定第一数据条目对应的第一身份标识的第一哈希值,根据第一哈希值确定对应的第一缓存队列。
步骤403、将第一更新请求分配至第一缓存队列中。
步骤404、对第一数据库中的日志文件进行解析,在得到第一数据条目的第一同步请求时,基于预设哈希算法确定第一数据条目对应的第一身份标识的第一哈希值,根据第一哈希值确定对应的第一缓存队列,将第一同步请求分配至第一缓存队列中。
其中,第一同步请求由跨机房***中的第二机房内的第二数据库发送,第一数据库在接收到第一同步请求后,根据第一同步请求对本地的第一数据条目进行更新,并将第一同步请求写入日志文件。第一主机在对日志文件进行解析后,得到第一数据条目的第一同步请求,这时,同样基于预设哈希算法计算第一数据条目的哈希值,这个哈希值对应第一缓存队列,因此,也就将针对第一数据条目的第一同步请求分配至针对第一数据条目的第一更新请求所在的第一缓存队列中。
步骤405、通过第一线程对第一缓存队列中的项目进行消费,在当前项目为更新请求时,将对应的待更新数据更新至第一主机的第一缓存和第一数据库,在当前项目为同步请求时,将对应的待同步数据更新至第一缓存。
步骤406、接收客户端发送的针对第二数据条目的第一读取请求。
步骤407、判断第一缓存中是否包含第二数据条目,若是,则执行步骤408;否则,执行步骤410。
步骤408、将第一读取请求分配至第二缓存队列中。
其中,所述第二缓存队列中的项目供对应的第二线程进行消费,在当前项目为读取请求时,由所述第二线程从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中。
示例性的,本步骤之前,也可基于预设哈希算法确定所述第二数据条目对应的第二身份标识的第二哈希值,根据第二哈希值确定对应的第二缓存队列。
步骤409、在检测到针对第二数据条目的第一写请求时,将第一写请求分配至第二缓存队列中的第一读取请求的后面。
其中,所述第一写请求可以包括更新请求和同步请求,所述第二线程在从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中之后,对所述写请求进行消费。
示例性的,本步骤中,也可基于预设哈希算法确定所述第二数据条目对应的第二身份标识的第二哈希值,根据第二哈希值确定对应的第二缓存队列,从而保证将第一写请求分配至第一读请求所在的缓存队列中。
示例性的,图5为本发明实施例提供的一种读写并发操作过程示意图,如图5所示,查询操作的读数据库和写缓存结束后,才会执行更新操作的写数据库和写缓存,保证缓存中的数据是最新的数据,而不会出现图3所示的缓存数据成为脏数据的情况。
步骤410、将第一缓存中存储的第二数据条目对应的数据返回至客户端。
示例性的,当第一读取请求命中缓存时,读操作并不需要压入队列中,使得***可保持较高的读访问性能的情况下保证缓存更新可靠。
本发明实施例提供的数据同步方法,在保证跨机房***中各机房之间的缓存和数据库一致性基础上,针对读请求未命中缓存的情况进行进一步优化,通过将针对同一数据条目的读请求和写请求分配至同一个队列进行串行化处理的方式,可以解决读写并发所容易产生的缓存数据成为脏数据的问题。
图6为本发明实施例提供的另一种数据同步方法的流程示意图,该方法可以适用于单机房缓存更新同步的场景,该方法可以由数据同步装置执行,其中该装置可由软件和/或硬件实现,一般可集成在计算机设备中,如图6所示,该方法包括:
步骤601、接收第一客户端发送的针对第一数据条目的读取请求。
步骤602、若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中。
步骤603、在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
本发明实施例中提供的数据同步方案,接收第一客户端发送的针对第一数据条目的读取请求,若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中,在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求之后,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。通过采用上述技术方案,对于单机房来说,针对同一个数据条目发生读写并发情况时,通过将读请求和写请求分配至同一个队列进行串行化处理的方式,可以解决读写并发所容易产生的缓存数据成为脏数据的问题。
在一些实施例中,所述对所述更新请求进行消费,包括:将所述更新请求对应的数据更新至所述数据库;删除所述缓存中的所述第一数据条目,或者,将所述更新请求对应的数据更新至所述缓存。其中,可以保留现有的针对更新请求的消费方式,在写数据库操作之后,使对应的缓存中的旧数据失效,也即删除对应的旧数据,可等待下次查询操作时候再将新的数据写入缓存中。也可在写数据库操作之后,便将新的数据写入缓存,保证缓存数据更新的时效性。
在一些实施例中,在所述接收第一客户端发送的针对第一数据条目的读取请求之后,还包括:若所述缓存中包含所述第一数据条目,则将所述缓存中存储的所述第一数据条目对应的数据返回至所述第一客户端。当第一读取请求命中缓存时,读操作并不需要压入队列中,使得***可保持较高的读访问性能的情况下保证缓存更新可靠。
图7为本发明实施例提供的一种数据同步装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在计算机设备中,可通过执行数据同步方法来进行数据同步。该计算机设备可以是跨机房***中第一机房内的第一主机,第一机房可以是该跨机房***中任意一个机房,第一机房可以有一个或多个主机,第一主机可以是第一机房中任意一个主机,需要说明的是,若当前主机发生异常,可能存在从机接替当前主机成为新的主机,此时该从机可以成为第一主机。如图7所示,该装置包括:
更新请求接收模块701,用于接收客户端发送的针对第一数据条目的第一更新请求;
更新请求分配模块702,用于将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存;
同步请求分配模块703,用于对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
本发明实施例中提供的数据同步装置,应用于跨机房***中第一机房内的第一主机,接收客户端发送的针对第一数据条目的第一更新请求,将第一更新请求分配至第一缓存队列中,其中,第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由第一线程将当前项目对应的数据更新至第一主机的第一缓存,对第一数据库中的日志文件进行解析,在得到第一数据条目的第一同步请求时,将第一同步请求分配至第一缓存队列中,其中,第一同步请求由跨机房***中的第二机房内的第二数据库发送,第一数据库在接收到第一同步请求后,根据第一同步请求对本地的第一数据条目进行更新,并将第一同步请求写入所述日志文件。通过采用上述技术方案,针对同一个数据条目来说,将针对该数据条目的更新请求和同步请求分配至同一个缓存队列中,由对应的线程进行消费并将所要同步或更新的数据及时地更新到数据库和缓存中,且通过对数据库日志进行解析的方式得到同步请求,能够保证单个机房数据库和缓存同步所依据的更新来源相同,在保证低延时同步的前提下,还能够有效保证***中机房中缓存和数据库的一致性。
图8为本发明实施例提供的另一种数据同步装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在计算机设备中,可通过执行数据同步方法来进行数据同步。如图8所示,该装置包括:
读取请求接收模块801,用于接收第一客户端发送的针对第一数据条目的读取请求;
读取请求分配模块802,用于若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中;
更新请求分配模块803,用于在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
本发明实施例中提供的数据同步装置,接收第一客户端发送的针对第一数据条目的读取请求,若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中,在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求之后,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。通过采用上述技术方案,对于单机房来说,针对同一个数据条目发生读写并发情况时,通过将读请求和写请求分配至同一个队列进行串行化处理的方式,可以解决读写并发所容易产生的缓存数据成为脏数据的问题。
本发明实施例提供了一种计算机设备,该计算机设备中可集成本发明实施例提供的数据同步装置。图9为本发明实施例提供的一种计算机设备的结构框图。计算机设备900包括存储器901、处理器902及存储在存储器901上并可在处理器902上运行的计算机程序,所述处理器902执行所述计算机程序时实现本发明实施例提供的数据同步方法。
本发明实施例提供了一种跨机房***,所述跨机房***包括多个机房,所述多个机房中的至少两个机房内的主机执行本发明实施例提供的数据同步方法。
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本发明实施例提供的数据同步方法。
上述实施例中提供的数据同步装置、设备、***以及存储介质可执行本发明任意实施例所提供的数据同步方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的数据同步方法。
注意,上述仅为本发明的较佳实施例。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由权利要求范围决定。

Claims (15)

1.一种数据同步方法,其特征在于,应用于跨机房***中第一机房内的第一主机,所述方法包括:
接收客户端发送的针对第一数据条目的第一更新请求;
将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存;
对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
2.根据权利要求1所述的方法,其特征在于,在所述将所述第一更新请求分配至第一缓存队列中之后,还包括:
在所述第一线程将所述第一更新请求对应的数据更新至所述第一数据库后,通过所述第一数据库向所述跨机房***中的第三机房内的第三数据库发送与本次更新操作对应的第二同步请求。
3.根据权利要求1所述的方法,其特征在于,所述在将所述第一更新请求分配至第一缓存队列中之前,还包括:
根据所述第一数据条目对应的第一身份标识确定对应的第一缓存队列。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一数据条目对应的第一身份标识确定对应的第一缓存队列,包括:
基于预设哈希算法确定所述第一数据条目对应的第一身份标识的第一哈希值;
根据所述第一哈希值确定对应的第一缓存队列。
5.根据权利要求1所述的方法,其特征在于,所述第一机房内还存在所述第一主机对应的第一从机,所述第一主机和所述第一从机之间进行主从备份;
在通过进程对缓存队列中的第三同步请求消费成功后,向所述第一机房反馈所述第三同步请求在所述日志文件中的偏移量,供所述第一从机根据所述偏移量继续解析所述日志文件。
6.根据权利要求1-5任一所述的方法,其特征在于,还包括:
接收客户端发送的针对第二数据条目的第一读取请求;
若所述第一缓存中不包含所述第二数据条目,则将所述第一读取请求分配至第二缓存队列中,其中,所述第二缓存队列中的项目供对应的第二线程进行消费,在当前项目为读取请求时,由所述第二线程从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中;
在检测到针对所述第二数据条目的第一写请求时,将所述第一写请求分配至所述第二缓存队列中的所述第一读取请求的后面,其中,所述第一写请求包括更新请求和/或同步请求,所述第二线程在从所述第一数据库中读取所述第二数据条目对应的数据并将所读取到的数据写入所述第一缓存中之后,对所述第一写请求进行消费。
7.根据权利要求6所述的方法,其特征在于,在所述接收客户端发送的针对第二数据条目的第一读取请求之后,还包括:
若所述第一缓存中包含所述第二数据条目,则将所述第一缓存中存储的所述第二数据条目对应的数据返回至所述客户端。
8.一种数据同步方法,其特征在于,包括:
接收第一客户端发送的针对第一数据条目的读取请求;
若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中;
在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
9.根据权利要求8所述的方法,其特征在于,所述对所述更新请求进行消费,包括:
将所述更新请求对应的数据更新至所述数据库;
删除所述缓存中的所述第一数据条目,或者,将所述更新请求对应的数据更新至所述缓存。
10.根据权利要求8或9所述的方法,其特征在于,在所述接收第一客户端发送的针对第一数据条目的读取请求之后,还包括:
若所述缓存中包含所述第一数据条目,则将所述缓存中存储的所述第一数据条目对应的数据返回至所述第一客户端。
11.一种数据同步装置,其特征在于,配置于跨机房***中第一机房内的第一主机,所述装置包括:
更新请求接收模块,用于接收客户端发送的针对第一数据条目的第一更新请求;
更新请求分配模块,用于将所述第一更新请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为更新请求时,由所述第一线程将当前项目对应的待更新数据更新至所述第一主机的第一缓存和第一数据库,在当前项目为同步请求时,由所述第一线程将当前项目对应的待同步数据更新至所述第一缓存;
同步请求分配模块,用于对所述第一数据库中的日志文件进行解析,在得到所述第一数据条目的第一同步请求时,将所述第一同步请求分配至所述第一缓存队列中,其中,所述第一同步请求由所述跨机房***中的第二机房内的第二数据库发送,所述第一数据库在接收到所述第一同步请求后,根据所述第一同步请求对本地的第一数据条目进行更新,并将所述第一同步请求写入所述日志文件。
12.一种数据同步装置,其特征在于,包括:
读取请求接收模块,用于接收第一客户端发送的针对第一数据条目的读取请求;
读取请求分配模块,用于若缓存中不包含所述第一数据条目,则将所述读取请求分配至第一缓存队列中,其中,所述第一缓存队列中的项目供对应的第一线程进行消费,在当前项目为读取请求时,由所述第一线程从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中;
更新请求分配模块,用于在接收到第二客户端发送的针对所述第一数据条目的更新请求时,将所述更新请求分配至所述第一缓存队列中的所述读取请求的后面,其中,所述第一线程在从对应的数据库中读取所述第一数据条目对应的数据并将所读取到的数据写入所述缓存中之后,对所述更新请求进行消费。
13.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-10任一项所述的方法。
14.一种跨机房***,其特征在于,所述跨机房***包括多个机房,所述多个机房中的至少两个机房内的主机执行如权利要求1-7中任一所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任一所述的方法。
CN202011164017.2A 2020-10-27 2020-10-27 数据同步方法、装置、设备及存储介质 Withdrawn CN112307119A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011164017.2A CN112307119A (zh) 2020-10-27 2020-10-27 数据同步方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011164017.2A CN112307119A (zh) 2020-10-27 2020-10-27 数据同步方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN112307119A true CN112307119A (zh) 2021-02-02

Family

ID=74330385

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011164017.2A Withdrawn CN112307119A (zh) 2020-10-27 2020-10-27 数据同步方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112307119A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094378A (zh) * 2021-03-19 2021-07-09 北京达佳互联信息技术有限公司 数据处理方法、装置、电子设备和存储介质
CN113407639A (zh) * 2021-07-16 2021-09-17 广州市百果园信息技术有限公司 数据处理方法、装置、***及存储介质
CN113672604A (zh) * 2021-08-16 2021-11-19 浙江大华技术股份有限公司 一种用户数据同步方法、装置、***及电子设备
CN113672624A (zh) * 2021-08-25 2021-11-19 中汽创智科技有限公司 一种数据处理方法、***及存储介质
CN113986981A (zh) * 2021-11-11 2022-01-28 湖南快乐阳光互动娱乐传媒有限公司 一种数据同步方法及装置
CN114880404A (zh) * 2022-07-13 2022-08-09 南瑞轨道交通技术有限公司 一种轨道交通分布式数据库的组模型准延迟同步方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094378A (zh) * 2021-03-19 2021-07-09 北京达佳互联信息技术有限公司 数据处理方法、装置、电子设备和存储介质
CN113094378B (zh) * 2021-03-19 2024-02-06 北京达佳互联信息技术有限公司 数据处理方法、装置、电子设备和存储介质
CN113407639A (zh) * 2021-07-16 2021-09-17 广州市百果园信息技术有限公司 数据处理方法、装置、***及存储介质
CN113407639B (zh) * 2021-07-16 2024-05-14 广州市百果园信息技术有限公司 数据处理方法、装置、***及存储介质
CN113672604A (zh) * 2021-08-16 2021-11-19 浙江大华技术股份有限公司 一种用户数据同步方法、装置、***及电子设备
CN113672624A (zh) * 2021-08-25 2021-11-19 中汽创智科技有限公司 一种数据处理方法、***及存储介质
CN113986981A (zh) * 2021-11-11 2022-01-28 湖南快乐阳光互动娱乐传媒有限公司 一种数据同步方法及装置
CN114880404A (zh) * 2022-07-13 2022-08-09 南瑞轨道交通技术有限公司 一种轨道交通分布式数据库的组模型准延迟同步方法

Similar Documents

Publication Publication Date Title
CN112307119A (zh) 数据同步方法、装置、设备及存储介质
US10642861B2 (en) Multi-instance redo apply
CN110502507B (zh) 一种分布式数据库的管理***、方法、设备和存储介质
US8799213B2 (en) Combining capture and apply in a distributed information sharing system
CN112084258A (zh) 一种数据同步方法和装置
US9977760B1 (en) Accessing data on distributed storage systems
US9875259B2 (en) Distribution of an object in volatile memory across a multi-node cluster
US10275347B2 (en) System, method and computer program product for managing caches
CN102411598B (zh) 一种实现数据一致性的方法及其***
US9990392B2 (en) Distributed transaction processing in MPP databases
US11233874B2 (en) Ordinary write in distributed system maintaining data storage integrity
US20230099664A1 (en) Transaction processing method, system, apparatus, device, storage medium, and program product
US20190347167A1 (en) Primary Node-Standby Node Data Transmission Method, Control Node, and Database System
US10191936B2 (en) Two-tier storage protocol for committing changes in a storage system
CN115668141A (zh) 使用时间戳对网络中的事务进行分布式处理
CN114490141B (zh) 一种基于共享内存的高并发ipc数据交互方法
US10761748B2 (en) Future write in distributed system maintaining data storage integrity
US11669518B1 (en) Method and system for processing database transactions in a distributed online transaction processing (OLTP) database
CN111475480A (zh) 一种日志处理方法及***
CN112612799A (zh) 一种数据同步方法及终端
US10642750B2 (en) System and method of a shared memory hash table with notifications and reduced memory utilization
US8359601B2 (en) Data processing method, cluster system, and data processing program
WO2020119709A1 (zh) 数据合并的实现方法、装置、***及存储介质
WO2022135471A1 (zh) 多版本并发控制和日志清除方法、节点、设备和介质
CN113407639B (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
WW01 Invention patent application withdrawn after publication

Application publication date: 20210202

WW01 Invention patent application withdrawn after publication