CN112597247B - 一种数据同步方法及装置 - Google Patents
一种数据同步方法及装置 Download PDFInfo
- Publication number
- CN112597247B CN112597247B CN202011566795.4A CN202011566795A CN112597247B CN 112597247 B CN112597247 B CN 112597247B CN 202011566795 A CN202011566795 A CN 202011566795A CN 112597247 B CN112597247 B CN 112597247B
- Authority
- CN
- China
- Prior art keywords
- data
- preset
- value
- cache queue
- extracting
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据同步方法及装置,该方法可以包括:从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;将第二数据组中的数据抽取至第二缓存队列,并逐条识别第二缓存队列中的每条数据在预设字段的取值;当识别到任一条数据在预设字段的取值与上一条数据不同时,将第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
Description
技术领域
本申请涉及数据库领域,尤其涉及一种数据同步方法及装置。
背景技术
随着大数据的发展,将海量数据同步到数据库的需求越来越常见,为了方便过滤查询和使用,将源表中的数据同步至数据库的目的表时会选择使用分区表来将数据进行分区存储。相关技术中,分区存储数据时对源表中的数据形式有较多的限制,为分区同步数据带来不便。
发明内容
有鉴于此,本申请提供一种数据同步方法及装置。
为实现上述目的,本申请提供技术方案如下:
根据本申请的第一方面,提出了一种数据同步方法,包括:
从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;
将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值;
当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
根据本申请的第二方面,提出了一种数据同步装置,包括:
排序单元,用于从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;
识别单元,用于将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值;
同步单元,用于当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
根据本申请的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述实施例中任一所述的方法。
根据本申请的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述实施例中任一所述方法的步骤。
由以上技术方案可见,本申请采用缓存队列抽取数据后再进行分区,充分利用了缓存队列自身的数据结构,对源表中的数据是否为已经生成的固定历史数据没有要求,同时可以实现对流式数据或增量数据的同步;此外,本申请将数据按照预设字段的取值进行排序,使在预设字段具有相同取值的数据相邻排列,进而逐条识别排序后的数据,并将预设字段具有相同取值的数据批量同步至对应分区,实现了根据数据内容动态分区存储数据,为后续对数据内容的查询与使用提供便利;同时,将预设字段具有相同取值的数据批量同步至对应分区,提升了数据的同步效率,实现了将分区相同的数据快速写入对应分区。
附图说明
图1是本申请一示例性实施例示出的一种数据同步方法的流程图;
图2是本申请一示例性实施例示出的一种具体实施例的流程图;
图3是本申请另一示例性实施例示出的一种具体实施例的流程图;
图4是本申请的一示例性实施例的电子设备的示意结构图;
图5是本申请一示例性实施例示出的一种数据同步装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1为本申请一示例性实施例示出的一种数据同步方法的流程图,可以包括以下步骤:
步骤102,从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列。
在一实施例中,当要将源表中的数据同步至目的表中时,从源表中抽取第一数据组中的数据至第一缓存队列,源表中的数据形式可以为批式数据,即已经产生并固定的历史数据,也可以为流式数据,即随时间延续而无限增长的动态数据集合;同样的,从源表中抽取的第一数据组的数据形式可以为全量数据或增量数据,全量数据为源表中已经存在的全部数据,增量数据为上次抽取之后新增加的数据,本申请对源表和抽取到第一数据组中的数据不作形式上的限制。
在本申请中,可以将数据所包含的字段中的任一类型的字段确定为预设字段,例如,该预设字段可以为:代表日期的字段、代表时刻的字段、代表地区的字段、代表数据类型的字段。当然,该举例仅是示意性的,具体将数据所包含的字段中的哪一类型的字段确定为预设字段,可由本领域技术人员根据实际需求确定。应当理解的是,预设字段的取值指的是:能够表征预设字段含义的字段值。举例而言,假设预设字段为“代表日期的字段”,那么该取值即为“能够表征某一具体日期的字段值”,例如,该预设字段的取值可以为“20.11.11”,表征日期为20年11月11日;假设预设字段为“代表类型的字段”,那么该取值即为“能够表征某一具体类型的字段值”,例如,该预设字段的取值可以为“doc.”,表征数据为文本类型。
可选的,将源表中的数据同步至目的表的对应分区,具体而言,既可以将源表中的数据同步至相同目的表中对应的不同分区,也可以将源表中的数据同步至不同目的表中对应的不同分区,例如,当存在同一张目的表,且目的表中存在10个对应分区时,本申请可以将上述数据同步至同一张目的表中的10个分区;当存在多张目的表且每张目的表中存在至少一个分区时,本申请可以将数据同步至上述多张目的表中分别对应的不同分区内,值得说明的是,上述多张目的表各自的分区可以相同也可以不同,换言之,第一张目的表中对应的分区可以为A、B、C,第二张目的表中的分区可以为A、B、C,也可以为A、B、D或D、E、F,其他目的表同理,如果分区相同,相同分区中的数据也相同,反之不同,本申请对目的表的数量和目的表和对应分区的具体对应关系不作限制。
可选的,第一缓存队列可以为一种消息队列,消息队列是一种在数据传递过程中保存数据的容器,是一种先进先出的数据结构,读取数据时按照队列中数据的顺序依次读取,不会破坏消息队列中数据原本的顺序;类似地,下文中的第二缓存队列也可以为消息队列。第一缓存队列的容量,即第一缓存队列可容纳的数据条数或字节数,可以根据具体情况灵活调整,本申请对此不作限制。根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;每条数据均可分为若干个字段,预设字段可以为数据中任一字段,由于预设字段对应目的分区表中的分区字段,因此可以根据目的表中的分区字段对预设字段进行选择。
举例而言,如果将源表中的数据按照时间分区同步至目的表中,预设字段可以选择“time”,并根据第一数据组中每条数据“time”字段的取值将第一数据组中的数据排序得到第二数据组,使第二数据组中“time”字段取值相同的数据相邻排列。在本实施例中,缓存队列分批抽取源表中的数据,由于缓存队列自身特有的数据结构,不会对源表中的数据形式造成限制;具体言之,采用缓存队列分批抽取数据时,源表中的数据是已经产生的历史固定数据或是仍在实时产生的动态数据不会对后续的同步过程造成影响,因此通过采用缓存队列,可以实现对流式数据与增量数据等实时动态产生数据的同步;根据在预设字段的取值调整第一数据组中的各条数据的排列顺序,使在预设字段取值相同的数据相邻排列,便于依次识别数据并将在预设字段取值相同的数据同步至对应分区。
步骤104,将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值。
在一实施例中,将第二数据组中经过排序的数据抽取至第二缓存队列,第二缓存队列可容纳的数据条数或字节数,可以根据具体情况灵活调整,本申请对此不作限制。逐条识别第二缓存队列中每条数据在所述预设字段的取值,即按照第二缓存队列中数据的顺序依次识别每条数据在预设字段的取值。
步骤106,当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
在一实施例中,由于第二缓存队列中的第二数据组的数据经过了排序,因此第二缓存队列中在预设字段取值相同的数据相邻排列,当识别到任一条数据在预设字段与上一条数据不同时,说明该任一条数据之前的所有数据在预设字段的取值相同,可以划分在同一分区内,因此将位于该任一条数据之前的所有数据批量同步至目的表中对应的分区,再继续依次识别排在任一条数据后面的数据,重复之前的处理,直到识别至最后一条数据;如果直到识别到最后一条数据,每条数据与上一条数据在预设字段的取值均相同,则说明全部数据在预设字段的取值相同,应该划分到同一分区,可以将全部数据批量同步至同一分区中。在本实施例中,逐条识别第二缓存队列中的数据,并将在预设字段取值相同的数据批量同步至对应分区,实现了根据数据内容动态分区存储数据,为后续对数据内容的查询和使用提供便利;将预设字段具有相同取值的数据批量同步至对应分区,提升了数据的同步效率,实现了将分区相同的数据快速写入对应分区。
在一实施例中,当对应的分区已存在时,将第二缓存队列中位于上述任一条数据之前的所有数据批量同步至目的表中已存在的对应的分区;当对应的分区不存在时,创建新分区,并将任一条数据之前的所有数据批量同步至创建的新分区。由于缓存队列的容量有限,源表中的数据量可能远远超过于缓存队列的容量,因此采用缓存队列抽取时,需要分多次进行才能实现对源表中全部数据的同步,在将第二缓存队列中位于任一条数据之前的所有数据批量同步至目的表中已存在的对应的分区时,对应的分区可能在之前同步数据时已经创建,此时将上述数据直接同步至对应的分区即可,当对应的分区尚未创建时,可以实时创建新分区,将上述数据同步至对应的新分区中。在本实施例中,不需要在数据同步之前提前预知分区的数量,也不需要提前创建对应的分区,可以根据数据的内容实时创建新分区,不会产生没有数据的空分区,实现了根据数据内容动态分区存储数据的同时,避免产生不必要的分区,节省系统资源。
在一实施例中,从源表中抽取第一数据组中的数据至第一缓存队列的过程可以在源表抽取线程中进行,根据在预设字段的取值调整第一数据组中的各条数据的排列顺序以得到第二数据组,并将第二数据组中的数据抽取至第二缓存队列的过程可以在输出预处理线程中进行,预处理线程可以分批获取第一数据组中的各条数据并排序,每次获取一批数据,每批获取的数据量不大于第一缓存队列的容量;同样的,逐条识别第二缓存队列中每条数据在预设字段的取值,并根据预设字段的取值将数据同步至对应分区可以在目的表输出线程中进行,目的表输出线程可以分批从第二缓存队列中获取数据并逐条识别获取数据的预设字段的取值,每次获取一批数据,每批获取的数据量不大于第二缓存队列的容量。在本实施例中,预处理线程与目的表输出线程通过分批获取数据,并且每批获取的数据量可以根据具体情况适应性调整,可以根据不同的系统性能指定不同的值,匹配当前系统的具体状态,维持系统同步数据时的稳定性。
在一实施例中,当检测到预设反压条件被满足时,降低抽取第一数据组中的数据至第一缓存队列的速度和/或降低抽取所述第二数据组中的数据至第二缓存队列的速度。当预设反压条件被满足时,说明系统对数据的处理能力降低或目的表所在的数据库系统对数据的处理能力降低,继续以原来的速度处理数据可能会造成缓存队列中的数据积压,导致对系统资源不合理的占用,此时降低抽取第一数据组中的数据至第一缓存队列的速度和/或降低抽取所述第二数据组中的数据至第二缓存队列的速度,可以避免缓存队列无限制的占用系统内存等资源,避免对系统资源的浪费,提升系统整体的性能。
在一实施例中,预设反压条件可以包括:第一预设反压条件和第二预设反压条件;当检测到任一缓存队列的状态满足第一预设反压条件时,降低将数据抽取至任一缓存队列的速度;当检测到系统的状态满足第二预设反压条件时,降低抽取第一数据组中的数据至第一缓存队列的速度,以及降低抽取第二数据组中的数据至第二缓存队列的速度。是否满足第一预设反压条件可以代表任一缓存队列是否存在数据积压的风险,第一预设反压条件可以包括以下至少之一:任一缓存队列中数据条数不小于第一预设值、任一缓存队列中数据字节数不小于第二预设值;第一预设值与第二预设值可以根据具体情况进行调整,本申请对此不作限制。当第一预设反压条件被满足时,说明任一缓存队列的数据可能会积压,因此降低此缓存队列抽取数据的速度。
在一实施例中,第二预设反压条件对应于系统的整体状态,第二预设反压条件可以包括以下至少之一:系统内存的占用量不小于第一预设阈值、系统内存的剩余量不大于第二预设阈值、系统内存的占用比例不小于第一预设比例、系统内存的剩余比例不大于第二预设比例;第一预设阈值、第二预设阈值、第一预设比例和第二预设比例可以根据实际情况进行调整,本申请对此不作限制。满足第二预设反压条件可以代表系统处理数据的能力可能会下降,进而导致缓存队列的数据积压,此时降低抽取数据至所有缓存队列的速度,可以更快地调整系统整体的状态,避免由于数据积压导致的对系统内存不必要的占用。
在一实施例中,还可以通过对源表中的数据进行分片,将源表中的数据拆分成多份;创建与各份数据一一对应的多个并行子任务;其中,每个子任务用于执行上述方法,以将相应份的数据同步至目的表。由于源表往往存在大量的数据,可以通过分片拆分,多个同步子任务可以并行处理,而无需等待上一份数据同步完成后再开始下一份数据的同步过程,提升了数据同步的效率。
由上述实施例可知,本申请通过缓存队列抽取数据,并且将数据按照预设字段的取值进行排序,使在预设字段具有相同取值的数据相邻排列,进而逐条识别排序后的数据并将预设字段具有相同取值的数据批量同步至对应分区。实现了根据数据内容动态分区存储数据,将预设字段具有相同取值的数据批量同步至对应分区,提升了数据的同步效率,并且为后续对数据内容的查询与使用提供便利。与此同时,通过反压、分批获取数据等技术手段,可以根据实际情况适时调整系统的状态,维持系统同步数据时的稳定性,既可以避免对系统资源无限制的占用,也可以合理利用空闲的系统资源,充分发挥系统最佳的性能。
参见图2,图2为本申请一具体实施例对应的流程图,下面结合图2对本申请具体实施例详细进行描述:
步骤202,抽取第一数据组至第一缓存队列;在本领域中,本步骤可以称为源表抽取,可以在源表抽取线程中进行;从源表中抽取第一数据组至第一缓存队列,第一缓存队列的容量为T,T可以代表数据条数或者字节数,本次抽取过程对源表的数据是否排序没有要求,第一缓存队列中的数据可以如下表1所示:
数据顺序 | 数据内容 |
1 | 1a 2020-09-01 |
2 | 2b 2020-09-02 |
3 | 3c 2020-09-03 |
4 | 4d 2020-09-04 |
5 | 5e 2020-09-01 |
6 | 6f 2020-09-02 |
7 | 7g 2020-09-03 |
8 | 8h 2020-09-04 |
9 | 9i 2020-09-02 |
10 | 10j 2020-09-05 |
…… | …… |
表1
由上表可见,上述数据中对应的“time”字段,即日期(年-月-日)的取值并不是连续的,上述步骤不对源数据进行处理,直接抽取至第一缓存队列中。
另外,可以如步骤202a所示,检测第一缓存队列是否满足第一预设反压条件,第一预设反压条件可以包括以下至少之一:缓存队列中数据条数不小于第一预设值、缓存队列中数据字节数不小于第二预设值;例如,第一预设值可以设置为3000条数据,当第一缓存队列中的数据条数不小于3000条时满足第一预设反压条件;同样的,第二预设值可以为500K字节,当第一缓存队列中的数据字节数不小于500K字节时满足第一预设反压条件;或者,当第一缓存队列中的数据条数不小于3000条的同时也不小于500K字节时,满足第一预设反压条件;当第一缓存队列满足第一预设反压条件时,说明第一缓存队列中的数据可能会积压,因此进行步骤202b,降低第一缓存队列抽取数据的速度,第一预设值与第二预设值可以根据具体情况进行调整,本申请对此不作限制。在降低第一缓存队列抽取数据的速度后,可以继续检测第一缓存队列是否满足第一预设反压条件,如果仍然满足第一预设反压条件,则继续降低上述抽取速度,如果检测到第一缓存队列的状态不满足第一预设反压条件,可以提升上述抽取速度。此外,可以为系统设定预设检测周期,例如每十秒检测一次是否满足预设反压条件,如果不满足上述预设反压条件则等待下次检测,如果满足上述预设反压条件则按照上述的方法处理。
步骤204,调整第一数据组中的各条数据的排列顺序以得到第二数据组;根据在“time”字段,即预设字段的取值调整第一数据组中的各条数据的排列顺序以得到第二数据组,经过排序得到的第二数据组中的数据可以如下表2所示:
数据顺序 | 数据内容 |
1 | 1a 2020-09-01 |
2 | 5e 2020-09-01 |
3 | 2b 2020-09-02 |
4 | 6f 2020-09-02 |
5 | 9i 2020-09-02 |
6 | 3c 2020-09-03 |
7 | 7g 2020-09-03 |
8 | 4d 2020-09-04 |
9 | 8h 2020-09-04 |
10 | 10j 2020-09-05 |
…… | …… |
表2
如表2所示,经过上述的排序过程,使第二数据组中在“time”字段(年-月-日)具有相同取值的所有数据相邻排列;在实际应用中,上述步骤可以在输出预处理线程中进行,并且,调整第一数据组中各条数据的排列顺序时,可以分批消费(获取)需要排序的数据,直到第一数据组中的各条数据排序完成。
步骤206,抽取第二数据组至第二缓存队列,第二缓存队列的容量为S,S可以代表数据条数或者字节数。
另外,步骤202a相似的,如步骤206a所示,检测第二缓存队列是否满足第一预设反压条件,第一预设反压条件可以包括以下至少之一:缓存队列中数据条数不小于第一预设值、缓存队列中数据字节数不小于第二预设值;例如,第一预设值可以设置为3000条数据,当第二缓存队列中的数据条数不小于3000条时满足第一预设反压条件;同样的,第二预设值可以为500K字节,当第二缓存队列中的数据字节数不小于500K字节时满足第一预设反压条件;或者,当第二缓存队列中的数据条数不小于3000条的同时也不小于500K字节时,满足第一预设反压条件;当第二缓存队列满足第一预设反压条件时,说明第二缓存队列中的数据可能会积压,因此进行步骤206b,降低第二缓存队列抽取数据的速度,第一预设值与第二预设值可以根据具体情况进行调整,本申请对此不作限制。在降低第二缓存队列抽取数据的速度后,可以继续检测第二缓存队列是否满足第一预设反压条件,如果仍然满足第一预设反压条件,则继续降低上述抽取速度,如果检测到第二缓存队列的状态不满足第一预设反压条件,可以提升上述抽取速度。此外,可以为系统设定预设检测周期,例如每十秒检测一次是否满足预设反压条件,如果不满足上述预设反压条件则等待下次检测,如果满足上述预设反压条件则按照上述的方法处理。
步骤208,逐条识别每条数据在预设字段的取值;参见表2,从第一条数据开始识别,当识别到第三条数据时,第三条数据的“time”字段的取值为“2020-09-02”与第二条数据“time”字段的取值“2020-09-01”不同,说明第三条数据在“time”字段的取值发生了变化,与第一、第二条数据不属于同一分区,同时,第一、第二条数据应当属于同一分区。再继续依次识别第三条之后的数据,重复之前的处理,直至识别到最后一条数据;此外,在实际应用中,上述步骤可以在目的表输出线程中进行,并且,在逐条识别第二缓存队列中的数据时,可以分批消费(获取)第二缓存队列中的数据,直至第二缓存队列中的数据全部读取完成。
步骤210,判断是否存在对应分区;由上一步骤可知,第一、第二条数据在“time”字段的取值相同,应当属于同一分区;判断第一、第二条数据对应的分区“2020-09-01”是否存在,如果存在,进行步骤212a,将第一、第二条数据批量写入对应分区;如果不存在,则进行步骤212b,创建新分区“2020-09-01”,并将第一、第二条数据批量写入新分区“2020-09-01”,与步骤208相同的是,在实际应用中,此步骤可以在目的表输出线程中进行。
值得说明的是,在上述步骤之外,还可以判断系统是否满足第二预设反压条件,第二预设反压条件可以包括以下至少之一:系统内存的占用量不小于第一预设阈值、系统内存的剩余量不大于第二预设阈值、系统内存的占用比例不小于第一预设比例、系统内存的剩余比例不大于第二预设比例;例如,系统的总内存为10GB,当系统内存的占用量不小于7GB,或系统内存的剩余量不足3GB时,判定系统满足第二预设反压条件;或者,当系统内存占用比例不小于70%时,或系统内存的剩余比例不足30%时,判定系统满足第二预设反压条件;又或当系统状态同时满足上述条件中的任意几个时,判定系统满足第二预设反压条件;其中,第一预设阈值、第二预设阈值、第一预设比例和第二预设比例可以根据实际情况进行调整,本申请对此不作限制。当系统满足第二预设反压条件时,降低抽取第一数据组中的数据至第一缓存队列的速度,并降低抽取所述第二数据组中的数据至第二缓存队列的速度,在降低上述抽取速度后,可以继续检测系统状态是否满足第二预设反压条件,如果仍然满足第二预设反压条件,则继续降低上述抽取速度,如果检测到系统状态不满足第二预设反压条件,可以提升上述抽取速度。此外,除了数据处理时实时动态检测外,还可以为系统设定预设检测周期,例如每十秒检测一次是否满足预设反压条件,如果不满足上述预设反压条件则等待下次检测,如果满足上述预设反压条件则按照上述的方法处理。
由上述步骤可知,本申请通过缓存队列抽取数据,并且将数据按照预设字段的取值进行排序,使在预设字段具有相同取值的数据相邻排列,进而逐条识别排序后的数据并将预设字段具有相同取值的数据批量同步至对应分区。实现了根据数据内容动态分区存储数据,为后续对数据内容的查询与使用提供便利;将预设字段具有相同取值的数据批量同步至对应分区,提升了数据同步效率,实现了将属于同一分区的数据快速写入对应分区。与此同时,通过设置预设反压条件,可以根据实际情况适时调整系统的状态,避免缓存队列中的数据大量积压,维持系统同步数据时的稳定性,既可以避免对系统资源无限制的占用,也可以合理利用空闲的系统资源,充分发挥系统最佳的性能。
图3为本申请另一示例性实施例示出的一种具体实施例的流程图,如图3所示:
步骤302,对源表中的数据分片,将源表中的数据拆分成多份;例如,可以根据主键id字段的取值通过分片拆分算法,例如将源表中全部数据通过WHERE过滤条件拆分成多份数据,值得说明的是,可以采用任意一种分片拆分算法,本申请对此不作限制。
步骤304,创建与各份数据一一对应的子任务;源表中的全部数据对应与一个同步任务,将源表中的数据分片处理后,源表中的数据被多份数据,创建对应于每一份数据的多个子任务,每一份子任务独立进行数据同步过程。
步骤306,并行处理每一个子任务;每一个子任务对应该份数据的同步过程,多个子任务可以同时进行数据的同步,每一个子任务进行数据同步的具体步骤参见图2对应的具体实施方式。
由上述步骤可知,通过将源表中的数据进行分片,将源表中全部数据对应的一个同步任务拆分成多个子任务并行处理,可以提升数据同步的效率;每一份子任务独立进行数据同步过程,在任一个或几个数据同步过程出现错误而中断时,不会影响剩余子任务的数据同步过程,可以提高系统同步数据过程的稳定性。与上述方法实施例相对应,本说明书还提供了一种装置的实施例。
图4示出了根据本申请的一示例性实施例的电子设备的示意结构图。请参考图4,在硬件层面,该电子设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行,在逻辑层面上形成解决数据同步问题的装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图5,在软件实施方式中,该数据同步装置可以包括排序单元501、识别单元502、同步单元503。其中:
排序单元501,用于从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;
识别单元502,用于将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值;
同步单元503,用于当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
上述装置还可以包括:
检测单元504,用于检测预设反压条件是否被满足,当检测到预设反压条件被满足时,降低抽取第一数据组中的数据至第一缓存队列的速度和/或降低抽取所述第二数据组中的数据至第二缓存队列的速度。
可选的,所述预设反压条件包括:第一预设反压条件和第二预设反压条件;所述当检测到预设反压条件被满足时,降低所述抽取第一数据组中的数据至第一缓存队列的速度和/或降低所述抽取所述第二数据组中的数据至第二缓存队列的速度。
可选的,当检测到任一缓存队列的状态满足第一预设反压条件时,降低将数据抽取至所述任一缓存队列的速度。
可选的,当检测到系统的状态满足第二预设反压条件时,降低抽取第一数据组中的数据至第一缓存队列的速度,以及降低抽取所述第二数据组中的数据至第二缓存队列的速度。
可选的,所述第一预设反压条件包括以下至少之一:所述任一缓存队列中数据条数不小于第一预设值;所述任一缓存队列中数据字节数不小于第二预设值。
可选的,所述第二预设反压条件包括以下至少之一:系统内存的占用量不小于第一预设阈值;系统内存的剩余量不大于第二预设阈值;系统内存的占用比例不小于第一预设比例;系统内存的剩余比例不大于第二预设比例。
上述装置还可以包括:创建单元505,用于创建新分区,当对应的分区不存在时,创建新分区,并将所述任一条数据之前的所有数据批量同步至创建的所述新分区。
当对应的分区已存在时,则不需要创建新分区,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中已存在的对应的分区。
上述装置还可以包括:分片单元506,用于对源表中的数据进行分片,将源表中的数据拆分成多份;创建与各份数据一一对应的多个并行子任务;其中,每个子任务用于执行上述方法,以将相应份的数据同步至目的表。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由数据同步装置的处理器执行以实现如上述实施例中任一所述的方法。
其中,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等,本申请并不对此进行限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种数据同步方法,其特征在于,包括:
从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;
将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值;
当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
2.根据权利要求1所述的方法,其特征在于,还包括:
当检测到预设反压条件被满足时,降低抽取第一数据组中的数据至第一缓存队列的速度和/或降低抽取所述第二数据组中的数据至第二缓存队列的速度。
3.根据权利要求2所述的方法,其特征在于,所述预设反压条件包括:第一预设反压条件和第二预设反压条件;所述当检测到预设反压条件被满足时,降低所述抽取第一数据组中的数据至第一缓存队列的速度和/或降低所述抽取所述第二数据组中的数据至第二缓存队列的速度,包括:
当检测到任一缓存队列的状态满足第一预设反压条件时,降低将数据抽取至所述任一缓存队列的速度;
当检测到系统的状态满足第二预设反压条件时,降低抽取第一数据组中的数据至第一缓存队列的速度,以及降低抽取所述第二数据组中的数据至第二缓存队列的速度。
4.根据权利要求3所述的方法,其特征在于,所述第一预设反压条件包括以下至少之一:
所述任一缓存队列中数据条数不小于第一预设值;
所述任一缓存队列中数据字节数不小于第二预设值。
5.根据权利要求3所述的方法,其特征在于,所述第二预设反压条件包括以下至少之一:
系统内存的占用量不小于第一预设阈值;
系统内存的剩余量不大于第二预设阈值;
系统内存的占用比例不小于第一预设比例;
系统内存的剩余比例不大于第二预设比例。
6.根据权利要求1所述的方法,其特征在于,所述将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区,包括:
当对应的分区已存在时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中已存在的对应的分区;
当对应的分区不存在时,创建新分区,并将所述任一条数据之前的所有数据批量同步至创建的所述新分区。
7.根据权利要求1-6中任一项所述的方法,其特征在于,还包括:
通过对源表中的数据进行分片,将所述源表中的数据拆分成多份;
创建与各份数据一一对应的多个并行子任务;其中,每个子任务用于执行如权利要求1-6中任一项所述的方法,以将相应份的数据同步至所述目的表。
8.一种数据同步装置,其特征在于,包括:
排序单元,用于从源表中抽取第一数据组中的数据至第一缓存队列,并根据在预设字段的取值调整所述第一数据组中的各条数据的排列顺序以得到第二数据组,使第二数据组中在所述预设字段具有相同取值的所有数据相邻排列;
识别单元,用于将所述第二数据组中的数据抽取至第二缓存队列,并逐条识别所述第二缓存队列中的每条数据在所述预设字段的取值;
同步单元,用于当识别到任一条数据在所述预设字段的取值与上一条数据不同时,将所述第二缓存队列中位于所述任一条数据之前的所有数据批量同步至目的表中对应的分区。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011566795.4A CN112597247B (zh) | 2020-12-25 | 2020-12-25 | 一种数据同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011566795.4A CN112597247B (zh) | 2020-12-25 | 2020-12-25 | 一种数据同步方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112597247A CN112597247A (zh) | 2021-04-02 |
CN112597247B true CN112597247B (zh) | 2022-05-31 |
Family
ID=75202248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011566795.4A Active CN112597247B (zh) | 2020-12-25 | 2020-12-25 | 一种数据同步方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112597247B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108009261A (zh) * | 2017-12-12 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据同步方法、装置及电子设备 |
CN109739929A (zh) * | 2018-12-18 | 2019-05-10 | 中国人民财产保险股份有限公司 | 数据同步方法、装置及系统 |
CN110297866A (zh) * | 2019-05-20 | 2019-10-01 | 平安普惠企业管理有限公司 | 基于日志分析的数据同步方法及数据同步装置 |
CN110334152A (zh) * | 2019-06-28 | 2019-10-15 | 浙江吉利控股集团有限公司 | 一种数据同步方法、装置及服务器 |
CN110597890A (zh) * | 2018-05-25 | 2019-12-20 | 杭州海康威视数字技术股份有限公司 | 数据采集系统、方法、节点设备及存储介质 |
CN111897878A (zh) * | 2020-08-25 | 2020-11-06 | 中国工商银行股份有限公司 | 主辅数据同步方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7249229B2 (en) * | 2004-03-31 | 2007-07-24 | Gemini Mobile Technologies, Inc. | Synchronous message queues |
-
2020
- 2020-12-25 CN CN202011566795.4A patent/CN112597247B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108009261A (zh) * | 2017-12-12 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据同步方法、装置及电子设备 |
CN110597890A (zh) * | 2018-05-25 | 2019-12-20 | 杭州海康威视数字技术股份有限公司 | 数据采集系统、方法、节点设备及存储介质 |
CN109739929A (zh) * | 2018-12-18 | 2019-05-10 | 中国人民财产保险股份有限公司 | 数据同步方法、装置及系统 |
CN110297866A (zh) * | 2019-05-20 | 2019-10-01 | 平安普惠企业管理有限公司 | 基于日志分析的数据同步方法及数据同步装置 |
CN110334152A (zh) * | 2019-06-28 | 2019-10-15 | 浙江吉利控股集团有限公司 | 一种数据同步方法、装置及服务器 |
CN111897878A (zh) * | 2020-08-25 | 2020-11-06 | 中国工商银行股份有限公司 | 主辅数据同步方法及系统 |
Non-Patent Citations (1)
Title |
---|
一种基于小数据同步写的回写I/O调度器;刘星等;《软件学报》;20170112;正文第1969-1979页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112597247A (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8949189B2 (en) | Managing storage of individually accessible data units | |
CN102314336B (zh) | 一种数据处理方法和系统 | |
AU2010347763B2 (en) | Managing storage of individually accessible data units | |
WO2017096892A1 (zh) | 索引构建方法、查询方法及对应装置、设备、计算机存储介质 | |
CN111291403B (zh) | 基于分布式集群的数据脱敏装置 | |
CN107992492B (zh) | 一种数据区块的存储方法、读取方法、其装置及区块链 | |
CN111274021B (zh) | 一种gpu集群任务调度分配方法 | |
CN108733790B (zh) | 数据排序方法、装置、服务器和存储介质 | |
CN110866006A (zh) | 过期数据的归档方法和装置 | |
CN110555448B (zh) | 一种细分派件区域的方法和系统 | |
CN112416972A (zh) | 实时数据流处理方法、装置、设备、及可读存储介质 | |
US20180173693A1 (en) | Methods and apparatus to identify a count of n-grams appearing in a corpus | |
JP2022524177A (ja) | トランザクションの並行実行方法、装置及び記憶媒体 | |
CN112597247B (zh) | 一种数据同步方法及装置 | |
CN111694505B (zh) | 数据存储管理方法、装置和计算机可读存储介质 | |
CN116881051B (zh) | 一种数据备份与恢复方法、装置、电子设备和存储介质 | |
US20160124841A1 (en) | Information processing system and data processing method | |
CN114244536A (zh) | 一种区块链的业务处理方法、装置、设备及存储介质 | |
CN113806102B (zh) | 消息队列处理方法、装置及计算设备 | |
EP1315100A1 (en) | Data compiling method | |
CN109508244B (zh) | 数据处理方法及计算机可读介质 | |
CN105512313A (zh) | 一种增量式数据处理的方法和装置 | |
CN113419954B (zh) | 云操作系统的自动化用例的执行方法、系统及相关组件 | |
CN114356515A (zh) | 一种数据转换任务的调度方法 | |
CN113992597A (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 |