CN110866011B - 数据表同步方法、装置、计算机设备和存储介质 - Google Patents
数据表同步方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN110866011B CN110866011B CN201911067645.6A CN201911067645A CN110866011B CN 110866011 B CN110866011 B CN 110866011B CN 201911067645 A CN201911067645 A CN 201911067645A CN 110866011 B CN110866011 B CN 110866011B
- Authority
- CN
- China
- Prior art keywords
- lock
- database
- data lock
- data table
- reentry
- 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
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Abstract
本申请涉及一种数据表同步方法、装置、计算机设备和存储介质。所述方法包括:通过获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,第一动作用于获取第一数据库和至少一个第二数据库对该更新指令的响应状态;根据获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表。本方案能够实现实时同步不同数据库的数据表更新。
Description
技术领域
本申请涉及大数据技术领域,特别是涉及一种数据表同步方法、装置、计算机设备和存储介质。
背景技术
随着互联网技术的发展,互联网与各个领域的结合日益紧密,各领域系统产生的海量数据,为了保存数据的完整性,需将数据存储在不同数据库中,但随着大型网站的各种高并发访问、海量数据处理等场景越来越多,对数据的存储和需要也越来越高,为了方便数据查询需要对数据进行冗余存储,需要对数据表进行同步。
然而,目前的数据库是通过解析指定的数据表来同步数据表,不能实时同步不同数据库中的数据表。
发明内容
基于此,有必要针对上述技术问题,提供一种能够实现实时同步不同数据库的数据表同步方法、装置、计算机设备和存储介质。
一种数据表同步方法,所述方法包括:
获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
统计所述本地数据锁的重入次数,;
当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;
根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表。
在其中一个实施例中,所述方法还包括:
当所述重入次数大于或等于预设重入次数时,执行根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作的步骤。
在其中一个实施例中,所述方法还包括:
当所述第二数据库中不存在所述目标数据表时,触发数据表添加指令,给所述第二数据库添加所述目标数据表。
在其中一个实施例中,所述方法还包括:
释放所述本地数据锁和所述全局数据锁。
在其中一个实施例中,所述释放所述本地数据锁和所述全局数据锁,包括:
当所述重入次数等于预设重入次数时,释放所述本地数据锁和所述全局数据锁。
在其中一个实施例中,所述释放所述本地数据锁和所述全局数据锁,包括:
当所述重入次数大于所述预设重入次数时更新所述重入次数,直到更新后的重入次数等于所述预设重入次数时,释放所述本地数据锁和所述全局数据锁。
在其中一个实施例中,所述方法还包括:
获取所述目标数据表的查询指令;
根据所述查询指令判断所述重入次数是否小于所述预设重入次数;
当所述重入次数小于所述预设重入次数时,执行所述查询指令;
当所述重入次数大于或等于所述预设重入次数时,则结束。
一种数据表同步装置,所述装置包括:
获取模块,用于获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
计数模块,用于统计所述本地数据锁的重入次数;
判断模块,用于判断当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;
触发模块,用于根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表。
在一个实施例中,所述装置还包括:
数据表添加模块,用于当所述第二数据库中不存在所述目标数据表时,触发数据表添加指令,给所述第二数据库添加所述目标数据表。
在一个实施例中,所述装置还包括:
锁释放模块,用于释放所述本地数据锁和所述全局数据锁。
在一个实施例中,所述装置还包括:
数据查询模块,用于根据获取所述目标数据表的查询指令,当所述重入次数小于所述预设重入次数时,执行所述查询指令。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
统计所述本地数据锁的重入次数;
当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;
根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
统计所述本地数据锁的重入次数;
当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;
根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表。
上述数据表同步方法、装置、计算机设备和存储介质,通过获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,第一动作用于获取第一数据库和至少一个第二数据库对该更新指令的响应状态,避免获取本地数据锁就触发更新指令对应的第一动作;根据获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表,只有在获取第一数据库和至少一个第二数据库对该更新指令的响应状态后才能触发第二动作,确保第一数据库中的目标数据表和第二数据库中的目标数据表能实时同步,实现不同数据库的数据表的实时同步更新。
附图说明
图1为一个实施例中数据表同步方法的应用环境图;
图2为一个实施例中数据表同步方法的流程示意图;
图3为一个实施例中数据表同步步骤的流程示意图;
图4为另一个实施例中数据表同步方法的流程示意图;
图5为一个实施例中数据表同步装置的结构框图;
图6为另一个实施例中数据表同步装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据表同步方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。通过获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,第一动作用于获取第一数据库和至少一个第二数据库对该更新指令的响应状态;根据获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种数据库,但这些数据不受这些术语限制。这些术语仅用于将第一个数据库与另一个数据库区分。举例来说,在不脱离本申请的范围的情况下,可以将第一数据称为第二数据库,且类似地,可将第二数据库称为第一数据库。第一数据库和第二数据库两者都是数据库,但其不是同一个数据库。
在一个实施例中,如图2所示,提供了一种数据表同步方法,以该方法应用于图1中的102终端为例进行说明,包括以下步骤:
步骤202,获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁。
其中,数据库是按照预先定义的格式、有组织地存放数据的仓库。数据库可以存放不同数据类型的数据,可以是文本类型、数值类型、图像类型、日期型、逻辑类型等。数据库中可以包含多个数据表,数据表由行和列约束。数据表包括表名、字段、表的记录,每个数据表的表名都是不同的,可用于确保数据表的唯一性;字段对应有字段名、字段属性等,字段属性包括字段的大小、字段的默认值等。例如,统计学生信息,创建数据表的表名为Student,数据表中包括姓名name,年龄age,班级class等,其中name、age、class是Student数据表的字段。目标数据表是要进行处理的数据表。
更新指令是用于实现目标数据表的数据进行增加、删除等操作的操作指令。例如,update t_tb_period...、insert t_tb_period...、delete t_tb_period...等。
本地数据锁是在同一个系统中多个线程对共享资源的使用权。在获取共享资源的使用权后,共享资源存在对应的使用标记,其他线程无法访问共享资源,当使用标记不存在时,系统中的线程能够访问共享资源,即,获取本地数据锁的线程可以访问共享资源,未获取本地数据锁的线程不能访问共享资源。其中,共享资源可以是数据库中的数据表,在这里不做限定;线程是用于执行获取的指令对应的任务的操作,一个线程可以执行多个任务。当访问的共享资源不存在本地数据锁时,访问共享资源的线程给共享资源添加本地数据锁。例如,线程A访问共享数据表tb_table1,数据表tb_table1不存在本地数据锁,可以通过Redis设置本地数据锁,设置方式可以是触发设置指令,例如set stock_lock=true;当存在多个线程设置本地数据锁时,若set命令的返回结果为1时,代表其中一个线程对数据表tb_table1设置了本地数据锁,其他线程无法对数据表tb_table1设置本地数据锁。
具体地,从用户输入界面获取到对第一数据库中目标数据表的更新指令,触发本地数据锁获取函数,通过本地数据锁获取函数获取到目标数据表的本地数据锁,获取函数可以是get()函数。
步骤204,统计本地数据锁的重入次数。
其中,重入次数是本地数据锁使用的次数,同一个线程可以多次获取相同的本地数据锁。例如,线程A第一次访问数据表table1,需要通过本地数据锁接口获取本地数据锁1后执行更新指令1,统计本地数据锁1的重入数为1,当更新指令中1包含有更新指令2,对数据表table1执行更新指令2时需要再次获取本地数据锁,即再次获取本地数据锁是本地数据锁的重入,本地数据锁的重入次数加1,统计重入次数为2,获得此时本地数据锁的次数为2。
具体地,在获取本地数据锁之后,统计本地数据锁的重入次数,本地数据锁的重入次数可以通过函数来进行统计,函数可以是定义的sum()函数,统计的方式不做限定。
步骤206,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁。
其中,预设重入次数是预先定义的重入次数,预设重入次数可以是1、2、3等,预设重入次数的数值不做限定。
全局数据锁是不同系统或同一系统不同主机的线程对共享资源的使用权。全局锁存放在缓存数据库指定节点中,要获取目标数据表的全局锁需要访问该节点。全局数据锁,也就是分布式锁服务,分布式锁服务实现方式包括基于分布式缓存实现和基于分布式一致性算法实现,分布锁服务可以服务不同数据库、不同数据表或其它数据库中的数据表。其中,基于分布式缓存实现包括使用Redis实现和基于Redis实现的RedLock方案;基于分布式一致性算法实现的锁服务包括分布式系统的可靠协调系统(Zookeeper)和Chubby分布式锁服务。全局数据锁的设置方式可以是向缓存器Redis的节点发送命令,例如:SET(key=Lock_Name,value=my_random_value)NX PX 30000,设置全局数据锁,当统计的本地数据锁的重入次数小于预设重入次数时,触发函数GET(key=Lock_Name)获取更新指令对应的全局数据锁。
具体地,当统计的本地数据锁的重入次数小于预设重入次数时,触发全局数据锁获取函数,通过全局数据锁获取函数获取更新指令对应的全局数据锁。例如,线程B第一次访问数据表table2,需要通过本地数据锁接口获取本地数据锁1后执行操作指令a1,统计本地数据锁1的重入数为1,预设定义的重入次数为2,即重入次数小于预设重入次数,获取更新指令对应的全局数据锁;当继续对数据表table2执行操作指令a2时,已存在全局数据锁,不需要再次获取全局数据锁,只需要再次获取本地数据锁,本地数据锁的重入次数加1,获得此时本地数据锁的次数为2。
步骤208,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,该第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态。
具体地,监测到获取本地数据锁和全局数据锁后,触发事务管理器调用更新指令对应的协议接口向第一数据库和至少一个第二数据库发出是否执行更新指令的更新请求,把第一数据库和至少一个第二数据库向事务管理器提交对更新请求的响应状态存放在日志文件中,其中日志文件包括Undo log和Redo log。然后,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,该第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态,响应状态包括同意响应和拒绝响应。
步骤210,根据响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
其中,源数据是应用程序中产生的需要被进行处理的数据。例如,对浏览网页产生的浏览记录数据进行保存,其中浏览记录数据中的登录账号、登录密码、登录时间、登录互联网协议地址(Internet Protocol Address,IP)等数据就是源数据。
具体地,当接收的响应状态为同意响应时,触发更新指令对应的第二动作,把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表中。当接收的响应状态为拒绝响应时,中止把源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表中的操作。
上述数据表同步方法中,通过获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,避免获取本地数据锁就触发更新指令对应的第一动作;根据第一动作获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表,避免在同一时间段只更新第一数据库的目标数据表的情况,实现实时同步不同数据库的数据表更新。
在一个实施例中,该方法还包括:
当第二数据库中不存在目标数据表时,触发数据表添加指令,给第二数据库添加目标数据表。
具体地,当第二数据库中不存在目标数据表时,可以触发由结构化查询语言(Structured Query Language,SQL)编写的数据表添加指令,给第二数据库天机数据表,也可以通过点击数据库数据表添加按钮添加目标数据表或者直接导入目标数据表,在此添加方式不做限定。例如,SQL语言添加数据表,当目标数据表table1,第二数据库是FI-2,SQL语言添加指令为:
insert into table1(first_column,...last_column)
values(first_value,...last_value)。
第二数据库中不存在目标数据表可以通过添加目标数据表,确保不同数据库中的目标数据表能够实时更新。
在一个实施例中,该方法还包括:
释放本地数据锁和全局数据锁。
具体地,在执行更新指令时,通过get()函数获取本地数据锁和全局数据锁,当更新指令经过两阶段提交后完成不同数据库的目标数据表实时同步,通过函数先释放本地数据锁,在释放本地数据锁之后释放全局数据锁,可以通过DEL()函数释放,例如,DEL(key=Lock_Name)。例如,当线程完成目标数据表的实时同步后,本地数据锁的重入次数为1,预设重入次数为1时,通过DEL()函数释放本地数据锁,本地数据锁的重入次数变为0,再调用DEL()函数释放全局数据锁,完成本地数据锁和全局数据锁的释放。释放目标数据表的本地数据锁和全局数据锁之后,其他线程可以访问目标数据表,避免多个线程同时访问同一目标数据表,保证了数据的准确性。
在一个实施例中,该方法还包括:获取目标数据表的查询指令,根据查询指令判断重入次数是否小于预设重入次数,当重入次数小于预设重入次数时,执行查询指令;当重入次数大于或等于预设重入次数时,则结束。
具体地,查询指令是对目标数据表的数据进行查询,可以是SQL查询指令。当获取目标数据表查询指令,当重入次数小于预设重入次数时,本地数据锁和全局数据锁已经被释放,可以执行查询指令;当重入次数大于或等于预设重入次数时,本地数据锁和全局数据锁还未被释放,无法执行数据查询指令,则结束。,避免数据在更新过程中对数据的查询操作,确保数据的准确性。
在一个实施例中,如图3所示,提供了一种数据表同步的步骤,包括以下步骤:
步骤302,获取更新第一数据库的目标数据表的更新指令。
步骤304,获取本地数据锁。
步骤306,判断本地数据锁重入次数是否大于预设重入次数,若是,执行步骤310;若否,执行步骤308。
步骤308,获取全局数据锁。
步骤310,执行更新指令对应的第一动作和第二动作。
具体地,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,该第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态;根据响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
步骤312,释放本地数据锁和全局数据锁。
具体地,当重入次数等于预设重入次数时,释放全局数据锁和本地数据锁;当重入次数大于预设重入次数时更新重入次数,直到更新后的重入次数等于预设重入次数时,释放全局数据锁和本地数据锁。
上述数据表同步的步骤,通过获取更新第一数据库的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,判断本地数据锁重入次数是否大于预设重入次数,当本地数据锁重入次数小于预设重入次数时,获取全局数据锁,根据全局数据锁和本地数据锁执行更新指令对应的第一动作和第二动作,第一动作用于获取第一数据库和至少一个第二数据库对该更新指令的响应状态,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表,最后释放本地数据锁和全局数据锁,实现同时实时同步第一数据中目标数据表和至少一个第二数据表中的目标数据表。
在另一个实施例中,如图4所示,提供了一种数据表同步方法,以该方法应用于图1中的102终端为例进行说明,包括以下步骤:
步骤402,获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁。
步骤404,统计本地数据锁的重入次数。
步骤406,当重入次数大于或等于预设重入次数时,执行步骤408。
步骤408,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,该第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态。
步骤410,根据响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
步骤412,释放全局数据锁和本地数据锁。
上述数据表同步方法,通过获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,避免获取本地数据锁就触发更新指令对应的第一动作;根据第一动作获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表,避免在同一时间段只更新第一数据库的目标数据表的情况,实现实时同步不同数据库的数据表更新;释放全局数据锁和本地数据锁,其他线程可以访问目标数据表。
在一个实施例中,该方法还包括:
当重入次数等于预设重入次数时,释放全局数据锁和本地数据锁。
在一个实施例中,该方法还包括:
当重入次数大于预设重入次数时更新重入次数,直到更新后的重入次数等于预设重入次数时,释放全局数据锁和本地数据锁。
具体地,当重入次数大于预设重入次数,可以通过Reduce()减法函数更新重入次数,直到重入次数等于预设重入次数时,释放更新指令对应的全局数据锁和本地数据锁。
应该理解的是,虽然图2-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种数据表同步装置500,包括:获取模块502、计数模块504、判断模块506和触发模块508,其中:
获取模块502,用于获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁;
计数模块504,用于统计本地数据锁的重入次数;
判断模块506,用于判断当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁;
触发模块508,用于根据本地数据锁和全局数据锁触发更新指令对应的第一动作,该第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态;以及
根据响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
上述数据表同步装置,通过获取模块502获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁,统计本地数据锁的重入次数,当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁,根据本地数据锁和全局数据锁触发更新指令对应的第一动作,避免获取本地数据锁就触发更新指令对应的第一动作;根据第一动作获取的响应状态触发更新指令对应的第二动作,该第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的所述目标数据表,避免在同一时间段只更新第一数据库的目标数据表的情况,实现实时同步不同数据库的数据表更新。
在一个实施例中,判断模块506还用于判断重入次数大于或等于预设重入次数时,执行根据本地数据锁和全局数据锁触发更新指令对应的第一动作的步骤。
在另一个实施例中,如图6所示,提供了一种数据表同步装置500,除了包括获取模块502、计数模块504、判断模块506和触发模块508,还包括锁释放模块510、数据表添加模块512和数据查询模块514,其中:
锁释放模块510,用于释放全局数据锁和本地数据锁。
具体地,锁释放模块510释放全局数据锁和本地数据锁后,可以允许其他线程访问目标数据表,确保数据的准确性,避免多个线程同时访问操作目标数据表。
数据表添加模块512,用于当第二数据库中不存在目标数据表时,触发数据表添加指令,给第二数据库添加目标数据表。
具体地,数据表添加模块512添加目标数据库确保第一数据库的目标数据表在更新的同时也实时更新至少一个第二数据库的目标数据库。
数据查询模块514,用于根据获取目标数据表的查询指令,当重入次数小于预设重入次数时,执行查询指令。
具体地,数据查询模块514在重入次数小于预设重入次数时,本地数据锁和全局数据锁已经被释放,执行查询指令,可以确保数据的准确性。
在一个实施例中,锁释放模块510还用于当重入次数等于预设重入次数时,释放全局数据锁和本地数据锁。
在一个实施例中,锁释放模块510还用于当重入次数大于预设重入次数时更新重入次数,直到更新后的重入次数等于预设重入次数时,释放本地数据锁和全局数据锁。
关于数据表同步装置的具体限定可以参见上文中对于数据表同步方法的限定,在此不再赘述。上述数据表同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据表同步方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁;
统计本地数据锁的重入次数;
当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁;
根据本地数据锁和全局数据锁触发更新指令对应的第一动作,第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态;以及
根据响应状态触发更新指令对应的第二动作,第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当重入次数大于或等于预设重入次数时,执行根据本地数据锁和全局数据锁触发更新指令对应的第一动作的步骤。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当第二数据库中不存在目标数据表时,触发数据表添加指令,给第二数据库添加目标数据表。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
释放全局数据锁和本地数据锁。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当重入次数等于预设重入次数时,释放本地数据锁和全局数据锁。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当重入次数大于预设重入次数时更新重入次数,直到更新后的重入次数等于预设重入次数时,释放本地数据锁和全局数据锁。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取目标数据表的查询指令;
根据查询指令判断重入次数是否小于预设重入次数;
当重入次数小于预设重入次数时,执行查询指令;
当重入次数大于或等于预设重入次数时,则结束。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取第一数据库中的目标数据表的更新指令,根据更新指令获取对应的本地数据锁;
统计本地数据锁的重入次数;
当重入次数小于预设重入次数时,获取更新指令对应的全局数据锁;
根据本地数据锁和全局数据锁触发更新指令对应的第一动作,第一动作用于获取第一数据库和至少一个第二数据库对更新指令的响应状态;以及
根据响应状态触发更新指令对应的第二动作,第二动作用于把更新指令对应的源数据同步到第一数据库中的目标数据表和至少一个第二数据库中对应的目标数据表。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
当重入次数大于或等于预设重入次数时,执行根据本地数据锁和全局数据锁触发更新指令对应的第一动作的步骤。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当第二数据库中不存在目标数据表时,触发数据表添加指令,给第二数据库添加目标数据表。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:释放本地数据锁和全局数据锁。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
当重入次数等于预设重入次数时,释放本地数据锁和全局数据锁。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
当重入次数大于预设重入次数时更新重入次数,直到更新后的重入次数等于预设重入次数时,释放本地数据锁和全局数据锁。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取目标数据表的查询指令;
根据查询指令判断重入次数是否小于预设重入次数;
当重入次数小于预设重入次数时,执行查询指令;
当重入次数大于或等于预设重入次数时,则结束。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据表同步方法,所述方法包括:
获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
统计所述本地数据锁的重入次数;当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;所述全局数据锁为分布式锁;
根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表;
当所述重入次数大于或者等于预设重入次数时,执行根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作的步骤;
当所述更新指令经过两阶段提交后完成不同数据库的目标数据表实时同步时,释放所述本地数据锁和所述全局数据锁;所述全局数据锁在所述本地数据锁释放之后释放。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述第二数据库中不存在所述目标数据表时,触发数据表添加指令,给所述第二数据库添加所述目标数据表。
3.根据权利要求1所述的方法,其特征在于,所述释放本地数据锁和释放全局数据锁,包括:
当所述重入次数等于预设重入次数时,释放所述本地数据锁和所述全局数据锁。
4.根据权利要求1所述的方法,其特征在于,所述释放所述本地数据锁和所述全局数据锁,包括:
当所述重入次数大于所述预设重入次数时更新所述重入次数,直到更新后的重入次数等于所述预设重入次数时,释放所述本地数据锁和所述全局数据锁。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标数据表的查询指令;
根据所述查询指令判断所述重入次数是否小于所述预设重入次数
当所述重入次数小于所述预设重入次数时,执行所述查询指令;
当所述重入次数大于或等于所述预设重入次数时,则结束。
6.一种数据表同步装置,其特征在于,所述装置包括:
获取模块,用于获取第一数据库中的目标数据表的更新指令,根据所述更新指令获取对应的本地数据锁;
计数模块,用于统计所述本地数据锁的重入次数;所述本地数据锁是在同一个系统中多个线程对共享资源的使用权;
判断模块,用于判断当所述重入次数小于预设重入次数时,获取所述更新指令对应的全局数据锁;所述全局数据锁为分布式锁,是不同系统或同一系统不同主机的线程对共享资源的使用权;
触发模块,用于根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作,所述第一动作用于获取所述第一数据库和至少一个第二数据库对所述更新指令的响应状态;以及
根据所述响应状态触发所述更新指令对应的第二动作,所述第二动作用于把所述更新指令对应的源数据同步到所述第一数据库中的所述目标数据表和所述至少一个第二数据库中对应的所述目标数据表;
所述判断模块还用于当所述重入次数大于或者等于预设重入次数时, 执行根据所述本地数据锁和所述全局数据锁触发所述更新指令对应的第一动作的步骤;
锁释放模块,用于当所述更新指令经过两阶段提交后完成不同数据库的目标数据表实时同步时,释放所述本地数据锁和所述全局数据锁;所述全局数据锁在所述本地数据锁释放之后释放。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
数据表添加模块,用于当所述第二数据库中不存在所述目标数据表时,触发数据表添加指令,给所述第二数据库添加所述目标数据表。
8.根据权利要求6所述的装置,其特征在于,所述锁释放模块还用于当所述重入次数等于预设重入次数时,释放所述本地数据锁和所述全局数据锁。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911067645.6A CN110866011B (zh) | 2019-11-04 | 2019-11-04 | 数据表同步方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911067645.6A CN110866011B (zh) | 2019-11-04 | 2019-11-04 | 数据表同步方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110866011A CN110866011A (zh) | 2020-03-06 |
CN110866011B true CN110866011B (zh) | 2022-11-08 |
Family
ID=69654473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911067645.6A Active CN110866011B (zh) | 2019-11-04 | 2019-11-04 | 数据表同步方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110866011B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760483A (zh) * | 2020-06-29 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 执行任务的方法和装置 |
CN113553196A (zh) * | 2021-06-28 | 2021-10-26 | 深圳云之家网络有限公司 | 业务请求的处理方法、装置、计算机设备和存储介质 |
CN115878639B (zh) * | 2022-09-07 | 2023-10-24 | 贝壳找房(北京)科技有限公司 | 二级缓存的一致性处理方法及分布式服务系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2282999A1 (en) * | 1999-09-22 | 2001-03-22 | Ibm Canada Limited-Ibm Canada Limitee | Method and apparatus for cross-node sharing of instructions in a multiple node relational database management system environment |
CN101169785A (zh) * | 2007-11-21 | 2008-04-30 | 浪潮电子信息产业股份有限公司 | 集群数据库系统的动态负载均衡方法 |
CN102201010A (zh) * | 2011-06-23 | 2011-09-28 | 清华大学 | 无共享架构的分布式数据库系统及其实现方法 |
-
2019
- 2019-11-04 CN CN201911067645.6A patent/CN110866011B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2282999A1 (en) * | 1999-09-22 | 2001-03-22 | Ibm Canada Limited-Ibm Canada Limitee | Method and apparatus for cross-node sharing of instructions in a multiple node relational database management system environment |
CN101169785A (zh) * | 2007-11-21 | 2008-04-30 | 浪潮电子信息产业股份有限公司 | 集群数据库系统的动态负载均衡方法 |
CN102201010A (zh) * | 2011-06-23 | 2011-09-28 | 清华大学 | 无共享架构的分布式数据库系统及其实现方法 |
Non-Patent Citations (2)
Title |
---|
Java限制可以重入次数的锁;weixin_30471561;《https://blog.csdn.net/weixin_30471561/article/details/94954909》;20181129;正文第1-4页 * |
seata中事务隔离性与锁分析;IT云清;《https://cloud.tencent.com/developer/article/1527193》;20191025;正文第1-2页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110866011A (zh) | 2020-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108197200B (zh) | 日志追踪方法、装置、计算机设备和存储介质 | |
CN110377851B (zh) | 多级联动下拉框的实现方法、装置和计算机设备 | |
CN110866011B (zh) | 数据表同步方法、装置、计算机设备和存储介质 | |
US9069832B2 (en) | Approach for modularized sychronization and memory management | |
CN108563958B (zh) | 角色权限更新方法、装置、计算机设备和存储介质 | |
US9563426B1 (en) | Partitioned key-value store with atomic memory operations | |
WO2020151333A1 (zh) | 页面加载方法、装置、计算机设备和存储介质 | |
CN111191221B (zh) | 权限资源的配置方法、装置和计算机可读存储介质 | |
CN109885786B (zh) | 数据缓存处理方法、装置、电子设备及可读存储介质 | |
EP3238421B1 (en) | System for high-throughput handling of transactions in data-partitioned, distributed, relational database management system | |
WO2020082558A1 (zh) | 基于函数名称的埋点方法、装置、计算机设备及存储介质 | |
WO2022142312A1 (zh) | 页面处理方法、装置、计算机设备及存储介质 | |
CN110555041A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
US20220276990A1 (en) | Light weight redundancy tool for performing transactions | |
CN112231070A (zh) | 数据写入、读取方法、装置及服务器 | |
CN113220659A (zh) | 一种数据迁移的方法、系统、电子装置和存储介质 | |
CN112579698A (zh) | 数据同步方法、装置、网关设备及存储介质 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
US11853284B2 (en) | In-place updates with concurrent reads in a decomposed state | |
CN115357590A (zh) | 针对数据变更的记录方法、装置、电子设备及存储介质 | |
JP2013045356A (ja) | トランザクション同時実行制御システム、トランザクション同時実行制御方法、およびプログラム | |
CN111464487A (zh) | 访问控制方法、装置及系统 | |
CN107391539B (zh) | 事务处理方法、服务器和存储介质 | |
CN109542962B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN111176986A (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 |