CN107515874A - 一种分布式非关系型数据库中同步增量数据的方法与设备 - Google Patents
一种分布式非关系型数据库中同步增量数据的方法与设备 Download PDFInfo
- Publication number
- CN107515874A CN107515874A CN201610429643.7A CN201610429643A CN107515874A CN 107515874 A CN107515874 A CN 107515874A CN 201610429643 A CN201610429643 A CN 201610429643A CN 107515874 A CN107515874 A CN 107515874A
- Authority
- CN
- China
- Prior art keywords
- data
- burst
- tables
- bursts
- incremental data
- 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.)
- Granted
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种用于分布式非关系型数据库中同步增量数据的方法与设备。具体地,根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理。与现有技术相比,本申请根据用户指定了目标时间范围的配置信息确定分布式非关系型数据库中待增量同步的对应数据表,进而根据目标时间范围及分片的位点信息同步处理数据表对应的分片,从而在同步后即可关闭或周期性启动同步程序,避免程序一直开启,节约资源。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种用于分布式非关系型数据库中同步增量数据的技术。
背景技术
随着互联网的发展,在线业务量激增,在通过应用或平台系统处理业务的过程中涉及大量在线数据分析,需要从数据库中获取最新的数据,而全量数据的定期同步获取会浪费大量时间和资源,因此现有技术会在每次进行数据同步时,通过获取分布式非关系型数据库中独立读写的各个数据分片中与操作对应的日志记录的方式,例如获取分片中的commit log,将源系统中新产生的增量部分的数据同步到目的系统中。
然而,现有技术中往往运行一个常驻程序,不断地读取每个分片内已产生的增量数据并轮询是否有新的增量数据产生,然后提供给用户,同时会定期地查看是否有新的分片产生,因为没有实现基于时间范围同步的场景设置,因此同步程序必须不断执行,且因为分布式非关系型数据库中的独立读写的数据分片之间会因为时钟不同步或受到分片的合并与分裂等行为的影响导致所同步增量数据漏读或其中所对应的操作顺序错误。
发明内容
本申请的一个目的是提供一种用于分布式非关系型数据库中同步增量数据的方法与设备,用以解决分布式非关系型数据库同步增量数据时需要程序常驻运行而不支持根据时间范围导出增量数据的问题。
为实现上述目的,根据本申请的一个方面,本申请提供了一种用于分布式非关系型数据库中同步增量数据的方法,该方法解决了分布式非关系型数据库同步增量数据时需要程序常驻运行而不支持根据时间范围导出增量数据的问题,该方法包括:
根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;
根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
为实现上述目的,根据本申请的另一个方面,本申请提供了一种用于分布式非关系型数据库中同步增量数据的设备,该设备解决了分布式非关系型数据库同步增量数据时需要程序常驻运行而不支持根据时间范围导出增量数据的问题,该设备包括:
数据表确定装置,用于根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;
同步装置,用于根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
与现有技术相比,本申请根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步,从而在将用户指定的目标时间范围内的增量数据同步后即可关闭或周期性启动同步程序,避免程序一直开启,节约资源,同步时间和周期可灵活调整。
进一步地,在增量数据的元数据中记录写入的时间相关信息以及在分片之间调度的顺序标记,从而确定增量数据对应操作的顺序,避免乱序导致数据分析出错。
进一步地,通过将用于确定增量数据起始位置的位点信息保存在对应的系统状态表中,其中包括系统所有分片在相同时刻的位点信息,从而将所有数据分片的同步确定在统一时间点上,方便业务方按照时间筛选数据,提升数据分析效率。
进一步地,将所述数据表的增量数据导出至对应临时表以供后续处理,其中,若导出过程出错,清空所述临时表并重新导出所述数据表的增量数据,从而避免数据被重复导出,简化处理逻辑。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于分布式非关系型数据库中同步增量数据的方法流程图;
图2示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的方法流程图;
图3示出根据本申请一个优选实施例的步骤S2的方法流程图;
图4示出根据本申请另一个优选实施例的步骤S21的方法流程图;
图5示出根据本申请另一个优选实施例的步骤S22的方法流程图;
图6示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的设备示意图;
图7示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的设备示意图;
图8示出根据本申请一个优选实施例的同步装置的设备示意图;
图9示出根据本申请另一个优选实施例的同步处理单元的设备示意图;
图10示出根据本申请另一个优选实施例的检测单元的设备示意图;
图11示出根据本申请另一个优选实施例的同步增量数据的流程图;
图12示出根据本申请另一个优选实施例的同步一个数据分片增量数据的流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种用于分布式非关系型数据库中同步增量数据的方法流程图。所述方法包括:步骤S1、步骤S2。
其中,在步骤S1中设备1根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;在步骤S2中设备1根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
具体地,在步骤S1中设备1根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围。所述用户配置信息是指由用户设置的每次增量数据同步的时间范围、同步周期、同步源系统和目标系统等信息,用于指定每次同步的数据范围,筛选出某段时间范围内写入的数据,例如,设置时间范围为上一个小时的0分到60分,每次执行增量同步则会导出前一个小时的数据,下次同步的时间范围从上次同步范围的末尾开始。所述目标时间范围是指根据用户配置信息所确定的所需要导出的增量数据的时间范围启动增量导出程序,同步时将该范围内的增量数据导出,不会包含非该时间段内的数据,也不会包含重复数据。所述分布式非关系型数据库,即为NoSQL数据库通常采用分布式架构来处理大规模的数据集合,数据在物理上是分别存储在不同的节点,用户对数据的存储和获取会被路由到该数据所在的节点,由每个节点提供服务。所述数据表即为在分布式非关系型数据库中对应数据分片的数据表,通过数据表可以获取对应的分片信息,其中,所述分片即为数据库中被切分为分片的数据,每个分片相对独立地提供读写服务,在分片之间还会动态地合并或分裂实现负载均衡,分片可在不同的节点上进行读写,对于分片中数据的读取可通过一些存储服务进行,从而提高服务的可用性,例如构建在阿里云飞天分布式系统之上的TableStore会以实例和表的形式组织数据,通过数据分片和负载均衡技术,提供结构化数据的存储和实时访问,其所提供的接口可读取每个分片上的增量数据,例如通过数据库获取其中对应那些分片,包括不再提供服务但任然包含有效增量数据的历史分片。
因此,根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,即确定符合条件的数据表,从而便于进一步读取这些数据表对应分片中的增量数据,这里的条件即为用户配置中的条件,包括但不限于时间条件以及其它常规检查条件。例如图11中的(1)所示,读取用户配置,除检查用户的配置是否完整,除一些常规检查项外,还需要检查用户的数据表是否开启了增量功能;同时,根据当前时间与数据表上配置的增量数据过期时间,检查用户给出的时间范围是否可以导出。
通过用户配置确定增量数据导出的目标时间范围使得导出目标时间范围内的增量数据后即关闭同步程序,进一步地可依据这一时间范围周期性进行同步,从而避免同步程序常驻持续运行,造成资源的浪费,同时也提高效率。通过用户配置确定对应的数据表即确定了需要导出的增量数据的来源,使得增量数据同步的目标清晰,节约程序运行资源。
本领域技术人员应能理解上述确定待增量同步的对应数据表的方式仅为举例,其他现有的或今后可能出现的确定待增量同步的对应数据表的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述增量数据的元信息包括所述增量数据的写入时间及顺序标识信息,所述写入时间及所述顺序标识信息用于确定所述增量数据对应操作的顺序。因为写入时间对整体导出方案和用户监控均有正向参考作用,因此将写入时间放入增量数据的元信息中,同时可依据写入时间与用户设置的目标时间范围对比确定是否在时间范围内。因为在分布式系统中数据分片在不同的节点上会导致时钟不一致的问题,若均按增量数据的写入时间分析增量数据对应的操作次序会会造成乱序,例如分片被调度时写入时间回跳。因此,所述顺序标识信息会根据数据所在节点不同确定不同的可识别标识,例如当数据分片被调度到新的节点上时,即将顺序标识信息升序,将顺序标识信息与写入时间结合,即可确定数据对应操作的唯一执行次序。优选地,一次操作可能有多行,因此,所述增量数据的元信息还包括写入行次序信息,当一次操作写入了多行数据时用于确定这些行的顺序,每行的顺序标识信息和写入时间是相同的。
在具体操作中,例如,设计一个叫做SequenceID的结构用于定序,包括在原信息中,即每条数据的都会带有一个SequenceID,这一ID是唯一的,且字典序按照操作的先后顺序递增。equenceID由三部分组成,分别称为epoch、timestamp、rowIndex。timestamp即为数据的写入时间,与所在的节点的时钟有关。当分片被调度到新的节点上时,新写入数据的timestamp可能会由于时间误差反而更小,所以我们在timestamp前面加入了epoch,即为顺序标识信息,当分片被调度时,epoch会加1,因此保证了SequenceID的顺序严格递增。当同时写入多行时,rowIndex即为记录同时写入行的值为0、1、2…用于确定同时写入行的顺序。在程序中,SequenceID即为一个包含了三个整型的结构:
在实际使用时,例如:
通过在增量数据的元信息加入增量数据的写入时间及顺序标识信息,使得可以直接根据增量数据元信息确定增量数据对应的时间范围,以及确定增量数据对应操作的顺序,避免因为增量数据所在的分片因为前后所在节点的时钟不同导致的乱序。
接着,在步骤S2中设备1根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。所述分片的位点信息包括但不限于数据表对应的具体分片所在位置信息、分片中上次同步的时间点、代表分片中当前增量数据起始的标记位置的位点、记录分片位点状态信息的表格位置等,但不限于此,所有能确定增量数据在分片中读取起始位置的信息均包含于此。因此可根据分片的位点信息确定数据表对应的各分片中增量数据的起始位置,并读取相应数据,进而根据目标时间范围对所读取的数据进行筛选,从而将符合要求的数据进行同步处理。
优选地,同步处理的过程例如基于TableStore的流API也就是应用程序编程接口,实现增量数据导出程序,让用户通过填写配置项的方式配置增量导出任务,按照用户配置的时间范围导出该时间段内写入的数据。通常用户会通过定时任务的方式使用我们的增量导出程序,每次导出上一个小时或者前一天的数据,导出完成后程序即关闭。优选地,用户通过自动调度系统,可以周期性地启动增量同步任务,每次同步的时间范围可以是上一个时间周期,比如前1小时或者前1天。每次任务执行完毕即代表对应时间周期内的数据同步完毕,其同步的周期可以灵活调整。
图2示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的方法流程图。所述方法包括:步骤S1、步骤S3、步骤S2。
其中,在步骤S1中设备1根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;在步骤S3中设备1确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息;在步骤S2中设备1根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。
在此,图2中的步骤S1与图1中的步骤S1相同或相似,不再赘述。
具体地,在步骤S3中设备1确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息。所述位点信息包括增量导出程序所记录的之前每次导出结束时各个分片中增量数据的位点,当配置的开始时间与之前某次配置的结束时间相同时,程序会从记录的位点开始,不必从增量数据的起始位置扫描,从而大大提高了效率,具有断点继续执行的优点。因此,每次同步过程中会不断更新已被读取的增量数据的位置,从而当根据目标时间范围的同步结束时,所有分片中都有增量数据对应的读取位置的位点信息,所述位点信息的保存对象包括但不限于创建表格统一保存,或者分批保存在其它指定的数据结构中。
优选地,在步骤S3中设备1从对应系统状态表中读取所述数据表在所述分布式非关系型数据库中对应的每个分片的位点信息,其中,所述系统状态表包括系统所有分片在相同时刻的位点信息。即将分布式非关系型数据库中所有位点信息记录在统一的系统状态表中,通过一张状态表来记录位点,每次同步任务执行完毕后状态表不会被清空,其中包含下次任务需要的信息。记录位点可以起到断点续传的效果,提高导出效率,否则必须从头开始扫描增量数据。所述系统状态表中记录了某一时刻所有分片的位点,即所有分片的位点都是对应同一时刻的,从而将每个分片中的数据拉平到统一的时间点,便于业务按照时间筛选数据进行分析。位点信息在记录的格式可以用如下方式简单表示:
本领域技术人员应能理解上述确定位点信息的方式仅为举例,其他现有的或今后可能出现的确定位点信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤S2中设备1根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。即如图11中(2)所示,因为将位点信息保存在系统状态表中,因此,为了获取位点信息从而可以据此确定分片上增量数据的读取起点位置,需要判断状态表是否存在,假设状态表不存在,创建状态表以便于后续的状态信息记录。如果已经存在,需要对影响本次导出任务的一些状态进行复位,因为状态表中记录了“截止时间-分片-位点”这样的一组组的信息,需要复位的是与本次导出的“截止时间”相同的状态,这些状态可能是上次执行相同的任务执行失败后留下的一些残余状态,这些状态信息均为垃圾数据,需要进行清理,避免对当前同步中确定分片中增量数据的读取起始位置造成影响。接着,如图11中(3)所示,通过数据接口获取数据表的分片列表,根据状态表中的信息设置每个分片的起始位点。如果检查到状态表中没有相应的位点信息,需要设置起始位点为分片中保留的增量数据的开始位置,该位置的数据的写入时间可能小于用户设置的时间范围,即小于目标时间范围的开始时间,小于用户时间范围的这部分数据会被扫描但是不会被导出。因此,状态表中记录的位点信息可以减少数据扫描量,大大提高导出效率。基于上述步骤,在所确定的数据表对应的分片中找到增量数据开始的起始位置,从而读取在目标时间范围的增量数据。具体地读取过车如图12所示,将在下文中进行详述。
优选地,为了方便获取各种数据,可开发对应的数据接口,例如上文举例的TableStore中包含包含4个接口,分别为ListStream,DescribeStream、GetShardIterator、GetStreamRecord。其中,ListStream用于获取数据库中有哪些表开启了增量数据功能,并返回相应表的StreamID。对于某一个数据表,首先通过DescribeStream接口获取表中有哪些分片,由于分片间的合并与分裂,其中有些分片已经变成历史分片(即不再提供服务),但是DescribeStream中仍会包含这些分片,因为这些分片上仍可能含有需要被读取的数据。GetShardIterator接口可以获取一个迭代器,对应一个分片中保留的增量数据的起始位置,对于每条增量记录都会在一定时间后过期被删除,所以这个起始位置也会随着垃圾回收而向后移动。通过获取到的迭代器,调用GetStreamRecord接口获取增量数据,每次会返回一批增量数据和下一个迭代器的值,因此可以循环地读取分片内保留的增量数据。在此,迭代器的值是一个字符串,编码了增量数据在服务端的具体位置信息,必须由服务端返回。记录位点就是记录这个迭代器的值。在没有这个值的情况下,需要通过GetShardIterator接口向服务端请求一次,返回的是某个分片的增量数据的起始位置。在程序中,可以用一个特殊的字符串,比如SHARD_START,用以表示迭代器的值为“起始位置”,但当真正开始读取数据时,需要通过GetShardIterator接口把SHARD_START换成一个真实的编码了位置信息的迭代器。
优选地,所述方法还包括步骤S4(未示出),其中,在步骤S4中设备1将所述数据表的增量数据导出至对应临时表以供后续处理,其中,若导出过程出错,清空所述临时表并重新导出所述数据表的增量数据。因为对于很多实时的数据同步程序,难以避免数据重复问题,当程序崩溃或者遇到网络异常时,程序需要从上一个记录的位点恢复,继续导出数据,因此可能会重复导出上一个位点之后的数据。但因为同步所在的系统为非实时系统,因此将本系统导出的数据先存入一张临时表中,等导出完毕再进行处理。在导出过程中一旦遇到错误,可以清空临时表,重新启动相同的导出任务,因此可以避免数据重复问题,简化用户端处理逻辑。且由于发生错误的概率很低,所以重启任务带来的平均开销并不大。
图3示出根据本申请一个优选实施例的步骤S2的方法流程图。所述步骤S2包括:步骤S21、步骤S22。
其中,在步骤S21中设备1根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理;在步骤S22中设备1检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
具体地,在步骤S21中设备1根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理。即接上文所述的图11中(3)之后,如图11中(4)所示,根据分片列表及位点信息,启动工作线程处理每个分片,从每个分片中当前所标记的起始位点读取数据,保留在目标时间范围内的数据。因为分片会出现分裂与合并,因此,会形成父分片和子分片的关系,其中子分片由父分片演化而来,因此,其数据的时间一定在父分片之后,同步过程中父分片对应的时间若超出目标时间范围的结束时间,则子分片就不需要处理,结束同步过程即可。此外,在读取每个分片数据时,为了避免出现分片关系错乱,每个分片先检查是否有对应的父分片,并在父分片读取完毕后方才进行读取从而保障分片之间关系被理清楚。
接着,在步骤S22中设备1检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。即如图11中(5)中所示工作线程在处理每个分片时,会将处理状态和最后一次处理时间等信息保存到一个数据结构中,主线程访问这个数据结构,获取所有分片的处理状态,其中,这一数据结构对应当前同步过程中的所有分片,例如,在进程内是属于一个统一的map,从而便于对所有分片的处理情况进行检查。
图4示出根据本申请另一个优选实施例的步骤S21的方法流程图。所述步骤S21包括:步骤S211、步骤S212。
其中,在步骤S211中设备1判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据;在步骤S212中设备1导出在所述目标时间范围内的所述数据分片的增量数据。
具体地,在步骤S211中设备1判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据。即例如图12中(1)所示在根据位点信息设置某一待同步处理的分片中增量数据的起始位点,使得读取数据时可从该位点开始之后。考虑到分片会因为合并和分裂等情况导致出现子分片的数据产生于父节点之后,因此需要等待父节点的增量数据被全部读取完,例如图12中(2)所示,判断当前处理的分片是否有父分片,若有则需要等待该父分片的增量数据被读取,若该分片没有父分片或当检测到父分片读取完毕,则如图12中(3)所示直接进入读取数据阶段,从当前位点读取数据。优选地,在(3)读取数据阶段,程序会调用TableStore的客户端进行数据获取,由TableStore的服务端返回结果,其中,结果包括Record列表、NextShardIterator。在此,Record是指:一条Record表示一条增量数据,以行更新为例,Record中包含所更新的行的主键、更新的每一列的列名和列值;NextStartIterator是指:下一个迭代器的值,假如为Null,表示该分片读取完毕。接着如图12中(4)所示根据读取数据的返回结果判断是否分片下的全部增量数据读取完毕,若是则该分片处理结束。假设此分片为一个父分片,由于全部数据已经读完,所以本分片处理完毕,其子分片此时会完成第(2)步,进入读取数据阶段。
本领域技术人员应能理解上述判断父分片处理状态并据此处理子分片的方式仅为举例,其他现有的或今后可能出现的判断父分片处理状态并据此处理子分片的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤S212中设备1导出在所述目标时间范围内的所述数据分片的增量数据。在此,判断读取的数据是否符合要求的时间范围,若符合则导出符合时间范围的数据,将其处理状态和当前所最后读取的位置信息记录下来,从而更新当前位点、最后处理时间等信息。图12中(5)这一步是判断某个分片的状态,然后设置到一个数据结构中供主线程获取。假设这一步中设置分片处理完毕,在主线程的下一次检查时即可获知该分片处理完毕,即图11中的(5)依赖这一步来获取信息。
优选地,在步骤S212中设备1若所述分片的增量数据的写入时间小于所述目标时间范围的开始时间,更新所述分片的同步处理信息;若所述分片的增量数据的写入时间小于所述目标时间范围的结束时间,导出所述增量数据;否则,结束所述分片的同步处理过程。如图12中(5)的判断过程所示,当所导出的分片的增量数据的吸入时间小于目标时间范围的开始时间,代表需要继续读取后面时间对应的增量数据,才能使得增量数据对应的时间落入目标时间范内,因此,将当前的数据位置信息和处理时间更新后,可继续进行读取,直到增量数据对应的时间落入目标时间范围。因此,当所读取的增量数据对应的写入时间小于目标时间范围的结束时间,则代表增量数据在目标时间范围内,因此记录对应的位置和时间信息,便于检测和继续进行读取。在此,(5)的判断是循环进行的,从分片中每次获取一批数据,然后进行(5)的判断,这批数据处理完成后会立即再读取一批数据,再进行(5)的判断。
优选地,为了避免数据所在分片对应的节点系统时间不同,从而导致当连续的增量数据分布在不同分片上被读取时,因为时间错误导致某段数据不在目标时间范围内发生漏读的情况,可设置规则:当所读取的增量数据的写入时间大于目标时间范围的结束时间即停止读取。例如假设需要导出的时间范围开始时间为startTime,结束时间为endTime,对某一行的连续三次操作的写入时间分别为time1,time2,time3。由于分布式环境中不同节点的时间可能是不一致的,有可能出现time1小于endTime,time2大于endTime,而time3小于endTime的情况。为了避免数据漏读,所以导出的数据必须是连续的一段数据,因此不可以导出time1和time3对应的数据,而不导出time2对应的数据。因此,对于每个分片,当遇到第一条大于等于endTime的数据时处理停止,即使后面有小于endTime的数据,对于上述例子即只导出time1对应的数据。每次导出完成后会记录下此时的位点,下个周期再进行导出时,直接从上次记录的位点开始,当再次遇到第一条大于等于新的endTime的数据为止。这样的方法可以避免由于时间误差丢掉某些数据的情况。
本领域技术人员应能理解上述判断所读取增量数据是否在目标时间范围内的方式仅为举例,其他现有的或今后可能出现的判断所读取增量数据是否在目标时间范围内的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
图5示出根据本申请另一个优选实施例的步骤S22的方法流程图。所述步骤S22包括步骤S221、步骤S222。
其中,在步骤S221中设备1对被同步处理的所述分片进行预处理;在步骤S222中设备1检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
具体地,在步骤S221中设备1对被同步处理的所述分片进行预处理。所述预处理是指对于正在同步过程中的分片,通过判断和监测等手段确定其是否需要结束处理或者标记为完成处理。所述预处理的情况包括但不限于异常导致结束的情况,梳理父子分片关系从而确定当前同步进展,读取统一存储当前所更新的读取的数据位置对应的位点信息和最后处理时间的数据结构中的信息。当这一预处理过程完成,即可根据预处理的结果判断整个同步过程中所有分片的处理状态,进而判断是否结束同步程序。通过对分片进行预处理,使得同步进程可提前结束或完成,从而提升处理的效率。
优选地,所述预处理包括以下至少任一项:若同步处理后的所述分片存在处理超时,跳转至异常结束;对所述一个或多个分片中已同步处理完成的父分片,设置该父分片的各子分片为同步处理完成。所述处理超时,是指用户可设置对于每个分片的同步处理时间不能超过一定的时间阈值,若超过这一阈值则判定为异常,从而结束对这一分片的同步操作,避免一直挂在异常分片上导致同步效率降低。例如,图11中(6)所示主线程需要判断是否有哪个分片的一次处理时间超时,超时时间是程序的一个配置项,例如配置对于每个分片同步处理时间超过10分钟即判断为异常从而结束同步,该检查是防止工作线程出现异常挂起。因为对于有父子关系的分片,父分片中增量数据一定产生于子分片之前,因此,如图11中(7)所示主线程需要判断是否有已经处理完成的父分片,这里的处理完成是指达到了用户设置的目标时间范围的结束时间。因为子分片是由父分片经过合并或者分裂形成的,父分片已经到达了结束时间,子分片的数据肯定都超过结束时间,所以设置子分片的状态也为完成,从而提高判断分片处理情况的效率。
接着,在步骤S222中设备1检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。即如图11中(9)所示判断所有分片是否都处理完成,若是,结束任务,否则等待一段时间后回到(5),在此,等待的时间可由用户设置或系统一开始设定默认值。在(5)中启动对所有分片处理状态检查时,为了方便检查,每个分片都会将处理状态例如读取位置和时间等信息保存在指定的数据结构中,在主线程开始检查时,即访问这一数据结构,从而获取所有分片的状态。在图11中(5)到(9)是在循环检查各个分片的处理状态并做相应处理,等待一段时间可以节约处理器例如CPU的资源。
本领域技术人员应能理解上述循环检查分片处理状态的方式仅为举例,其他现有的或今后可能出现的循环检查分片处理状态的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
图6示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的设备示意图。所述设备1包括:数据表确定装置11、同步装置12。
其中,所述数据表确定装置11根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;同步装置12根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
具体地,数据表确定装置11根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围。所述用户配置信息是指由用户设置的每次增量数据同步的时间范围、同步周期、同步源系统和目标系统等信息,用于指定每次同步的数据范围,筛选出某段时间范围内写入的数据,例如,设置时间范围为上一个小时的0分到60分,每次执行增量同步则会导出前一个小时的数据,下次同步的时间范围从上次同步范围的末尾开始。所述目标时间范围是指根据用户配置信息所确定的所需要导出的增量数据的时间范围启动增量导出程序,同步时将该范围内的增量数据导出,不会包含非该时间段内的数据,也不会包含重复数据。所述分布式非关系型数据库,即为NoSQL数据库通常采用分布式架构来处理大规模的数据集合,数据在物理上是分别存储在不同的节点,用户对数据的存储和获取会被路由到该数据所在的节点,由每个节点提供服务。所述数据表即为在分布式非关系型数据库中对应数据分片的数据表,通过数据表可以获取对应的分片信息,其中,所述分片即为数据库中被切分为分片的数据,每个分片相对独立地提供读写服务,在分片之间还会动态地合并或分裂实现负载均衡,分片可在不同的节点上进行读写,对于分片中数据的读取可通过一些存储服务进行,从而提高服务的可用性,例如构建在阿里云飞天分布式系统之上的TableStore会以实例和表的形式组织数据,通过数据分片和负载均衡技术,提供结构化数据的存储和实时访问,其所提供的接口可读取每个分片上的增量数据,例如通过数据库获取其中对应那些分片,包括不再提供服务但任然包含有效增量数据的历史分片。
因此,根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,即确定符合条件的数据表,从而便于进一步读取这些数据表对应分片中的增量数据,这里的条件即为用户配置中的条件,包括但不限于时间条件以及其它常规检查条件。例如图11中的(1)所示,读取用户配置,除检查用户的配置是否完整,除一些常规检查项外,还需要检查用户的数据表是否开启了增量功能;同时,根据当前时间与数据表上配置的增量数据过期时间,检查用户给出的时间范围是否可以导出。
通过用户配置确定增量数据导出的目标时间范围使得导出目标时间范围内的增量数据后即关闭同步程序,进一步地可依据这一时间范围周期性进行同步,从而避免同步程序常驻持续运行,造成资源的浪费,同时也提高效率。通过用户配置确定对应的数据表即确定了需要导出的增量数据的来源,使得增量数据同步的目标清晰,节约程序运行资源。
本领域技术人员应能理解上述确定待增量同步的对应数据表的方式仅为举例,其他现有的或今后可能出现的确定待增量同步的对应数据表的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述增量数据的元信息包括所述增量数据的写入时间及顺序标识信息,所述写入时间及所述顺序标识信息用于确定所述增量数据对应操作的顺序。因为写入时间对整体导出方案和用户监控均有正向参考作用,因此将写入时间放入增量数据的元信息中,同时可依据写入时间与用户设置的目标时间范围对比确定是否在时间范围内。因为在分布式系统中数据分片在不同的节点上会导致时钟不一致的问题,若均按增量数据的写入时间分析增量数据对应的操作次序会会造成乱序,例如分片被调度时写入时间回跳。因此,所述顺序标识信息会根据数据所在节点不同确定不同的可识别标识,例如当数据分片被调度到新的节点上时,即将顺序标识信息升序,将顺序标识信息与写入时间结合,即可确定数据对应操作的唯一执行次序。优选地,一次操作可能有多行,因此,所述增量数据的元信息还包括写入行次序信息,当一次操作写入了多行数据时用于确定这些行的顺序,每行的顺序标识信息和写入时间是相同的。
在具体操作中,例如,设计一个叫做SequenceID的结构用于定序,包括在原信息中,即每条数据的都会带有一个SequenceID,这一ID是唯一的,且字典序按照操作的先后顺序递增。equenceID由三部分组成,分别称为epoch、timestamp、rowIndex。timestamp即为数据的写入时间,与所在的节点的时钟有关。当分片被调度到新的节点上时,新写入数据的timestamp可能会由于时间误差反而更小,所以我们在timestamp前面加入了epoch,即为顺序标识信息,当分片被调度时,epoch会加1,因此保证了SequenceID的顺序严格递增。当同时写入多行时,rowIndex即为记录同时写入行的值为0、1、2…用于确定同时写入行的顺序。在程序中,SequenceID即为一个包含了三个整型的结构:
在实际使用时,例如:
通过在增量数据的元信息加入增量数据的写入时间及顺序标识信息,使得可以直接根据增量数据元信息确定增量数据对应的时间范围,以及确定增量数据对应操作的顺序,避免因为增量数据所在的分片因为前后所在节点的时钟不同导致的乱序。
接着,同步装置12根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。所述分片的位点信息包括但不限于数据表对应的具体分片所在位置信息、分片中上次同步的时间点、代表分片中当前增量数据起始的标记位置的位点、记录分片位点状态信息的表格位置等,但不限于此,所有能确定增量数据在分片中读取起始位置的信息均包含于此。因此可根据分片的位点信息确定数据表对应的各分片中增量数据的起始位置,并读取相应数据,进而根据目标时间范围对所读取的数据进行筛选,从而将符合要求的数据进行同步处理。
优选地,同步处理的过程例如基于TableStore的流API也就是应用程序编程接口,实现增量数据导出程序,让用户通过填写配置项的方式配置增量导出任务,按照用户配置的时间范围导出该时间段内写入的数据。通常用户会通过定时任务的方式使用我们的增量导出程序,每次导出上一个小时或者前一天的数据,导出完成后程序即关闭。优选地,用户通过自动调度系统,可以周期性地启动增量同步任务,每次同步的时间范围可以是上一个时间周期,比如前1小时或者前1天。每次任务执行完毕即代表对应时间周期内的数据同步完毕,其同步的周期可以灵活调整。
图7示出根据本申请另一个方面的一种用于分布式非关系型数据库中同步增量数据的设备示意图。所述设备1包括:数据表确定装置21、分片信息确定装置23、同步装置22。
其中,数据表确定装置21根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;分片信息确定装置23确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息;同步装置22根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。
在此,图7中的数据表确定装置21与图6中的数据表确定装置11相同或相似,不再赘述。
具体地,分片信息确定装置23确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息。所述位点信息包括增量导出程序所记录的之前每次导出结束时各个分片中增量数据的位点,当配置的开始时间与之前某次配置的结束时间相同时,程序会从记录的位点开始,不必从增量数据的起始位置扫描,从而大大提高了效率,具有断点继续执行的优点。因此,每次同步过程中会不断更新已被读取的增量数据的位置,从而当根据目标时间范围的同步结束时,所有分片中都有增量数据对应的读取位置的位点信息,所述位点信息的保存对象包括但不限于创建表格统一保存,或者分批保存在其它指定的数据结构中。
优选地,分片信息确定装置23从对应系统状态表中读取所述数据表在所述分布式非关系型数据库中对应的每个分片的位点信息,其中,所述系统状态表包括系统所有分片在相同时刻的位点信息。即将分布式非关系型数据库中所有位点信息记录在统一的系统状态表中,通过一张状态表来记录位点,每次同步任务执行完毕后状态表不会被清空,其中包含下次任务需要的信息。记录位点可以起到断点续传的效果,提高导出效率,否则必须从头开始扫描增量数据。所述系统状态表中记录了某一时刻所有分片的位点,即所有分片的位点都是对应同一时刻的,从而将每个分片中的数据拉平到统一的时间点,便于业务按照时间筛选数据进行分析。位点信息在记录的格式可以用如下方式简单表示:
时间 | 分片 | 位点 |
Time1 | Partition1 | Checkpoint1 |
Time1 | Partition2 | Checkpoint2 |
Time1 | Partition3 | Checkpoint3 |
本领域技术人员应能理解上述确定位点信息的方式仅为举例,其他现有的或今后可能出现的确定位点信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,同步装置22根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。即如图11中(2)所示,因为将位点信息保存在系统状态表中,因此,为了获取位点信息从而可以据此确定分片上增量数据的读取起点位置,需要判断状态表是否存在,假设状态表不存在,创建状态表以便于后续的状态信息记录。如果已经存在,需要对影响本次导出任务的一些状态进行复位,因为状态表中记录了“截止时间-分片-位点”这样的一组组的信息,需要复位的是与本次导出的“截止时间”相同的状态,这些状态可能是上次执行相同的任务执行失败后留下的一些残余状态,这些状态信息均为垃圾数据,需要进行清理,避免对当前同步中确定分片中增量数据的读取起始位置造成影响。接着,如图11中(3)所示,通过数据接口获取数据表的分片列表,根据状态表中的信息设置每个分片的起始位点。如果检查到状态表中没有相应的位点信息,需要设置起始位点为分片中保留的增量数据的开始位置,该位置的数据的写入时间可能小于用户设置的时间范围,即小于目标时间范围的开始时间,小于用户时间范围的这部分数据会被扫描但是不会被导出。因此,状态表中记录的位点信息可以减少数据扫描量,大大提高导出效率。基于上述步骤,在所确定的数据表对应的分片中找到增量数据开始的起始位置,从而读取在目标时间范围的增量数据。具体地读取过车如图12所示,将在下文中进行详述。
优选地,为了方便获取各种数据,可开发对应的数据接口,例如上文举例的TableStore中包含包含4个接口,分别为ListStream,DescribeStream、GetShardIterator、GetStreamRecord。其中,ListStream用于获取数据库中有哪些表开启了增量数据功能,并返回相应表的StreamID。对于某一个数据表,首先通过DescribeStream接口获取表中有哪些分片,由于分片间的合并与分裂,其中有些分片已经变成历史分片(即不再提供服务),但是DescribeStream中仍会包含这些分片,因为这些分片上仍可能含有需要被读取的数据。GetShardIterator接口可以获取一个迭代器,对应一个分片中保留的增量数据的起始位置,对于每条增量记录都会在一定时间后过期被删除,所以这个起始位置也会随着垃圾回收而向后移动。通过获取到的迭代器,调用GetStreamRecord接口获取增量数据,每次会返回一批增量数据和下一个迭代器的值,因此可以循环地读取分片内保留的增量数据。在此,迭代器的值是一个字符串,编码了增量数据在服务端的具体位置信息,必须由服务端返回。记录位点就是记录这个迭代器的值。在没有这个值的情况下,需要通过GetShardIterator接口向服务端请求一次,返回的是某个分片的增量数据的起始位置。在程序中,可以用一个特殊的字符串,比如SHARD_START,用以表示迭代器的值为“起始位置”,但当真正开始读取数据时,需要通过GetShardIterator接口把SHARD_START换成一个真实的编码了位置信息的迭代器。
优选地,设备1还包括增量数据暂存装置24(未示出),其中,所述增量数据暂存装置24将所述数据表的增量数据导出至对应临时表以供后续处理,其中,若导出过程出错,清空所述临时表并重新导出所述数据表的增量数据。因为对于很多实时的数据同步程序,难以避免数据重复问题,当程序崩溃或者遇到网络异常时,程序需要从上一个记录的位点恢复,继续导出数据,因此可能会重复导出上一个位点之后的数据。但因为同步所在的系统为非实时系统,因此将本系统导出的数据先存入一张临时表中,等导出完毕再进行处理。在导出过程中一旦遇到错误,可以清空临时表,重新启动相同的导出任务,因此可以避免数据重复问题,简化用户端处理逻辑。且由于发生错误的概率很低,所以重启任务带来的平均开销并不大。
图8示出根据本申请一个优选实施例的同步装置的设备示意图。所述同步装置22包括:同步处理单元221、检测单元222。
其中,同步处理单元221根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理;检测单元222检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
具体地,同步处理单元221根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理。即接上文所述的图11中(3)之后,如图11中(4)所示,根据分片列表及位点信息,启动工作线程处理每个分片,从每个分片中当前所标记的起始位点读取数据,保留在目标时间范围内的数据。因为分片会出现分裂与合并,因此,会形成父分片和子分片的关系,其中子分片由父分片演化而来,因此,其数据的时间一定在父分片之后,同步过程中父分片对应的时间若超出目标时间范围的结束时间,则子分片就不需要处理,结束同步过程即可。此外,在读取每个分片数据时,为了避免出现分片关系错乱,每个分片先检查是否有对应的父分片,并在父分片读取完毕后方才进行读取从而保障分片之间关系被理清楚。
接着,检测单元222检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。即如图11中(5)中所示工作线程在处理每个分片时,会将处理状态和最后一次处理时间等信息保存到一个数据结构中,主线程访问这个数据结构,获取所有分片的处理状态,其中,这一数据结构对应当前同步过程中的所有分片,例如,在进程内是属于一个统一的map,从而便于对所有分片的处理情况进行检查。
图9示出根据本申请另一个优选实施例的同步处理单元的设备示意图。所述同步处理单元221包括:读取判断子单元2211、数据导出子单元2212。
其中,读取判断子单元2211判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据;数据导出子单元2212导出在所述目标时间范围内的所述数据分片的增量数据。
具体地,读取判断子单元2211判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据。即例如图12中(1)所示在根据位点信息设置某一待同步处理的分片中增量数据的起始位点,使得读取数据时可从该位点开始之后。考虑到分片会因为合并和分裂等情况导致出现子分片的数据产生于父节点之后,因此需要等待父节点的增量数据被全部读取完,例如图12中(2)所示,判断当前处理的分片是否有父分片,若有则需要等待该父分片的增量数据被读取,若该分片没有父分片或当检测到父分片读取完毕,则如图12中(3)所示直接进入读取数据阶段,从当前位点读取数据。优选地,在(3)读取数据阶段,程序会调用TableStore的客户端进行数据获取,由TableStore的服务端返回结果,其中,结果包括Record列表、NextShardIterator。在此,Record是指:一条Record表示一条增量数据,以行更新为例,Record中包含所更新的行的主键、更新的每一列的列名和列值;NextStartIterator是指:下一个迭代器的值,假如为Null,表示该分片读取完毕。接着如图12中(4)所示根据读取数据的返回结果判断是否分片下的全部增量数据读取完毕,若是则该分片处理结束。假设此分片为一个父分片,由于全部数据已经读完,所以本分片处理完毕,其子分片此时会完成第(2)步,进入读取数据阶段。
本领域技术人员应能理解上述判断父分片处理状态并据此处理子分片的方式仅为举例,其他现有的或今后可能出现的判断父分片处理状态并据此处理子分片的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,数据导出子单元2212导出在所述目标时间范围内的所述数据分片的增量数据。在此,判断读取的数据是否符合要求的时间范围,若符合则导出符合时间范围的数据,将其处理状态和当前所最后读取的位置信息记录下来,从而更新当前位点、最后处理时间等信息。图12中(5)这一步是判断某个分片的状态,然后设置到一个数据结构中供主线程获取。假设这一步中设置分片处理完毕,在主线程的下一次检查时即可获知该分片处理完毕,即图11中的(5)依赖这一步来获取信息。
优选地,数据导出子单元2212若所述分片的增量数据的写入时间小于所述目标时间范围的开始时间,更新所述分片的同步处理信息;若所述分片的增量数据的写入时间小于所述目标时间范围的结束时间,导出所述增量数据;否则,结束所述分片的同步处理过程。如图12中(5)的判断过程所示,当所导出的分片的增量数据的吸入时间小于目标时间范围的开始时间,代表需要继续读取后面时间对应的增量数据,才能使得增量数据对应的时间落入目标时间范内,因此,将当前的数据位置信息和处理时间更新后,可继续进行读取,直到增量数据对应的时间落入目标时间范围。因此,当所读取的增量数据对应的写入时间小于目标时间范围的结束时间,则代表增量数据在目标时间范围内,因此记录对应的位置和时间信息,便于检测和继续进行读取。在此,(5)的判断是循环进行的,从分片中每次获取一批数据,然后进行(5)的判断,这批数据处理完成后会立即再读取一批数据,再进行(5)的判断。
优选地,为了避免数据所在分片对应的节点系统时间不同,从而导致当连续的增量数据分布在不同分片上被读取时,因为时间错误导致某段数据不在目标时间范围内发生漏读的情况,可设置规则:当所读取的增量数据的写入时间大于目标时间范围的结束时间即停止读取。例如假设需要导出的时间范围开始时间为startTime,结束时间为endTime,对某一行的连续三次操作的写入时间分别为time1,time2,time3。由于分布式环境中不同节点的时间可能是不一致的,有可能出现time1小于endTime,time2大于endTime,而time3小于endTime的情况。为了避免数据漏读,所以导出的数据必须是连续的一段数据,因此不可以导出time1和time3对应的数据,而不导出time2对应的数据。因此,对于每个分片,当遇到第一条大于等于endTime的数据时处理停止,即使后面有小于endTime的数据,对于上述例子即只导出time1对应的数据。每次导出完成后会记录下此时的位点,下个周期再进行导出时,直接从上次记录的位点开始,当再次遇到第一条大于等于新的endTime的数据为止。这样的方法可以避免由于时间误差丢掉某些数据的情况。
本领域技术人员应能理解上述判断所读取增量数据是否在目标时间范围内的方式仅为举例,其他现有的或今后可能出现的判断所读取增量数据是否在目标时间范围内的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
图10示出根据本申请另一个优选实施例的检测单元的设备示意图。所述检测单元222包括预处理子单元2221、检测子单元2222。
其中,预处理子单元2221对被同步处理的所述分片进行预处理;检测子单元2222检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
具体地,预处理子单元2221对被同步处理的所述分片进行预处理。所述预处理是指对于正在同步过程中的分片,通过判断和监测等手段确定其是否需要结束处理或者标记为完成处理。所述预处理的情况包括但不限于异常导致结束的情况,梳理父子分片关系从而确定当前同步进展,读取统一存储当前所更新的读取的数据位置对应的位点信息和最后处理时间的数据结构中的信息。当这一预处理过程完成,即可根据预处理的结果判断整个同步过程中所有分片的处理状态,进而判断是否结束同步程序。通过对分片进行预处理,使得同步进程可提前结束或完成,从而提升处理的效率。
优选地,所述预处理包括以下至少任一项:若同步处理后的所述分片存在处理超时,跳转至异常结束;对所述一个或多个分片中已同步处理完成的父分片,设置该父分片的各子分片为同步处理完成。所述处理超时,是指用户可设置对于每个分片的同步处理时间不能超过一定的时间阈值,若超过这一阈值则判定为异常,从而结束对这一分片的同步操作,避免一直挂在异常分片上导致同步效率降低。例如,图11中(6)所示主线程需要判断是否有哪个分片的一次处理时间超时,超时时间是程序的一个配置项,例如配置对于每个分片同步处理时间超过10分钟即判断为异常从而结束同步,该检查是防止工作线程出现异常挂起。因为对于有父子关系的分片,父分片中增量数据一定产生于子分片之前,因此,如图11中(7)所示主线程需要判断是否有已经处理完成的父分片,这里的处理完成是指达到了用户设置的目标时间范围的结束时间。因为子分片是由父分片经过合并或者分裂形成的,父分片已经到达了结束时间,子分片的数据肯定都超过结束时间,所以设置子分片的状态也为完成,从而提高判断分片处理情况的效率。
接着,检测子单元2222检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。即如图11中(9)所示判断所有分片是否都处理完成,若是,结束任务,否则等待一段时间后回到(5),在此,等待的时间可由用户设置或系统一开始设定默认值。在(5)中启动对所有分片处理状态检查时,为了方便检查,每个分片都会将处理状态例如读取位置和时间等信息保存在指定的数据结构中,在主线程开始检查时,即访问这一数据结构,从而获取所有分片的状态。在图11中(5)到(9)是在循环检查各个分片的处理状态并做相应处理,等待一段时间可以节约处理器例如CPU的资源。
本领域技术人员应能理解上述循环检查分片处理状态的方式仅为举例,其他现有的或今后可能出现的循环检查分片处理状态的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (20)
1.一种用于分布式非关系型数据库中同步增量数据的方法,包括:
根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;
根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
2.根据权利要求1所述的方法,其中,所述方法还包括:
确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息;
其中,所述根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理包括:
根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。
3.根据权利要求2所述的方法,其中,所述确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息包括:
从对应系统状态表中读取所述数据表在所述分布式非关系型数据库中对应的每个分片的位点信息,其中,所述系统状态表包括系统所有分片在相同时刻的位点信息。
4.根据权利要求1所述的方法,其中,所述方法还包括:
将所述数据表的增量数据导出至对应临时表以供后续处理,其中,若导出过程出错,清空所述临时表并重新导出所述数据表的增量数据。
5.根据权利要求1所述的方法,其中,所述根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理包括:
根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理;
检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
6.根据权利要求5所述的方法,其中,所述检测所述一个或多个分片是否都已同步处理完成包括:
对被同步处理的所述分片进行预处理;
检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
7.根据权利要求6所述的方法,其中,所述预处理包括以下至少任一项:
若同步处理后的所述分片存在处理超时,跳转至异常结束;
对所述一个或多个分片中已同步处理完成的父分片,设置该父分片的各子分片为同步处理完成。
8.根据权利要求5所述的方法,其中,所述根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理包括:
判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据;
导出在所述目标时间范围内的所述数据分片的增量数据。
9.根据权利要求8所述的方法,其中,所述导出在所述目标时间范围内的所述数据分片的增量数据包括:
若所述分片的增量数据的写入时间小于所述目标时间范围的开始时间,更新所述分片的同步处理信息;
若所述分片的增量数据的写入时间小于所述目标时间范围的结束时间,导出所述增量数据;否则,结束所述分片的同步处理过程。
10.根据权利要求8所述的方法,其中,所述增量数据的元信息包括所述增量数据的写入时间及顺序标识信息,所述写入时间及所述顺序标识信息用于确定所述增量数据对应操作的顺序。
11.一种用于分布式非关系型数据库中同步增量数据的设备,包括:
数据表确定装置,用于根据用户配置信息确定分布式非关系型数据库中待增量同步的对应数据表,其中,所述用户配置信息包括所述数据表中待同步的增量数据的目标时间范围;
同步装置,用于根据所述目标时间范围及分片的位点信息对所述数据表在所述分布式非关系型数据库中对应的一个或多个分片进行同步处理,以实现所述数据表的增量同步。
12.根据权利要求11所述的设备,其中,所述设备还包括:
分片信息确定装置,用于确定所述数据表在所述分布式非关系型数据库中对应的一个或多个分片及每个分片的位点信息;
其中,所述同步装置用于:
根据所述目标时间范围及所述位点信息对所述分片进行同步处理,以实现所述数据表的增量同步。
13.根据权利要求12所述的设备,其中,所述分片信息确定装置用于:
从对应系统状态表中读取所述数据表在所述分布式非关系型数据库中对应的每个分片的位点信息,其中,所述系统状态表包括系统所有分片在相同时刻的位点信息。
14.根据权利要求11所述的设备,其中,所述设备还包括:
增量数据暂存装置,用于将所述数据表的增量数据导出至对应临时表以供后续处理,其中,若导出过程出错,清空所述临时表并重新导出所述数据表的增量数据。
15.根据权利要求11所述的设备,其中,所述同步装置包括:
同步处理单元,用于根据所述目标时间范围及所述位点信息对所述一个或多个分片进行同步处理;
检测单元,用于检测所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
16.根据权利要求15所述的设备,其中,所述检测单元包括:
预处理子单元,用于对被同步处理的所述分片进行预处理;
检测子单元,用于检测预处理后的所述一个或多个分片是否都已同步处理完成;若是,结束同步处理,否则,等待后重新检测。
17.根据权利要求16所述的设备,其中,所述预处理包括以下至少任一项:
若同步处理后的所述分片存在处理超时,跳转至异常结束;
对所述一个或多个分片中已同步处理完成的父分片,设置该父分片的各子分片为同步处理完成。
18.根据权利要求15所述的设备,其中,所述同步处理单元包括:
读取判断子单元,用于判断当前处理的所述分片是否有父分片未同步处理完成,若有,则等待父分片同步处理完成;否则,根据所述位点信息读取所述分片的增量数据;
数据导出子单元,用于导出在所述目标时间范围内的所述数据分片的增量数据。
19.根据权利要求18所述的设备,其中,所述数据导出子单元用于:
若所述分片的增量数据的写入时间小于所述目标时间范围的开始时间,更新所述分片的同步处理信息;
若所述分片的增量数据的写入时间小于所述目标时间范围的结束时间,导出所述增量数据;否则,结束所述分片的同步处理过程。
20.根据权利要求28所述的设备,其中,所述增量数据的元信息包括所述增量数据的写入时间及顺序标识信息,所述写入时间及所述顺序标识信息用于确定所述增量数据对应操作的顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610429643.7A CN107515874B (zh) | 2016-06-16 | 2016-06-16 | 一种分布式非关系型数据库中同步增量数据的方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610429643.7A CN107515874B (zh) | 2016-06-16 | 2016-06-16 | 一种分布式非关系型数据库中同步增量数据的方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107515874A true CN107515874A (zh) | 2017-12-26 |
CN107515874B CN107515874B (zh) | 2021-07-27 |
Family
ID=60720856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610429643.7A Active CN107515874B (zh) | 2016-06-16 | 2016-06-16 | 一种分布式非关系型数据库中同步增量数据的方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107515874B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329998A (zh) * | 2017-06-09 | 2017-11-07 | 广州虎牙信息科技有限公司 | 用户增量类数据获取方法、装置及设备 |
CN109389408A (zh) * | 2018-11-05 | 2019-02-26 | 长春玖佰软件技术有限公司 | 一种关于溯源过程信息存储及有效性校验的应用框架 |
CN110674108A (zh) * | 2019-08-30 | 2020-01-10 | 中国人民财产保险股份有限公司 | 数据处理方法及装置 |
CN111190622A (zh) * | 2019-12-25 | 2020-05-22 | 哈尔滨安天科技集团股份有限公司 | 一种低带宽的在线升级方法、装置、电子设备及存储介质 |
CN111259081A (zh) * | 2020-02-04 | 2020-06-09 | 杭州数梦工场科技有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
CN111367994A (zh) * | 2019-06-27 | 2020-07-03 | 北京关键科技股份有限公司 | 数据库增量数据同步备份方法及系统 |
CN112069190A (zh) * | 2019-06-11 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 一种分批数据获取方法、装置、设备及介质 |
CN112116467A (zh) * | 2020-06-16 | 2020-12-22 | 上海金融期货信息技术有限公司 | 一种异构柜台并行运行方法和系统 |
CN112286905A (zh) * | 2020-10-15 | 2021-01-29 | 北京沃东天骏信息技术有限公司 | 数据迁移方法及装置、存储介质、电子设备 |
CN112434011A (zh) * | 2020-11-24 | 2021-03-02 | 深圳集智数字科技有限公司 | 一种增量数据的传输方法、装置、设备及存储介质 |
CN112711630A (zh) * | 2019-10-24 | 2021-04-27 | 阿里巴巴集团控股有限公司 | 数据同步方法、分布式缓存节点及系统、可读存储介质 |
CN113051103A (zh) * | 2019-12-27 | 2021-06-29 | 中国移动通信集团湖南有限公司 | 一种数据的处理方法、装置及电子设备 |
CN112116467B (zh) * | 2020-06-16 | 2024-06-04 | 上海金融期货信息技术有限公司 | 一种异构柜台并行运行方法和系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106200A (zh) * | 2011-11-09 | 2013-05-15 | 上海盛霄云计算技术有限公司 | 非关系型数据库同步系统及双写同步方法 |
CN104182441A (zh) * | 2014-02-27 | 2014-12-03 | 无锡天脉聚源传媒科技有限公司 | 一种数据表同步方法及装置 |
CN104573100A (zh) * | 2015-01-29 | 2015-04-29 | 无锡江南计算技术研究所 | 一种带自增量标识的分步式数据库同步方法 |
CN104598610A (zh) * | 2015-01-29 | 2015-05-06 | 无锡江南计算技术研究所 | 一种分步式数据库数据分发上传同步方法 |
CN104767813A (zh) * | 2015-04-08 | 2015-07-08 | 江苏国盾科技实业有限责任公司 | 基于openstack的公众行大数据服务平台 |
CN104967658A (zh) * | 2015-05-08 | 2015-10-07 | 成都品果科技有限公司 | 一种多终端设备上的数据同步方法 |
US20160110438A1 (en) * | 2010-11-15 | 2016-04-21 | Microsoft Technology Licensing, Llc | Data cube high availability |
CN105574127A (zh) * | 2015-12-12 | 2016-05-11 | 天津南大通用数据技术股份有限公司 | 分布式数据库系统准实时的双活方法 |
-
2016
- 2016-06-16 CN CN201610429643.7A patent/CN107515874B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160110438A1 (en) * | 2010-11-15 | 2016-04-21 | Microsoft Technology Licensing, Llc | Data cube high availability |
CN103106200A (zh) * | 2011-11-09 | 2013-05-15 | 上海盛霄云计算技术有限公司 | 非关系型数据库同步系统及双写同步方法 |
CN104182441A (zh) * | 2014-02-27 | 2014-12-03 | 无锡天脉聚源传媒科技有限公司 | 一种数据表同步方法及装置 |
CN104573100A (zh) * | 2015-01-29 | 2015-04-29 | 无锡江南计算技术研究所 | 一种带自增量标识的分步式数据库同步方法 |
CN104598610A (zh) * | 2015-01-29 | 2015-05-06 | 无锡江南计算技术研究所 | 一种分步式数据库数据分发上传同步方法 |
CN104767813A (zh) * | 2015-04-08 | 2015-07-08 | 江苏国盾科技实业有限责任公司 | 基于openstack的公众行大数据服务平台 |
CN104967658A (zh) * | 2015-05-08 | 2015-10-07 | 成都品果科技有限公司 | 一种多终端设备上的数据同步方法 |
CN105574127A (zh) * | 2015-12-12 | 2016-05-11 | 天津南大通用数据技术股份有限公司 | 分布式数据库系统准实时的双活方法 |
Non-Patent Citations (1)
Title |
---|
饶兰兰等: "一种异构数据读写分离技术的架构理论和实践", 《电脑编程技巧与维护》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329998A (zh) * | 2017-06-09 | 2017-11-07 | 广州虎牙信息科技有限公司 | 用户增量类数据获取方法、装置及设备 |
CN109389408A (zh) * | 2018-11-05 | 2019-02-26 | 长春玖佰软件技术有限公司 | 一种关于溯源过程信息存储及有效性校验的应用框架 |
CN112069190A (zh) * | 2019-06-11 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 一种分批数据获取方法、装置、设备及介质 |
CN112069190B (zh) * | 2019-06-11 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 一种分批数据获取方法、装置、设备及介质 |
CN111367994A (zh) * | 2019-06-27 | 2020-07-03 | 北京关键科技股份有限公司 | 数据库增量数据同步备份方法及系统 |
CN110674108A (zh) * | 2019-08-30 | 2020-01-10 | 中国人民财产保险股份有限公司 | 数据处理方法及装置 |
CN112711630B (zh) * | 2019-10-24 | 2024-05-17 | 阿里巴巴集团控股有限公司 | 数据同步方法、分布式缓存节点及系统、可读存储介质 |
CN112711630A (zh) * | 2019-10-24 | 2021-04-27 | 阿里巴巴集团控股有限公司 | 数据同步方法、分布式缓存节点及系统、可读存储介质 |
CN111190622A (zh) * | 2019-12-25 | 2020-05-22 | 哈尔滨安天科技集团股份有限公司 | 一种低带宽的在线升级方法、装置、电子设备及存储介质 |
CN113051103A (zh) * | 2019-12-27 | 2021-06-29 | 中国移动通信集团湖南有限公司 | 一种数据的处理方法、装置及电子设备 |
CN113051103B (zh) * | 2019-12-27 | 2023-09-05 | 中国移动通信集团湖南有限公司 | 一种数据的处理方法、装置及电子设备 |
CN111259081A (zh) * | 2020-02-04 | 2020-06-09 | 杭州数梦工场科技有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
CN112116467A (zh) * | 2020-06-16 | 2020-12-22 | 上海金融期货信息技术有限公司 | 一种异构柜台并行运行方法和系统 |
CN112116467B (zh) * | 2020-06-16 | 2024-06-04 | 上海金融期货信息技术有限公司 | 一种异构柜台并行运行方法和系统 |
CN112286905A (zh) * | 2020-10-15 | 2021-01-29 | 北京沃东天骏信息技术有限公司 | 数据迁移方法及装置、存储介质、电子设备 |
CN112434011A (zh) * | 2020-11-24 | 2021-03-02 | 深圳集智数字科技有限公司 | 一种增量数据的传输方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107515874B (zh) | 2021-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107515874A (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
US9367598B2 (en) | Merging an out of synchronization indicator and a change recording indicator in response to a failure in consistency group formation | |
CN102982085B (zh) | 数据迁移系统和方法 | |
US9183268B2 (en) | Partition level backup and restore of a massively parallel processing database | |
US9582520B1 (en) | Transaction model for data stores using distributed file systems | |
EP3120261B1 (en) | Dependency-aware transaction batching for data replication | |
JP3779263B2 (ja) | 共同作業システムのためのコンフリクトの解決 | |
CN104809202B (zh) | 一种数据库同步的方法和装置 | |
CN110297866A (zh) | 基于日志分析的数据同步方法及数据同步装置 | |
US20110167038A1 (en) | Dispatching Conflicting Data Changes | |
CN109933632B (zh) | 一种数据库的数据迁移方法、装置及设备 | |
CN108536752A (zh) | 一种数据同步方法、装置和设备 | |
CN109376196B (zh) | 一种redo日志批量同步方法及装置 | |
CN109643310B (zh) | 用于数据库中数据重分布的系统和方法 | |
CN104794155B (zh) | 数据加载的方法、装置及系统 | |
CN110321383A (zh) | 大数据平台数据同步方法、装置、计算机设备及存储介质 | |
CN112487083B (zh) | 一种数据校验方法和设备 | |
US11176004B2 (en) | Test continuous log replay | |
US10515102B2 (en) | Pre-processing of geo-spatial sensor data | |
CN106155838B (zh) | 一种数据库备份数据恢复方法及装置 | |
CN111680085A (zh) | 数据处理任务分析方法、装置、电子设备和可读存储介质 | |
CN106469101B (zh) | 计算机系统任务备份方法、系统状态恢复方法及其装置 | |
US20140108367A1 (en) | Client apparatus and database server for resumable transaction and method thereof | |
CN104750849B (zh) | 用于维护基于树形结构的目录关系的方法和系统 | |
CN116089518A (zh) | 一种数据模型抽取方法及系统、终端、介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1248343 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |