CN111930828B - 一种基于日志解析的数据同步方法和数据同步系统 - Google Patents

一种基于日志解析的数据同步方法和数据同步系统 Download PDF

Info

Publication number
CN111930828B
CN111930828B CN202010472463.3A CN202010472463A CN111930828B CN 111930828 B CN111930828 B CN 111930828B CN 202010472463 A CN202010472463 A CN 202010472463A CN 111930828 B CN111930828 B CN 111930828B
Authority
CN
China
Prior art keywords
dictionary file
offline dictionary
log
version
target
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
Application number
CN202010472463.3A
Other languages
English (en)
Other versions
CN111930828A (zh
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.)
Wuhan Dream Database Co ltd
Original Assignee
Wuhan Dream Database 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 Wuhan Dream Database Co ltd filed Critical Wuhan Dream Database Co ltd
Priority to CN202010472463.3A priority Critical patent/CN111930828B/zh
Publication of CN111930828A publication Critical patent/CN111930828A/zh
Application granted granted Critical
Publication of CN111930828B publication Critical patent/CN111930828B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

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

Abstract

本发明公开了一种基于日志解析的数据同步方法和数据同步系统,所述数据同步方法包括:日志分析线程在解析到DDL操作后,判断所述DDL操作的操作类型;当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件;获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件;从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件。在本发明中,根据源端数据库的实际操作及时管理更新离线字典文件,以避免字典文件中存在过多版本的定义信息,及时释放磁盘空间,从而避免拖慢日志同步服务重启过程的速度。

Description

一种基于日志解析的数据同步方法和数据同步系统
技术领域
本发明属于数据同步技术领域,更具体地,涉及一种基于日志解析的数据同步方法和数据同步系统。
背景技术
数据库同步技术目前广泛应用于分布式系统、大数据、云数据库等各类新兴产品中,通过数据库的冗余方案能够有效缓解大数据量高并发访问带给系统的巨大压力。通过抽取源数据库的事务日志,获得源数据库的数据操作,包括INSERT、DELETE、UPDATE,然后通过网络发送给复制系统的目的端,目的端恢复成原始的SQL语句在目的数据库上执行,是一种常用的数据库同步技术。它具有对源数据库的性能和数据模式影响小,可采用非常灵活的方式配置出各种拓扑结构,支持跨异构的操作系统和数据库平台复制等优点。
借助日志分析技术,解析数据库的在线或归档交易日志可以获取数据库数据的增量变化。但是为了保障目的数据库与源数据库的事务一致性,还需要通过数据库日志中每个事务对应的LSN(Log Sequence Number,简写为LSN)值或SCN(System Change Number,简写为SCN)值,对日志中的日志抽取位置及执行位置进行严格的定位。
目前市场上大多数数据库管理系统使用日志序号代表数据库系统内部产生的一个物理事务,包括SQLSERVER、MYSQL、DB2、DM6和DM7等数据库管理系统。特别要注意的是,在ORACLE数据库中,使用了SCN作为产生一个物理事务的标识,而ORACLE中的LSN仅作为日志切换的一个序号。在此,为方便描述,统一使用LSN作为数据库变化的唯一标识。
其中,LSN是由系统自动维护的数值,具有自动递增、全局唯一特性,每一个LSN值代表着数据库系统内部产生的一个物理事务。物理事务是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。
在数据库交易日志中虽然记录了LSN(或SCN)值,但并不会记录对象(例如表、索引、视图等)的定义,而是使用一个标识(对象ID)来代表操作对象。日志分析技术在分析交易日志的过程中,需要通过对象ID来获取对象定义,才能完成正确的日志解析工作。而获取对像定义可以采用直接连接数据库查询系统表来获取对像的定义,这种获取的对像定义因为是系统中最新的版本,所以不支持对像的修改(数据库的DDL操作);另一种则是在启动日志分析前把对像定义存到本地文件,然后根据日志解析捕获DDL操作来维护该字典文件,所以这种方式更适合大部分的同步场景。
由于需要考虑日志同步系统的异常情况,每次异常重启以后,都需要重新在日志文件查找LSN,找到故障时恢复日志分析的起点,由于日志起点发生了变化(分析位置回退到原来的后面),就要求离线字典中需要存放对像定义的多个版本,以便在异常情况下日志分析模块回退到某个日志点时能够找到正确版本的对像定义。由于字典文件中保留每次修改的变动,在一些极端的情况下,有些应用可能会频繁对表不断的做调整,导致字典文件中会存在多个版本,在日志分析推进的过程中有些版本将不需要再访问,这些作废的版本如果不进行清理那么会造成磁盘空间的浪费,也会拖慢日志同步服务重启过程的速度。因此,如何在保证字典文件正确的前提下来管理好字典文件就成为业界亟待解决的重要技术问题。
鉴于此,克服该现有技术产品所存在的不足是本技术领域亟待解决的问题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于日志解析的数据同步方法和数据同步系统,其目的在于,根据源端数据库的实际操作及时管理更新离线字典文件,以避免字典文件中存在过多版本的定义信息,及时释放磁盘空间,从而避免拖慢日志同步服务重启过程的速度。
为实现上述目的,按照本发明的一个方面,提供了一种基于日志解析的数据同步方法,所述数据同步方法包括:
日志分析线程在解析到DDL操作后,判断所述DDL操作的操作类型;
当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件;
获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件;
从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件。
优选地,所述当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件包括:
当所述DDL操作为创建操作时,获取所述创建操作的日志序列号和新创建的目标对象的定义信息;
将所述创建操作的日志序列号和所述目标对象的定义信息整合成第一版本定义信息,将所述第一版本定义信息存储于所述目标对象的离线字典文件中。
优选地,所述获取针对所述目标对象的目标操作,根据所述目标操作的操作类型管理所述离线字典文件包括:
获取针对所述目标对象的目标操作;
判断所述目标操作的操作类型;
若所述目标操作为DDL操作,则判断DDL操作的操作类型;
当DDL操作为ALTER操作时,执行所述从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件的步骤,以管理所述离线字典文件。
优选地,所述从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件包括:
根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况;
当无效的定义版本在所述离线字典文件中的占比大于设定的占比值时,基于有效的定义版本为所述目标对象创建新的离线字典文件,以清理离线字典文件中无效的定义版本;
将基于所述ALTER操作修改后的定义信息和所述ALTER操作的日志序列号整合为下一版本定义信息;
将所述下一版本定义信息追加在新的离线字典文件的尾部。
优选地,所述根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况包括:
基于检查点的日志序列号LSN1从前往后遍历离线字典文件的各个定义版本;
当本次检查的定义版本的日志序列号小于日志序列号LSN1,且本次检查的定义版本不是最后一个定义版本,则本次检查的定义版本为无效版本,继续获取下一次检查的定义版本,直至定义版本的日志序列号大于日志序列号LSN1,以确定无效的定义版本。
优选地,所述获取针对所述目标对象的目标操作,根据所述目标操作的操作类型管理所述离线字典文件还包括:
当所述目标操作为DROP操作时,在所述离线字典文件的尾部添加删除标记,并将所述DROP操作的日志序列号与所述删除标记建立关联。
优选地,所述从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件包括:
判断所述DROP操作的日志序列号是否小于所述日志序列号LSN1;
若小于,则删除所述离线字典文件;
若不小于,则继续获取最新的检查点的日志序列号LSN1,直至所述DROP操作的日志序列号小于日志序列号LSN1时,才删除所述离线字典文件。
优选地,所述当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件包括:
当所述DDL操作为创建操作时,获取新创建的目标对象的对象ID;
基于所述目标对象的对象ID为所述目标对象的离线字典文件命名。
优选地,所述获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件包括:
获取针对所述目标对象的目标操作,判断所述目标操作的操作类型;
当所述目标操作为DML操作时,基于大于最近原则从离线字典文件中,获取与所述目标操作相匹配的定义信息,以进行数据同步。
为实现上述目的,按照本发明的另一个方面,提供了一种数据同步系统,所述数据同步系统包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的数据同步方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供了一种基于日志解析的数据同步方法和数据同步系统,所述数据同步方法包括:日志分析线程在解析到DDL操作后,判断所述DDL操作的操作类型;当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件;获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件;从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件。
在本发明中,将对象的定义信息存储于离线字典文件中,无需实时访问数据库,不仅可以降低对数据库性能的影响,同时还可以保证获取正确的对象定义信息,进而保证数据同步或日志分析的准确性。在实际应用中,根据源端数据库的实际操作及时管理更新离线字典文件,以避免字典文件中存在过多版本的定义信息,及时释放磁盘空间,从而避免拖慢日志同步服务重启过程的速度。
附图说明
图1是本发明实施例提供的一种基于日志解析的数据同步方法的流程示意图;
图2是本发明实施例提供的图1中步骤103的流程示意图;
图3是本发明实施例提供的离线字典文件的第一种数据结构示意图;
图4是本发明实施例提供的离线字典文件的第二种数据结构示意图;
图5是本发明实施例提供的离线字典文件的新旧版本的数据结构对比示意图;
图6是本发明实施例提供的离线字典文件的第三种数据结构示意图;
图7是本发明实施例提供的离线字典文件的第四种数据结构示意图;
图8是本发明实施例提供一种数据同步系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。
在基于日志解析同步的系统中,源端日志分析模块通过把数据库对像定义信息存储在本地,形成离线字典文件,离线字典文件比使用连接在线数据库取对像定义的方式有明显的优势,前者除了可以支持DDL操作同步以外,还可以实现在日志解析过程中无需跟源数据库进行交互,在源数据库异常的情况下依旧可以进行日志解析。下面具体说明基于离线字典文件进行数据同步的方法,以及在数据同步中根据实际操作管理离线字典文件的方法。
参阅图1,在本实施例中,基于日志解析的数据同步方法包括:
步骤101:日志分析线程在解析到DDL操作后,判断所述DDL操作的操作类型。
在本实施例中,在源端执行DDL操作时,相应对象的定义信息会发生改变,需要根据DDL操作的操作类型执行相关的操作,以管理离线字典文件。
其中,DDL操作包括DROP操作、ALTER操作和创建操作。其中,DROP操作将删除表的结构,以及被依赖的约束、触发器和索引等;ALTER操作用于在已有的表中添加、修改或删除列;创建操作用于创建对象。
具体地,源端数据同步系统启动后需要初始化一个检查点调度线程和一个日志分析线程。检查点调度线程负责定时从目的端数据同步系统获取同步的检查点的日志序列号和清理无效的字典文件;日志分析线程负责分析日志并通过分析得到的DDL操作来维护字典文件。
步骤102:当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件。
其中,每一个对象会对应有一个离线字典文件,离线字典文件包含至少一个版本的定义信息。在本实施例中,以不断在离线字典文件的尾部增加下一版本的定义信息的方式,管理离线字典文件。
在本实施例中,当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件。
具体地,当所述DDL操作为创建操作时,获取所述创建操作的日志序列号和新创建的目标对象的定义信息,将所述创建操作的日志序列号和所述目标对象的定义信息整合成第一版本定义信息,将所述第一版本定义信息存储于所述目标对象的离线字典文件中。
此外,当所述DDL操作为创建操作时,获取新创建的目标对象的对象ID;基于所述目标对象的对象ID为所述目标对象的离线字典文件命名。在实际应用场景下,在创建离线字典文件时,使用对像ID来命名离线字典文件,可以在日志解析过程中很方便的通过待解析的对像ID来找到它对应的离线字典文件。
步骤103:获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件。
在本实施例中,日志分析线程在获取到针对所述目标对象的目标操作后,根据所述目标操作管理所述离线字典文件。当所述目标操作为DML操作时,获取所述DML操作所针对的对象的对象ID,根据对象ID遍历各个离线字典文件的文件名称,从而获取到正确的离线字典文件。当所述目标操作为DDL操作时,根据DDL操作的操作类型在所述离线字典文件中追加新的版本的定义信息,或删除离线字典文件中无效的版本信息,或在离线字典文件中添加删除标记,以根据DDL操作的操作类型管理离线字典文件。
步骤104:从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件。
其中,检查点的日志序列号指的是目的端数据同步系统定时保存的事务操作日志的日志序列号,当同步系统发生异常重启时,源端数据同步可以根据检查点的日志序列号来定位日志分析的起始位置。
在实际应用场景下,随着同步进程的推进以及DDL操作对目标对象的对象定义信息的修改,在离线字典文件中会存在无效版本的定义信息,需要根据同步情况及时清理离线字典文件,以避免字典文件中存在过多版本的定义信息,及时释放磁盘空间,从而避免拖慢日志同步服务重启过程的速度。
在优选的实施例中,在DDL操作频繁的系统中,检查点调度线程每次调度的间隔可以设置的较短一些,及时更新检查点的日志序列号,这样可以使得离线字典文件中不至于有太多的版本。具体地,获取DDL操作出现的频率,根据DDL出现的频率动态调整获取最新的检查点的时间间隔,以使检查点的更新进度与离线字典文件的版本相匹配。具体地,当DDL出现的频率大于预设频率阈值时,缩短获取最新的检查点的时间间隔;当DDL出现的频率小于预设频率阈值时,延长获取最新的检查点的时间间隔。
在本实施例中,将对象的定义信息存储于离线字典文件中,无需实时访问数据库,不仅可以降低对数据库性能的影响,同时还可以保证获取正确的对象定义信息,进而保证数据同步或日志分析的准确性。在实际应用中,根据源端数据库的实际操作及时管理更新离线字典文件,以避免字典文件中存在过多版本的定义信息,及时释放磁盘空间,从而避免拖慢日志同步服务重启过程的速度。
下面参阅图2,具体说明步骤103的实现过程,步骤103包括如下步骤:
步骤1031:获取针对所述目标对象的目标操作。
步骤1032:判断所述目标操作的操作类型。
其中,目标操作包括DML操作和DDL操作,当目标操作为DML操作时,执行步骤1033,当目标操作为DDL操作时,执行步骤1034。
步骤1033:当所述目标操作为DML操作时,基于大于最近原则从离线字典文件中,获取与所述目标操作相匹配的定义信息,以进行数据同步。
由前述描述可知,每个对象的离线字典文件中可能会对应多个版本定义信息,为了确定目标对象在操作时刻点对应的对象定义。在本实施例中,获取包含目标对象的定义信息的所有版本定义信息对应的日志序列号,并比较目标操作的日志序列号与所有版本定义信息对应的日志序列号,基于大于最近原则确定相应版本的定义信息,以获取目标对象的定义信息。
其中,基于大于最近原则是指,目标操作对应的日志序列号有可能大于多个版本的定义信息对应的日志序列号,则选取大于并与其中一个版本对应的定义信息的日志序列号的差值最小的离线字典文件作为目标版本定义信息。然后,从目标版本定义信息中,获取目标对象的定义信息
步骤1034:若所述目标操作为DDL操作,则获取DDL操作的操作类型。
其中,DDL的操作类型包括ALTER操作和DROP操作,当DDL的操作类型为ALTER操作时,执行步骤1035;当DDL的操作类型为DROP操作时,执行步骤1039。
步骤1035:当DDL操作为ALTER操作时,根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况。
具体地,基于检查点的日志序列号LSN1从前往后遍历离线字典文件的各个定义版本,当本次检查的定义版本的日志序列号小于日志序列号LSN1,且本次检查的定义版本不是最后一个定义版本,则本次检查的定义版本为无效版本,继续获取下一次检查的定义版本,直至定义版本的日志序列号大于日志序列号LSN1,以确定无效的定义版本,从而确定无效的定义版本在所述离线字典文件中的占比情况。
当离线字典文件所包含的定义版本的数目只有一个时,无需进行离线字典文件的清理。在优选的实施例后,判断离线字典文件所包含的定义版本的数目,当离线字典文件所包含的定义版本的数目为一个时,无需进行离线文件的清理;当离线字典文件所包含的定义版本的数目大于一个时,执行根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况的步骤。
由于LSN的值是递增的,离线字典文件中的定义版本又是采用的追加形式来维护,那么在统计无效版本占比时,只需要采用对字典文件从前往后遍历的方法来判定和统计,搜索到的对像定义版本对应的LSN小于当前同步检查点LSN的,并且该版本不是文件中的最后一个版本即可以视为无效版本,最后一个无效版本以后的版本都为有效版本。
步骤1036:当无效的定义版本在所述离线字典文件中的占比大于设定的占比值时,基于有效的定义版本为所述目标对象创建新的离线字典文件,以清理离线字典文件中无效的定义版本。
在本实施例中,当无效的定义版本在所述离线字典文件中的占比大于设定的占比值时,首先创建一个新的离线字典文件,新的离线字典文件以对像ID叠加特定后缀来命名,然后遍历该对像ID对应旧的离线字典文件,通过检查点的日志序列号LSN1过滤掉无效的版本,把有效的版本通过复制和追加的形式写入到新的离线字典文件中。最后用新的离线字典文件替换旧的离线字典文件,来实现清理字典文件中无效的对像版本。
在本实施例中,采用新建离线字典文件的方式相对于在原来离线字典文件上直接修改的方式,可以有效的预防在修改离线字典文件过程中同步服务异常中止带来损坏字典文件的风险。虽然在使用新建离线字典文件替换旧离线字典文件时,依然有故障的风险,但是这种方案可以保证旧的离线字典文件是完整的,当旧的离线字典文件不存在时,新的离线字典文件肯定是完整的,在异常启动时只需要检查这两个相对应的字典文件完整性,然后任取其一。
在本实施例中,在异常启动时,检查旧的离线字典文件和新的离线字典文件的完整性,若新的离线字典文件不完整,则暂时采用旧的离线字典文件进行同步,并根据实际情况及时清理旧的离线字典文件,得到新的离线字典文件。若新的离线字典文件完整,则采用新的离线字典文件进行同步,并删除旧的离线字典文件。
其中,占比值依据实际情况而定,在此不做具体限定。可以将占比情况的占比值与获取最新的检查点的时间间隔建立关联,当获取最新的检查点的时间间隔与占比值呈正比关系。
步骤1037:将基于所述ALTER操作修改后的定义信息和所述ALTER操作的日志序列号整合为下一版本定义信息。
步骤1038:将所述下一版本定义信息追加在新的离线字典文件的尾部。
步骤1039:当所述目标操作为DROP操作时,在所述离线字典文件的尾部添加删除标记,并将所述DROP操作的日志序列号与所述删除标记建立关联。
在实际应用场景下,当离线字典文件被打上删除标记以后并不能被马上删除,这是由于同步服务在异常重启以后,日志重新定位时,上次被删除对像的操作日志可能会被再次分析,所以删除字典文件必须要确保对像删除操作的LSN比检查点的LSN小。
在步骤1039之后还包括:判断所述DROP操作的日志序列号是否小于所述日志序列号LSN1;若小于,则删除所述离线字典文件;若不小于,则继续获取最新的检查点的日志序列号LSN1,直至所述DROP操作的日志序列号小于日志序列号LSN1时,才删除所述离线字典文件。
本发明的数据同步方法的基本步骤,可以进行如下解释:首先;数据库产生的每条日志记录中都LSN值,它代表该日志产生的顺序。而LSN的表现形式在不同数据库上各不相同,有物理LSN,它采用类似日志文件的编号+日志页号+日志页内偏移来构成,例如Postgresql,Sql server和DM6等;有逻辑LSN,它采用一个顺序递增的整数来构成,例如ORACLE和DM7等。不管是哪种形式,它们都遵循一个原则,就是日志LSN随着数据库的运行严格的递增。依靠LSN这种特性,数据同步过程中解析到DDL操作就可以给对像定义的每次修改使用LSN标记以区分产生的多个版本,然后在解析日志时,就可以根据日志中的LSN在对像定义的每个版本中找到它相对应的定义,从而才能正确的完成日志操作的解析还原。
其次,为每个对像采用独立的文件来保存它在数据同步过程中生成的多个版本,当某个对像的修改次数非常频繁时,字典文件就会不断的膨胀,如果不对字典文件中的无效的版本进行清理维护,除了造成磁盘空间上的浪费以外,同步服务启动时,字典文件中过多的版本也拖慢同步服务的启动速度,所以在源端数据同步系统中加入检查点调度线程,定时的更新同步检查点的LSN,然后使用该LSN来清理和维护字典文件,包括删除无效的字典文件和清理单个字典文件中失效的对像定义版本,可以使字典系统保持在一个高效的运行状态。
实施例2:
在本实施例中,以一具体实例简要说明前述方法的执行过程,举例如下:
源数据库顺序执行下面操作:
CREATE TABLE T1(C INT);
INSERT INTO T1(C)VALUES(1);
ALTER TABLE T1 ADD C1 INT;
INSERT INTO T1(C)VALUES(2);
ALTER TABLE T1 ADD C2 INT;
INSERT INTO T1(C)VALUES(3);
DROP TABLE T1;
上述操作在源端日志流中会生成下列事务:
事务编号 操作
TRX1(LSN=1) CREATE(T1),对像ID=1000
TRX2(LSN=2) INSERT(C=1)
TRX3(LSN=3) ALTER(ADD C1)
TRX4(LSN=4) INSERT(C=2)
TRX5(LSN=5) ALTER(ADD C2)
TRX6(LSN=6) INSERT(C=3)
TRX7(LSN=7) DROP(T1)
假设无效版本占比为50%便需要清理,字典维护过程如下:
(1)检查点调度线程定时从目的端获取同步检查点LSN1并负责清理带有删除标记的离线字典文件。
(2)日志分析线程解析到表对像T1的CREATE操作,创建一个离线字典文件1000.dct。
(3)解析完CREATE操作,把表T1的对像定义写入离线字典文件,离线字典文件的数据结构如图3所示。
(4)日志分析线程解析INSERT操作,此时该操作对应的LSN为2,在离线字典文件中取到LSN=1的版本进行日志解析。
(5)日志分析线程解析到表对像T1的ALTER操作,如果此时同步检查点的LSN为1,那么就会采用追加的形式来维护离线字典文件,离线字典文件的数据结构如图4所示。
(6)日志分析线程解析INSERT操作,此时该操作对应的LSN为4,在离线字典文件中取到LSN=3的版本进行日志解析。
(7)日志分析线程解析到表对像T1的ALTER操作,如果此时同步检查点的LSN为4,检查离线字典文件中失效的版本占比为50%,需要通过创建离线字典文件1000.dct_bak来删除失效的版本,离线字典文件的数据结构如图5所示,其中,位于图5左侧的是旧的离线字典文件的数据结构,位于图5右侧的是新的离线字典文件的数据结构。
(8)使用新的离线字典文件1000.dct_bak替换掉旧离线字典文件1000.dct,然后再追加当前ALTER操作修改以后形成的新的版本,离线字典文件的数据结构如图6所示。
(9)日志分析线程解析INSERT操作,此时该操作对应的LSN为6,在离线字典文件中取到LSN=5的版本进行日志解析。
(10)日志分析线程解析到表对像T1的DROP操作,此时需要在离线字典文件中打上删除标记,并标注删除操作的LSN为7。形成如下结构:
(11)检查点调度线程在获取到同步检查点的LSN大于7时,就会删除1000.dct的离线字典文件,完成表T1对像整个过程的字典维护管理。
实施例3:
请参阅图8,图8是本发明实施例提供的一种数据同步系统的结构示意图。本实施例的数据同步系统包括一个或多个处理器41以及存储器42。其中,图8中以一个处理器41为例。
处理器41和存储器42可以通过总线或者其他方式连接,图8中以通过总线连接为例。
存储器42作为一种基于数据同步方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,上述实施例的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理,实现前述实施例的方法。
其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(RandomAccessMemory,简写为RAM)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于日志解析的数据同步方法,其特征在于,所述数据同步方法包括:
日志分析线程在解析到DDL操作后,判断所述DDL操作的操作类型;
当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件;
获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件;
从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件;具体包括:当DDL操作为ALTER操作时,根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况;当无效的定义版本在所述离线字典文件中的占比大于设定的占比值时,基于有效的定义版本为所述目标对象创建新的离线字典文件,以清理离线字典文件中无效的定义版本;将基于所述ALTER操作修改后的定义信息和所述ALTER操作的日志序列号整合为下一版本定义信息;将所述下一版本定义信息追加在新的离线字典文件的尾部。
2.根据权利要求1所述的数据同步方法,其特征在于,所述当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件包括:
当所述DDL操作为创建操作时,获取所述创建操作的日志序列号和新创建的目标对象的定义信息;
将所述创建操作的日志序列号和所述目标对象的定义信息整合成第一版本定义信息,将所述第一版本定义信息存储于所述目标对象的离线字典文件中。
3.根据权利要求2所述的数据同步方法,其特征在于,所述获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件包括:
获取针对所述目标对象的目标操作;
判断所述目标操作的操作类型;
若所述目标操作为DDL操作,则判断DDL操作的操作类型;
当DDL操作为ALTER操作时,执行所述从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件的步骤,以管理所述离线字典文件。
4.根据权利要求1所述的数据同步方法,其特征在于,所述根据检查点的日志序列号LSN1确定无效的定义版本在所述离线字典文件中的占比情况包括:
基于检查点的日志序列号LSN1从前往后遍历离线字典文件的各个定义版本;
当本次检查的定义版本的日志序列号小于日志序列号LSN1,且本次检查的定义版本不是最后一个定义版本,则本次检查的定义版本为无效版本,继续获取下一次检查的定义版本,直至定义版本的日志序列号大于日志序列号LSN1,以确定无效的定义版本。
5.根据权利要求1所述的数据同步方法,其特征在于,所述获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件还包括:
当所述目标操作为DROP操作时,在所述离线字典文件的尾部添加删除标记,并将所述DROP操作的日志序列号与所述删除标记建立关联。
6.根据权利要求5所述数据同步方法,其特征在于,所述从目的端获取检查点的日志序列号LSN1,根据所述日志序列号LSN1清理所述离线字典文件包括:
判断所述DROP操作的日志序列号是否小于所述日志序列号LSN1;
若小于,则删除所述离线字典文件;
若不小于,则继续获取最新的检查点的日志序列号LSN1,直至所述DROP操作的日志序列号小于日志序列号LSN1时,才删除所述离线字典文件。
7.根据权利要求2所述的数据同步方法,其特征在于,所述当所述DDL操作为创建操作时,为新创建的目标对象建立包含对象定义信息的离线字典文件包括:
当所述DDL操作为创建操作时,获取新创建的目标对象的对象ID;
基于所述目标对象的对象ID为所述目标对象的离线字典文件命名。
8.根据权利要求1~7任一项所述的数据同步方法,其特征在于,所述获取针对所述目标对象的目标操作,根据所述目标操作管理所述离线字典文件包括:
获取针对所述目标对象的目标操作,判断所述目标操作的操作类型;
当所述目标操作为DML操作时,基于大于最近原则从离线字典文件中,获取与所述目标操作相匹配的定义信息,以进行数据同步。
9.一种数据同步系统,其特征在于,所述数据同步系统包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行如权利要求1~8任一项所述的数据同步方法。
CN202010472463.3A 2020-05-29 2020-05-29 一种基于日志解析的数据同步方法和数据同步系统 Active CN111930828B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010472463.3A CN111930828B (zh) 2020-05-29 2020-05-29 一种基于日志解析的数据同步方法和数据同步系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010472463.3A CN111930828B (zh) 2020-05-29 2020-05-29 一种基于日志解析的数据同步方法和数据同步系统

Publications (2)

Publication Number Publication Date
CN111930828A CN111930828A (zh) 2020-11-13
CN111930828B true CN111930828B (zh) 2024-01-19

Family

ID=73316437

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010472463.3A Active CN111930828B (zh) 2020-05-29 2020-05-29 一种基于日志解析的数据同步方法和数据同步系统

Country Status (1)

Country Link
CN (1) CN111930828B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559473B (zh) * 2020-12-11 2022-06-21 武汉达梦数据库股份有限公司 一种基于优先级的双路同步方法和同步系统
CN112559626B (zh) * 2020-12-11 2022-06-21 武汉达梦数据库股份有限公司 一种基于日志解析的ddl操作的同步方法和同步系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719225B1 (en) * 2012-01-17 2014-05-06 Amazon Technologies, Inc. System and method for log conflict detection and resolution in a data store
WO2015017398A1 (en) * 2013-08-01 2015-02-05 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for atomic storage operations
CN109189852A (zh) * 2018-08-01 2019-01-11 武汉达梦数据库有限公司 一种数据同步的方法及用于数据同步的装置
CN109241185A (zh) * 2018-08-27 2019-01-18 武汉达梦数据库有限公司 一种数据同步的方法以及数据同步装置
CN110554834A (zh) * 2018-06-01 2019-12-10 阿里巴巴集团控股有限公司 文件系统数据访问方法和文件系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7236993B2 (en) * 2003-04-16 2007-06-26 Oracle International Corporation On-demand multi-version denormalized data dictionary to support log-based applications
US10509773B2 (en) * 2004-06-10 2019-12-17 Oracle International Corporation DBFS with flashback archive
US8041691B2 (en) * 2007-07-30 2011-10-18 Oracle International Corporation Acquiring locks in wait mode in a deadlock free manner
US8924398B2 (en) * 2011-03-23 2014-12-30 Bmc Software, Inc. Log-based DDL generation
US10585873B2 (en) * 2017-05-08 2020-03-10 Sap Se Atomic processing of compound database transactions that modify a metadata entity

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719225B1 (en) * 2012-01-17 2014-05-06 Amazon Technologies, Inc. System and method for log conflict detection and resolution in a data store
WO2015017398A1 (en) * 2013-08-01 2015-02-05 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for atomic storage operations
CN110554834A (zh) * 2018-06-01 2019-12-10 阿里巴巴集团控股有限公司 文件系统数据访问方法和文件系统
CN109189852A (zh) * 2018-08-01 2019-01-11 武汉达梦数据库有限公司 一种数据同步的方法及用于数据同步的装置
CN109241185A (zh) * 2018-08-27 2019-01-18 武汉达梦数据库有限公司 一种数据同步的方法以及数据同步装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于PostgreSQL的强制访问控制的实现;刘欣等;《计算机工程》;全文 *

Also Published As

Publication number Publication date
CN111930828A (zh) 2020-11-13

Similar Documents

Publication Publication Date Title
CN109241185B (zh) 一种数据同步的方法以及数据同步装置
US11429641B2 (en) Copying data changes to a target database
US9881041B2 (en) Multiple RID spaces in a delta-store-based database to support long running transactions
JP4699516B2 (ja) 名前空間複製プログラム、名前空間複製装置、名前空間複製方法
CN109189852B (zh) 一种数据同步的方法及用于数据同步的装置
CN111930828B (zh) 一种基于日志解析的数据同步方法和数据同步系统
US20120203745A1 (en) System and method for range search over distributive storage systems
US20160041885A1 (en) Data Replicating System, Data Replicating Method, Node Device, Management Device and Computer Readable Medium
CN111858501B (zh) 一种基于日志解析同步的日志读取方法和数据同步系统
CN105574187A (zh) 一种异构数据库复制事务一致性保障方法及系统
CN114968966A (zh) 分布式元数据远程异步复制方法、装置和设备
CN113792094A (zh) 一种数据同步系统、方法、设备及介质
CN114741453A (zh) 数据同步的方法、系统及计算机可读存储介质
CN109446262B (zh) 一种数据汇聚方法及装置
CN111858504B (zh) 基于日志解析同步的操作合并执行方法和数据同步系统
CN111858503B (zh) 一种基于日志解析同步的并行执行方法和数据同步系统
CN107402841B (zh) 大规模分布式文件系统数据修复方法及设备
CN113420081A (zh) 数据校验方法、装置、电子设备及计算机存储介质
CN113190281B (zh) 一种基于rowid区间的初始化装载方法与装置
CN114356404A (zh) 接口文档生成方法、系统和计算机可读存储介质
CN112307118B (zh) 基于日志解析同步的保障数据一致性的方法和同步系统
CN112307117B (zh) 一种基于日志解析的同步方法和同步系统
CN112685431B (zh) 异步缓存方法、装置、系统、电子设备和存储介质
CN111930693B (zh) 一种基于日志解析同步的事务合并执行方法及装置
US11074141B2 (en) Database recovery using shared memory

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
CB02 Change of applicant information

Address after: 430000 16-19 / F, building C3, future technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan, Hubei Province

Applicant after: Wuhan dream database Co.,Ltd.

Address before: 430000 16-19 / F, building C3, future technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan, Hubei Province

Applicant before: WUHAN DAMENG DATABASE Co.,Ltd.

CB02 Change of applicant information
CB03 Change of inventor or designer information

Inventor after: Sun Feng

Inventor after: Peng Qingsong

Inventor after: Liu Qichun

Inventor before: Sun Feng

Inventor before: Fu Quan

Inventor before: Peng Qingsong

Inventor before: Liu Qichun

CB03 Change of inventor or designer information
GR01 Patent grant
GR01 Patent grant