开云优惠体育网页版入口

开云优惠体育网页版入口:一种数据同步方法及终端发明专利

更新时间:2026-09-01
一种数据同步方法及终端发明专利 专利申请类型:发明专利;
地区:福建-福州;
源自:福州高价值专利检索信息库;

专利名称:一种数据同步方法及终端

专利类型:发明专利

专利申请号:CN202111244896.4

专利申请(专利权)人:福建天泉教育开云优惠体育网页版入口有限公司
权利人地址:福建省福州市长乐区湖南镇大鹤村(福建天棣动漫开云优惠体育网页版入口有限公司)

专利发明(设计)人:刘德建,林伟,陈宏

专利摘要:本发明公开了一种数据同步方法及终端,通过监控每一个从节点的主从同步延迟时间,当延迟时间超过第一延迟时间且未超过第二延迟时间时,使用单线程对数据库的操作日志进行数据库语句的聚合;当延迟时间超过第二延迟时间时,使用多线程对数据库的操作日志进行数据库语句的聚合,但是多线程的场景下进行数据聚合会造成数据不准确的情况;根据聚合得到的数据库语句进行数据同步,因此,对于数据要求不高的场景,使用非事务性数据同步的方式,能够提高数据同步的吞吐量,减少主从同步的延迟时间。

主权利要求:
1.一种数据同步方法,其特征在于,包括步骤:
监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则获取预设时间范围内的数据库的操作日志,将预设条数的所述操作日志分配至不同的线程,在每一个线程中对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;
根据聚合得到的数据库语句进行数据同步。
2.根据权利要求1所述的一种数据同步方法,其特征在于,所述使用单线程对数据库的操作日志进行数据库语句的聚合包括:根据主键ID对预设时间范围内的数据库的操作日志进行分组;
判断每组所述操作日志中是否存在删除状态的数据库语句,若是,则仅保存所述删除状态的数据库语句;
否则,判断每组所述操作日志中是否存在添加状态的数据库语句,若是,则将更新状态的数据库语句覆盖至所述添加状态的数据库语句中,得到一条聚合后的添加状态的数据库语句,否则,将更新状态的数据库语句进行聚合,得到一条聚合后的更新状态的数据库语句。
3.根据权利要求1所述的一种数据同步方法,其特征在于,所述根据聚合得到的数据库语句进行数据同步包括:判断是否只有一条针对主键ID聚合得到的数据库语句,若是,则直接在从节点中执行所述聚合得到的数据库语句;
否则,判断聚合得到的数据库语句是否包含删除状态的数据库语句,若是,则在从节点中最后执行所述删除状态的数据库语句,否则,在从节点中依次执行所述聚合得到的数据库语句。
4.根据权利要求1所述的一种数据同步方法,其特征在于,还包括:若所述延迟时间不超过第一延迟时间,则根据操作日志的时间顺序,在从节点中逐条执行日志中的数据库语句。
5.一种数据同步终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则获取预设时间范围内的数据库的操作日志,将预设条数的所述操作日志分配至不同的线程,在每一个线程中对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;
根据聚合得到的数据库语句进行数据同步。
6.根据权利要求5所述的一种数据同步终端,其特征在于,所述使用单线程对数据库的操作日志进行数据库语句的聚合包括:获取预设时间范围内的数据库的操作日志,根据主键ID对所述数据库的操作日志进行分组;
判断每组所述操作日志中是否存在删除状态的数据库语句,若是,则仅保存所述删除状态的数据库语句;
否则,判断每组所述操作日志中是否存在添加状态的数据库语句,若是,则将更新状态的数据库语句覆盖至所述添加状态的数据库语句中,得到一条聚合后的添加状态的数据库语句,否则,将更新状态的数据库语句进行聚合,得到一条聚合后的更新状态的数据库语句。
7.根据权利要求5所述的一种数据同步终端,其特征在于,所述根据聚合得到的数据库语句进行数据同步包括:判断是否只有一条针对主键ID聚合得到的数据库语句,若是,则直接在从节点中执行所述聚合得到的数据库语句;
否则,判断聚合得到的数据库语句是否包含删除状态的数据库语句,若是,则在从节点中最后执行所述删除状态的数据库语句,否则,在从节点中依次执行所述聚合得到的数据库语句。
8.根据权利要求5所述的一种数据同步终端,其特征在于,还包括:若所述延迟时间不超过第一延迟时间,则根据操作日志的时间顺序,在从节点中逐条执行日志中的数据库语句。 说明书 : 一种数据同步方法及终端技术领域[0001] 本发明涉及数据库技术领域,特别涉及一种数据同步方法及终端。背景技术[0002] 目前各个数据库集群为了实现扩容以及大数据量存储,一般都是采用分布式方式进行数据库节点的部署。同时,为了进一步提高系统的性能,会进行数据库主从分离,即数据均写入主节点,通过数据同步的方式同步至从节点中,数据读取从从节点处进行。[0003] 通常旧有数据同步为了确保同步的准确性,必须按照事务的特性,逐条地按照日志的顺序进行数据的同步,但是同步性能有待提高。并且在某些不太需要确保数据准确性的数据同步场景下,采用事务特性进行数据同步的方式会进一步的限制数据同步的吞吐量,增加主从同步的延迟时间。发明内容[0004] 本发明所要解决的技术问题是:一种数据同步方法及终端,能够在数据精度要求不高的场景下,提高数据同步的吞吐量。[0005] 为了解决上述技术问题,本发明采用的技术方案为:[0006] 一种数据同步方法,包括步骤:[0007] 监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则使用多线程对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;[0008] 根据聚合得到的数据库语句进行数据同步。[0009] 为了解决上述技术问题,本发明采用的另一种技术方案为:[0010] 一种数据同步终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:[0011] 监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则使用多线程对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;[0012] 根据聚合得到的数据库语句进行数据同步。[0013] 本发明的有益效果在于:通过监控每一个从节点的主从同步延迟时间,当延迟时间超过第一延迟时间且未超过第二延迟时间时,使用单线程对数据库的操作日志进行数据库语句的聚合;当延迟时间超过第二延迟时间时,使用多线程对数据库的操作日志进行数据库语句的聚合,但是多线程的场景下进行数据聚合会造成数据不准确的情况;根据聚合得到的数据库语句进行数据同步,因此,对于数据要求不高的场景,使用非事务性数据同步的方式,能够提高数据同步的吞吐量,减少主从同步的延迟时间。附图说明[0014] 图1为本发明实施例的一种数据同步方法的流程图;[0015] 图2为本发明实施例的一种数据同步终端的示意图。具体实施方式[0016] 为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。[0017] 请参照图1,本发明实施例提供了一种数据同步方法,包括步骤:[0018] 监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则使用多线程对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;[0019] 根据聚合得到的数据库语句进行数据同步。[0020] 从上述描述可知,本发明的有益效果在于:通过监控每一个从节点的主从同步延迟时间,当延迟时间超过第一延迟时间且未超过第二延迟时间时,使用单线程对数据库的操作日志进行数据库语句的聚合;当延迟时间超过第二延迟时间时,使用多线程对数据库的操作日志进行数据库语句的聚合,但是多线程的场景下进行数据聚合会造成数据不准确的情况;根据聚合得到的数据库语句进行数据同步,因此,对于数据要求不高的场景,使用非事务性数据同步的方式,能够提高数据同步的吞吐量,减少主从同步的延迟时间。[0021] 进一步地,所述使用多线程对数据库的操作日志进行数据库语句的聚合包括:[0022] 获取预设时间范围内的数据库的操作日志,向每一个线程分配预设条数的所述操作日志;[0023] 在每一个线程中对数据库的操作日志进行数据库语句的聚合。[0024] 由上述描述可知,通过获取预设时间范围内的数据库操作日志,向每一个线程分配预设条数的操作日志,并在每一个线程中通过单线程对操作日志进行数据库语句的聚合,因此在延迟时间超过第二延迟时间时,使用多线程聚合的方法,能够及时减少主从同步的延迟时间。[0025] 进一步地,所述使用单线程对数据库的操作日志进行数据库语句的聚合包括:[0026] 根据主键ID对预设时间范围内的数据库的操作日志进行分组;[0027] 判断每组所述操作日志中是否存在删除状态的数据库语句,若是,则仅保存所述删除状态的数据库语句;[0028] 否则,判断每组所述操作日志中是否存在添加状态的数据库语句,若是,则将更新状态的数据库语句覆盖至所述添加状态的数据库语句中,得到一条聚合后的添加状态的数据库语句,否则,将更新状态的数据库语句进行聚合,得到一条聚合后的更新状态的数据库语句。[0029] 由上述描述可知,在单线程数据库语句聚合时,根据主键ID对操作日志进行分组,当存在删除状态的数据库语句时,针对该主键ID仅保存删除状态的数据库语句;当不存在删除状态的数据库语句时,对更新状态的或添加状态的数据库语句进行聚合,因此在同一个预设时间范围内针对一个主键ID只会生成一条数据库语句,无需多次进行数据库操作,减少了资源占用。[0030] 进一步地,所述根据聚合得到的数据库语句进行数据同步包括:[0031] 判断是否只有一条针对主键ID聚合得到的数据库语句,若是,则直接在从节点中执行所述聚合得到的数据库语句;[0032] 否则,判断聚合得到的数据库语句是否包含删除状态的数据库语句,若是,则在从节点中最后执行所述删除状态的数据库语句,否则,在从节点中依次执行所述聚合得到的数据库语句。[0033] 由上述描述可知,若进行多线程聚合即可能针对一个主键ID生成多条聚合得到的数据库语句,因此若需要聚合得到的数据库语句包含删除状态的数据库语句,则删除状态的数据库语句最后处理,减少同步数据时的错误率。[0034] 进一步地,还包括:[0035] 若所述延迟时间不超过第一延迟时间,则根据操作日志的时间顺序,在从节点中逐条执行日志中的数据库语句。[0036] 由上述描述可知,在延迟时间不超过第一延迟时间时,直接在从节点逐条获取操作日志中的数据库语句进行处理,从而灵活地根据主从同步情况选择数据同步方式。[0037] 请参照图2,本发明另一实施例提供了一种数据同步终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:[0038] 监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则使用多线程对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合;[0039] 根据聚合得到的数据库语句进行数据同步。[0040] 由上述描述可知,通过监控每一个从节点的主从同步延迟时间,当延迟时间超过第一延迟时间且未超过第二延迟时间时,使用单线程对数据库的操作日志进行数据库语句的聚合;当延迟时间超过第二延迟时间时,使用多线程对数据库的操作日志进行数据库语句的聚合,但是多线程的场景下进行数据聚合会造成数据不准确的情况;根据聚合得到的数据库语句进行数据同步,因此,对于数据要求不高的场景,使用非事务性数据同步的方式,能够提高数据同步的吞吐量,减少主从同步的延迟时间。[0041] 进一步地,所述使用多线程对数据库的操作日志进行数据库语句的聚合包括:[0042] 获取预设时间范围内的数据库的操作日志,向每一个线程分配预设条数的所述操作日志;[0043] 在每一个线程中对数据库的操作日志进行数据库语句的聚合。[0044] 由上述描述可知,通过获取预设时间范围内的数据库操作日志,向每一个线程分配预设条数的操作日志,并在每一个线程中通过单线程对操作日志进行数据库语句的聚合,因此在延迟时间超过第二延迟时间时,使用多线程聚合的方法,能够及时减少主从同步的延迟时间。[0045] 进一步地,所述使用单线程对数据库的操作日志进行数据库语句的聚合包括:[0046] 根据主键ID对预设时间范围内的数据库的操作日志进行分组;[0047] 判断每组所述操作日志中是否存在删除状态的数据库语句,若是,则仅保存所述删除状态的数据库语句;[0048] 否则,判断每组所述操作日志中是否存在添加状态的数据库语句,若是,则将更新状态的数据库语句覆盖至所述添加状态的数据库语句中,得到一条聚合后的添加状态的数据库语句,否则,将更新状态的数据库语句进行聚合,得到一条聚合后的更新状态的数据库语句。[0049] 由上述描述可知,在单线程数据库语句聚合时,根据主键ID对操作日志进行分组,当存在删除状态的数据库语句时,针对该主键ID仅保存删除状态的数据库语句;当不存在删除状态的数据库语句时,对更新状态的或添加状态的数据库语句进行聚合,因此在同一个预设时间范围内针对一个主键ID只会生成一条数据库语句,无需多次进行数据库操作,减少了资源占用。[0050] 进一步地,所述根据聚合得到的数据库语句进行数据同步包括:[0051] 判断是否只有一条针对主键ID聚合得到的数据库语句,若是,则直接在从节点中执行所述聚合得到的数据库语句;[0052] 否则,判断聚合得到的数据库语句是否包含删除状态的数据库语句,若是,则在从节点中最后执行所述删除状态的数据库语句,否则,在从节点中依次执行所述聚合得到的数据库语句。[0053] 由上述描述可知,若进行多线程聚合即可能针对一个主键ID生成多条聚合得到的数据库语句,因此若需要聚合得到的数据库语句包含删除状态的数据库语句,则删除状态的数据库语句最后处理,减少同步数据时的错误率。[0054] 进一步地,还包括:[0055] 若所述延迟时间不超过第一延迟时间,则根据操作日志的时间顺序,在从节点中逐条执行日志中的数据库语句。[0056] 由上述描述可知,在延迟时间不超过第一延迟时间时,直接在从节点逐条获取操作日志中的数据库语句进行处理,从而灵活地根据主从同步情况选择数据同步方式。[0057] 本发明的一种数据同步方法及终端,适用于针对同一个数据源内部,实现主从节点的数据同步,在数据同步过程中实现同步效率的提升,以下通过具体的实施方式进行说明:[0058] 实施例一[0059] 请参照图1,一种数据同步方法,包括步骤:[0060] S1、监控每一个从节点的主从同步延迟时间,若所述延迟时间超过第一延迟时间,则判断所述延迟时间是否超过第二延迟时间,若是,则使用多线程对数据库的操作日志进行数据库语句的聚合,否则,使用单线程对数据库的操作日志进行数据库语句的聚合。[0061] 具体的,设置一个监控程序,使用监控程序监控每个从节点的主从同步延迟时间。假设某一个从节点的主从同步延迟时间正常值为1秒,当主从同步延迟时间在1~10秒时,说明存在一定的延迟风险,此时可以采用单线程数据聚合与数据同步的方式。当主从同步延迟时间大于10秒时,说明存在大量的数据延迟,需要进一步的提高数据同步效率,故采用多线程数据聚合与数据同步的方式。[0062] S11、若延迟时间超过第一延迟时间但未超过第二延迟时间,采用单线程数据聚合与数据同步的方式。[0063] 其中,所述使用单线程对数据库的操作日志进行数据库语句的聚合包括:[0064] 根据主键ID对预设时间范围内的数据库的操作日志进行分组;[0065] 判断每组所述操作日志中是否存在删除状态的数据库语句,若是,则仅保存所述删除状态的数据库语句;[0066] 否则,判断每组所述操作日志中是否存在添加状态的数据库语句,若是,则将更新状态的数据库语句覆盖至所述添加状态的数据库语句中,得到一条聚合后的添加状态的数据库语句,否则,将更新状态的数据库语句进行聚合,得到一条聚合后的更新状态的数据库语句。[0067] 具体的,当采用单线程进行数据聚合时,获取预设时间内的操作日志数据集合,针对日志中的主键ID进行分组,在每一分组中的每条日志记录中包含add、update和delete这3种状态。[0068] 当某一个分组中存在delete状态时,该主键ID将只保留该条delete数据库语句;[0069] 当不存在delete状态时,如存在add状态,此时可以把update中的字段覆盖至add语句中,最终只记录一条覆盖后的add数据库语句;[0070] 当不存在delete状态时,如不存在add状态,可以把多条update语句覆盖并合并成同一条语句,最终只记录一条update数据库语句。[0071] 因此单线程场景下,能够保证主从同步的数据的准确性。[0072] S12、若延迟时间超过第二延迟时间,采用多线程数据聚合与数据同步的方式。[0073] 其中,所述使用多线程对数据库的操作日志进行数据库语句的聚合包括:[0074] 获取预设时间范围内的数据库的操作日志,将预设条数的所述操作日志分配至不同的线程;[0075] 在每一个线程中对数据库的操作日志进行数据库语句的聚合。[0076] 具体的,当采用多线程进行数据聚合时,主线程获取一大批的日志数据,并同时分配固定条数的日志至单独的线程中,后续单独线程中的操作步骤与单线程数据聚合时的步骤一致。[0077] 在本实施例中,当采用多线程进行数据聚合时,获取预设时间内的操作日志数据集合,将预设条数的操作日志分配至不同的线程中;[0078] 在每一个线程中针对日志中的主键ID进行分组,在每一分组中的每条日志记录中包含add、update和delete这3种状态。[0079] 当某一个分组中存在delete状态时,该主键ID将只保留该条delete数据库语句;[0080] 当不存在delete状态时,如存在add状态,此时可以把update中的字段覆盖至add语句中,最终只记录一条覆盖后的add数据库语句;[0081] 当不存在delete状态时,如不存在add状态,可以把多条update语句覆盖并合并成同一条语句,最终只记录一条update数据库语句。[0082] 由此可对每一个线程中的操作日志数据进行聚合,根据每一个线程中聚合得到的结果进行数据同步。但是由于多线程操作场景下,可能会存在数据操作的互相覆盖,故可能会存在数据不准确的场景。因此,如果对于大数据量,并且类似操作行为日志这种非重要数据的同步场景下,部分的数据不准确是可接受的,故可以使用本实施例的同步方法。[0083] S13、若延迟时间不超过第一延迟时间,则根据操作日志的时间顺序,在从节点中逐条执行日志中的数据库语句。[0084] 具体的,若延迟时间不超过第一延迟时间,数据库操作后均先记录日志,后续逐条的按顺序执行日志中的记录,在从节点中恢复数据,进而实现主从节点的数据同步。[0085] S2、根据聚合得到的数据库语句进行数据同步。[0086] 具体的,步骤S2包括:[0087] 判断是否只有一条针对主键ID聚合得到的数据库语句,若是,则直接在从节点中执行所述聚合得到的数据库语句;[0088] 否则,判断聚合得到的数据库语句是否包含删除状态的数据库语句,若是,则在从节点中最后执行所述删除状态的数据库语句,否则,在从节点中依次执行所述聚合得到的数据库语句。[0089] 在本实施例中,在进行单线程聚合时,一个主键ID只会聚合得到一条数据库语句,直接在从节点中执行该数据库语句;在进行多线程聚合时,一个主键ID可能会聚合得到多条数据库语句,因此需要判断数据库语句中是否包含删除状态的数据库语句,若是,需要将其放在最后执行。[0090] 因此,在本实施例针对数据库的操作日志进行数据同步的,操作日志是以SQL方式记录的,只有数据库变更哪些字段,SQL中就只会操作哪些字段的。假设某一张表有100个字段,如果数据的变更每次只有1个字段,则每次数据同步也只会变更这一个字段,其他未变化的字段则不会进行处理,减少了处理的数据量。[0091] 实施例二[0092] 请参照图2,一种数据同步终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例一的一种数据同步方法的各个步骤。[0093] 综上所述,本发明提供的一种数据同步方法及终端,通过监控每一个从节点的主从同步延迟时间,当延迟时间超过第一延迟时间且未超过第二延迟时间时,使用单线程对数据库的操作日志进行数据库语句的聚合;当延迟时间超过第二延迟时间时,使用多线程对数据库的操作日志进行数据库语句的聚合;其中,在单线程数据库语句聚合时,根据主键ID对操作日志进行分组,当存在删除状态的数据库语句时,针对该主键ID仅保存删除状态的数据库语句;当不存在删除状态的数据库语句时,对更新状态的或添加状态的数据库语句进行聚合,因此在同一个预设时间范围内针对一个主键ID只会生成一条数据库语句,无需多次进行数据库操作,减少了资源占用;根据聚合得到的数据库语句进行数据同步,因此,对于数据要求不高的场景,使用非事务性数据同步的方式,能够提高数据同步的吞吐量,减少主从同步的延迟时间。[0094] 以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

专利地区:福建

专利申请日期:2021-10-26

专利公开日期:2024-11-29

专利公告号:CN114090609B


以上信息来自国家知识产权局,如信息有误请联系我方更正!
该专利所有权非本平台所有,我方无法提供专利权所有者联系方式,请勿联系我方。
电话咨询
到底部
搜本页
回顶部
开云优惠体育(中国)官网 — 开云优惠体育app下载