数据同步方法和装置转让专利

申请号 : CN201510506159.5

文献号 : CN106469158B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 单国明任溯孔令爽曹中胜

申请人 : 杭州海康威视系统技术有限公司

摘要 :

本发明公开了一种数据同步方法和装置。其中,该方法包括:读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录;读取数据目录Di所包含的数据索引文件Ei;解析应用Ai的更新配置文件,得到应用Ai中需要进行数据同步的目标数据的目录和目标数据的类型属性;根据数据索引文件Ei中的变更信息,按照目标数据的类型属性转换第一数据源中的数据的数据结构,第二数据源获取第一数据源中转换数据结构后的数据,完成数据同步。本发明解决了现有技术中用户无法根据其需求对要同步的数据进行筛选,导致不同的数据库之间数据同步的性能较差的技术问题。

权利要求 :

1.一种数据同步方法,其特征在于,包括:

读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录,其中,所述第一数据源用于提供数据同步所需的数据,n为大于等于2的自然数;

读取数据目录Di所包含的数据索引文件Ei,其中,所述数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成所述n个应用,数据目录D1至数据目录Dn构成所述n个应用的数据目录;

解析所述应用Ai的更新配置文件,得到所述应用Ai中需要进行数据同步的目标数据的目录和所述目标数据的类型属性;以及根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步,其中,所述第二数据源为存储所述应用A1至所述应用An的数据源。

2.根据权利要求1所述的方法,其特征在于,所述数据索引文件Ei中的变更信息包括全量更新时间和增量文件行数,根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步包括:读取所述数据索引文件Ei中的所述全量更新时间;

根据所述全量更新时间判断是否进行全量数据同步;

在根据所述全量更新时间判断出进行所述全量数据同步的情况下,从所述第一数据源中读取全量数据文件,并按照所述目标数据的类型属性转换所述全量数据文件的数据结构,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源;

在根据所述全量更新时间判断出不进行所述全量数据同步的情况下,或在将转换所述数据结构后的所述全量数据文件同步至所述第二数据源之后,读取所述数据索引文件Ei中的所述增量文件行数;

根据所述增量文件行数判断是否进行增量数据同步;以及

在根据所述增量文件行数判断出进行所述增量数据同步的情况下,从所述第一数据源中读取增量数据文件,并按照所述目标数据的类型属性转换所述增量数据文件的数据结构,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源。

3.根据权利要求2所述的方法,其特征在于,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源包括:从所述第二数据源查询所述目标数据的所有键值;

存储所述所有键值至临时文件;

判断转换所述数据结构后的所述全量数据文件中的键值Kj’是否存在于所述临时文件中,其中,j’依次取1至m1,m1为所述全量数据文件中键值的总数量;

在判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj’表示的数据更新为转换所述数据结构后的所述全量数据文件中所述键值Kj’表示的数据,并删除所述临时文件中的所述键值Kj’;

在判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述全量数据文件中的所述键值Kj’表示的数据至所述第二数据源;以及从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。

4.根据权利要求2所述的方法,其特征在于,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源包括:从所述第二数据源查询所述目标数据的所有键值;

存储所述所有键值至临时文件;

判断转换所述数据结构后的所述增量数据文件中的键值Kj”是否存在于所述临时文件中,其中,j”依次取1至m2,m2为所述增量数据文件中键值的总数量;

在判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj”表示的数据更新为转换所述数据结构后的所述增量数据文件中所述键值Kj”表示的数据,并删除所述临时文件中的所述键值Kj”;

在判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述增量数据文件中的所述键值Kj”表示的数据至所述第二数据源;以及从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。

5.根据权利要求1所述的方法,其特征在于,在读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,所述方法还包括:解析预设的数据生成配置文件,得到需要生成的第一数据类型;

判断所述第二数据源中是否存在类型为所述第一数据类型的数据;以及

在判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源。

6.根据权利要求5所述的方法,其特征在于,在判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源包括:判断第一全量数据文件的大小是否达到预设大小,其中,所述第一全量数据文件为所述第一数据源中当前进行数据写入的全量数据文件;

在判断出所述第一全量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二全量数据文件,并将所述第二数据源中类型为所述第一数据类型的数据写入所述第二全量数据文件;以及在判断出所述第一全量数据文件的大小未达到所述预设大小的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一全量数据文件。

7.根据权利要求1所述的方法,其特征在于,在读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,所述方法还包括:接收数据更新信息,其中,所述数据更新信息包括更新数据和所述更新数据的数据类型;

解析预设的数据生成配置文件,得到与所述更新数据的数据类型对应的目标数据格式;

将所述更新数据的格式转换为所述目标数据格式;以及

将转换为所述目标数据格式的所述更新数据写入所述第一数据源。

8.根据权利要求7所述的方法,其特征在于,将转换为所述目标数据格式的所述更新数据写入所述第一数据源包括:判断第一增量数据文件的大小是否达到预设大小,其中,所述第一增量数据文件为所述第一数据源中当前进行数据写入的增量数据文件;

在判断出所述第一增量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二增量数据文件,并将转换为所述目标数据格式的所述更新数据写入所述第二增量数据文件;以及在判断出所述第一增量数据文件的大小未达到所述预设大小的情况下,将转换为所述目标数据格式的所述更新数据写入所述第一增量数据文件。

9.根据权利要求1所述的方法,其特征在于,所述目录索引文件为逗号分隔值CSV格式,所述数据索引文件E1至数据索引文件En均为CSV格式。

10.一种数据同步装置,其特征在于,包括:

第一读取单元,用于读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录,其中,所述第一数据源用于提供数据同步所需的数据,n为大于等于2的自然数;

第二读取单元,用于读取数据目录Di所包含的数据索引文件Ei,其中,所述数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成所述n个应用,数据目录D1至数据目录Dn构成所述n个应用的数据目录;

第一解析单元,用于解析所述应用Ai的更新配置文件,得到所述应用Ai中需要进行数据同步的目标数据的目录和所述目标数据的类型属性;以及同步单元,用于根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步,其中,所述第二数据源为存储所述应用A1至所述应用An的数据源。

11.根据权利要求10所述的装置,其特征在于,所述数据索引文件Ei中的变更信息包括全量更新时间和增量文件行数,所述同步单元包括:第一读取子单元,用于读取所述数据索引文件Ei中的所述全量更新时间;

第一判断子单元,用于根据所述全量更新时间判断是否进行全量数据同步;

第一同步子单元,用于在所述第一判断子单元根据所述全量更新时间判断出进行所述全量数据同步的情况下,从所述第一数据源中读取全量数据文件,并按照所述目标数据的类型属性转换所述全量数据文件的数据结构,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源;

第二读取子单元,用于在所述第一判断子单元根据所述全量更新时间判断出不进行所述全量数据同步的情况下,或在所述第一同步子单元将转换所述数据结构后的所述全量数据文件同步至所述第二数据源之后,读取所述数据索引文件Ei中的所述增量文件行数;

第二判断子单元,用于根据所述增量文件行数判断是否进行增量数据同步;

以及

第二同步子单元,用于在所述第二判断子单元根据所述增量文件行数判断出进行所述增量数据同步的情况下,从所述第一数据源中读取增量数据文件,并按照所述目标数据的类型属性转换所述增量数据文件的数据结构,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源。

12.根据权利要求11所述的装置,其特征在于,所述第一同步子单元包括:第一查询模块,用于从所述第二数据源查询所述目标数据的所有键值;

第一存储模块,用于存储所述所有键值至临时文件;

第一判断模块,用于判断转换所述数据结构后的所述全量数据文件中的键值Kj’是否存在于所述临时文件中,其中,j’依次取1至m1,m1为所述全量数据文件中键值的总数量;

第一处理模块,用于在所述第一判断模块判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj’表示的数据更新为转换所述数据结构后的所述全量数据文件中所述键值Kj’表示的数据,并删除所述临时文件中的所述键值Kj’;

第二处理模块,用于在所述第一判断模块判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述全量数据文件中的所述键值Kj’表示的数据至所述第二数据源;以及第一删除模块,用于从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。

13.根据权利要求11所述的装置,其特征在于,所述第二同步子单元包括:第二查询模块,用于从所述第二数据源查询所述目标数据的所有键值;

第二存储模块,用于存储所述所有键值至临时文件;

第二判断模块,用于判断转换所述数据结构后的所述增量数据文件中的键值Kj”是否存在于所述临时文件中,其中,j”依次取1至m2,m2为所述增量数据文件中键值的总数量;

第三处理模块,用于在所述第二判断模块判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj”表示的数据更新为转换所述数据结构后的所述增量数据文件中所述键值Kj”表示的数据,并删除所述临时文件中的所述键值Kj”;

第四处理模块,用于在所述第二判断模块判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述增量数据文件中的所述键值Kj”表示的数据至所述第二数据源;以及第二删除模块,用于从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。

14.根据权利要求10所述的装置,其特征在于,所述装置还包括:

第二解析单元,用于在所述第一读取单元读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,解析预设的数据生成配置文件,得到需要生成的第一数据类型;

判断单元,用于判断所述第二数据源中是否存在类型为所述第一数据类型的数据;以及第一写入单元,用于在所述判断单元判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源。

15.根据权利要求14所述的装置,其特征在于,所述第一写入单元包括:第三判断子单元,用于判断第一全量数据文件的大小是否达到预设大小,其中,所述第一全量数据文件为所述第一数据源中当前进行数据写入的全量数据文件;

第一写入子单元,用于在所述第三判断子单元判断出所述第一全量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二全量数据文件,并将所述第二数据源中类型为所述第一数据类型的数据写入所述第二全量数据文件;以及第二写入子单元,用于在所述第三判断子单元判断出所述第一全量数据文件的大小未达到所述预设大小的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一全量数据文件。

16.根据权利要求10所述的装置,其特征在于,所述装置还包括:

接收单元,用于在所述第一读取单元读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,接收数据更新信息,其中,所述数据更新信息包括更新数据和所述更新数据的数据类型;

第三解析单元,用于解析预设的数据生成配置文件,得到与所述更新数据的数据类型对应的目标数据格式;

转换单元,用于将所述更新数据的格式转换为所述目标数据格式;以及

第二写入单元,用于将转换为所述目标数据格式的所述更新数据写入所述第一数据源。

17.根据权利要求16所述的装置,其特征在于,所述第二写入单元包括:第四判断子单元,用于判断第一增量数据文件的大小是否达到预设大小,其中,所述第一增量数据文件为所述第一数据源中当前进行数据写入的增量数据文件;

第三写入子单元,用于在所述第四判断子单元判断出所述第一增量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二增量数据文件,并将转换为所述目标数据格式的所述更新数据写入所述第二增量数据文件;以及第四写入子单元,用于在所述第四判断子单元判断出所述第一增量数据文件的大小未达到所述预设大小的情况下,将转换为所述目标数据格式的所述更新数据写入所述第一增量数据文件。

18.根据权利要求10所述的装置,其特征在于,所述目录索引文件为逗号分隔值CSV格式,所述数据索引文件E1至数据索引文件En均为CSV格式。

说明书 :

数据同步方法和装置

技术领域

[0001] 本发明涉及数据处理领域,具体而言,涉及一种数据同步方法和装置。

背景技术

[0002] 现有技术中,主要有三种数据同步方式,具体如下:
[0003] 方式一:基于数据库服务自带的方式对自身多数据库的数据同步。
[0004] 对于上述数据同步的方式,由于只有部分数据库自带数据同步功能,所以限制了数据库的选择,较适合单一固定的产品,用户无法根据其需求对要同步的数据进行筛选,导致不同的数据库之间数据同步的性能较差。并且,每次部署项目都需要对其进行单独部署,增加部署复杂度,且不同数据库配置方式不同,增加部署成本。
[0005] 方式二:基于第三方平台开发的多数据库之间的数据同步。
[0006] 对于上述数据同步的方式,能较好的支持多数据之间的同步,但是不适合用于缓存降低数据库压力的系统,数据的直接更新缓存获取从而导致缓存垃圾数据,并且此种同步方式对同步异构表的支持不足,不便于不同系统之间集成。
[0007] 方式三:基于XML为数据介质的网络或者本地数据同步方式。
[0008] 对于上述数据同步的方式,因为XML有严格的格式约定,存在对数据增量加入文件的方式支持不足,数据文件会庞大,占用磁盘空间较大的问题。而且,XML格式文件不支持文件续写,无法满足增量数据变更的实时续写文件,从而影响变更同步的实时性。
[0009] 针对上述的问题,目前尚未提出有效的解决方案。

发明内容

[0010] 本发明实施例提供了一种数据同步方法和装置,以至少解决现有技术中不同数据库之间进行数据同步的性能较差的技术问题。
[0011] 根据本发明实施例的一个方面,提供了一种数据同步方法,包括:读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录,其中,所述第一数据源用于提供数据同步所需的数据n为大于等于2的自然数;读取数据目录Di所包含的数据索引文件Ei,其中,所述数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成所述n个应用,数据目录D1至数据目录Dn构成所述n个应用的数据目录;解析所述应用Ai的更新配置文件,得到所述应用Ai中需要进行数据同步的目标数据的目录和所述目标数据的类型属性;以及根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步,其中,所述第二数据源为存储所述应用A1至所述应用An的数据源。
[0012] 进一步地,所述数据索引文件Ei中的变更信息包括全量更新时间和增量文件行数,根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步包括:读取所述数据索引文件Ei中的所述全量更新时间;根据所述全量更新时间判断是否进行全量数据同步;在根据所述全量更新时间判断出进行所述全量数据同步的情况下,从所述第一数据源中读取全量数据文件,并按照所述目标数据的类型属性转换所述全量数据文件的数据结构,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源;在根据所述全量更新时间判断出不进行所述全量数据同步的情况下,或在将转换所述数据结构后的所述全量数据文件同步至所述第二数据源之后,读取所述数据索引文件Ei中的所述增量文件行数;根据所述增量文件行数判断是否进行增量数据同步;以及在根据所述增量文件行数判断出进行所述增量数据同步的情况下,从所述第一数据源中读取增量数据文件,并按照所述目标数据的类型属性转换所述增量数据文件的数据结构,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源。
[0013] 进一步地,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源包括:从所述第二数据源查询所述目标数据的所有键值;存储所述所有键值至临时文件;判断转换所述数据结构后的所述全量数据文件中的键值Kj’是否存在于所述临时文件中,其中,j’依次取1至m1,m1为所述全量数据文件中键值的总数量;在判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj’表示的数据更新为转换所述数据结构后的所述全量数据文件中所述键值Kj’表示的数据,并删除所述临时文件中的所述键值Kj’;在判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述全量数据文件中的所述键值Kj’表示的数据至所述第二数据源;以及从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。
[0014] 进一步地,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源包括:从所述第二数据源查询所述目标数据的所有键值;存储所述所有键值至临时文件;判断转换所述数据结构后的所述增量数据文件中的键值Kj”是否存在于所述临时文件中,其中,j”依次取1至m2,m2为所述增量数据文件中键值的总数量;在判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj”表示的数据更新为转换所述数据结构后的所述增量数据文件中所述键值Kj”表示的数据,并删除所述临时文件中的所述键值Kj”;在判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述增量数据文件中的所述键值Kj”表示的数据至所述第二数据源;以及从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。
[0015] 进一步地,在读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,所述方法还包括:解析预设的数据生成配置文件,得到需要生成的第一数据类型;判断所述第二数据源中是否存在类型为所述第一数据类型的数据;以及在判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源。
[0016] 进一步地,在判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源包括:判断第一全量数据文件的大小是否达到预设大小,其中,所述第一全量数据文件为所述第一数据源中当前进行数据写入的全量数据文件;在判断出所述第一全量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二全量数据文件,并将所述第二数据源中类型为所述第一数据类型的数据写入所述第二全量数据文件;以及在判断出所述第一全量数据文件的大小未达到所述预设大小的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一全量数据文件。
[0017] 进一步地,在读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,所述方法还包括:接收数据更新信息,其中,所述数据更新信息包括更新数据和所述更新数据的数据类型;解析预设的数据生成配置文件,得到与所述更新数据的数据类型对应的目标数据格式;将所述更新数据的格式转换为所述目标数据格式;以及将转换为所述目标数据格式的所述更新数据写入所述第一数据源。
[0018] 进一步地,将转换为所述目标数据格式的所述更新数据写入所述第一数据源包括:判断第一增量数据文件的大小是否达到预设大小,其中,所述第一增量数据文件为所述第一数据源中当前进行数据写入的增量数据文件;在判断出所述第一增量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二增量数据文件,并将转换为所述目标数据格式的所述更新数据写入所述第二增量数据文件;以及在判断出所述第一增量数据文件的大小未达到所述预设大小的情况下,将转换为所述目标数据格式的所述更新数据写入所述第一增量数据文件。
[0019] 进一步地,所述目录索引文件为CSV(逗号分隔值,Comma-Separated Values)格式,所述数据索引文件E1至数据索引文件En均为CSV格式。
[0020] 根据本发明实施例的另一方面,还提供了一种数据同步装置,包括:第一读取单元,用于读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录,其中,所述第一数据源用于提供数据同步所需的数据,n为大于等于2的自然数;第二读取单元,用于读取数据目录Di所包含的数据索引文件Ei,其中,所述数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成所述n个应用,数据目录D1至数据目录Dn构成所述n个应用的数据目录;第一解析单元,用于解析所述应用Ai的更新配置文件,得到所述应用Ai中需要进行数据同步的目标数据的目录和所述目标数据的类型属性;以及同步单元,用于根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步,其中,所述第二数据源为存储所述应用A1至所述应用An的数据源。
[0021] 进一步地,所述数据索引文件Ei中的变更信息包括全量更新时间和增量文件行数,所述同步单元包括:第一读取子单元,用于读取所述数据索引文件Ei中的所述全量更新时间;第一判断子单元,用于根据所述全量更新时间判断是否进行全量数据同步;第一同步子单元,用于在所述第一判断子单元根据所述全量更新时间判断出进行所述全量数据同步的情况下,从所述第一数据源中读取全量数据文件,并按照所述目标数据的类型属性转换所述全量数据文件的数据结构,将转换所述数据结构后的所述全量数据文件同步至所述第二数据源;第二读取子单元,用于在所述第一判断子单元根据所述全量更新时间判断出不进行所述全量数据同步的情况下,或在所述第一同步子单元将转换所述数据结构后的所述全量数据文件同步至所述第二数据源之后,读取所述数据索引文件Ei中的所述增量文件行数;第二判断子单元,用于根据所述增量文件行数判断是否进行增量数据同步;以及第二同步子单元,用于在所述第二判断子单元根据所述增量文件行数判断出进行所述增量数据同步的情况下,从所述第一数据源中读取增量数据文件,并按照所述目标数据的类型属性转换所述增量数据文件的数据结构,将转换所述数据结构后的所述增量数据文件同步至所述第二数据源。
[0022] 进一步地,所述第一同步子单元包括:第一查询模块,用于从所述第二数据源查询所述目标数据的所有键值;第一存储模块,用于存储所述所有键值至临时文件;第一判断模块,用于判断转换所述数据结构后的所述全量数据文件中的键值Kj’是否存在于所述临时文件中,其中,j’依次取1至m1,m1为所述全量数据文件中键值的总数量;第一处理模块,用于在所述第一判断子模块判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj’表示的数据更新为转换所述数据结构后的所述全量数据文件中所述键值Kj’表示的数据,并删除所述临时文件中的所述键值Kj’;第二处理模块,用于在所述第一判断子模块判断出转换所述数据结构后的所述全量数据文件中的所述键值Kj’不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述全量数据文件中的所述键值Kj’表示的数据至所述第二数据源;以及第一删除模块,用于从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。
[0023] 进一步地,所述第二同步子单元包括:第二查询模块,用于从所述第二数据源查询所述目标数据的所有键值;第二存储模块,用于存储所述所有键值至临时文件;第二判断模块,用于判断转换所述数据结构后的所述增量数据文件中的键值Kj”是否存在于所述临时文件中,其中,j”依次取1至m2,m2为所述增量数据文件中键值的总数量;第三处理模块,用于在所述第二判断子模块判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”存在于所述临时文件中的情况下,将所述第二数据源中所述键值Kj”表示的数据更新为转换所述数据结构后的所述增量数据文件中所述键值Kj”表示的数据,并删除所述临时文件中的所述键值Kj”;第四处理模块,用于在所述第二判断子模块判断出转换所述数据结构后的所述增量数据文件中的所述键值Kj”不存在于所述临时文件中的情况下,保存转换所述数据结构后的所述增量数据文件中的所述键值Kj”表示的数据至所述第二数据源;以及第二删除模块,用于从所述第二数据源中删除所述临时文件中剩余的键值表示的数据。
[0024] 进一步地,所述装置还包括:第二解析单元,用于在所述第一读取单元读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,解析预设的数据生成配置文件,得到需要生成的第一数据类型;判断单元,用于判断所述第二数据源中是否存在类型为所述第一数据类型的数据;以及第一写入单元,用于在所述判断单元判断出所述第二数据源中存在类型为所述第一数据类型的数据的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一数据源。
[0025] 进一步地,所述第一写入单元包括:第三判断子单元,用于判断第一全量数据文件的大小是否达到预设大小,其中,所述第一全量数据文件为所述第一数据源中当前进行数据写入的全量数据文件;第一写入子单元,用于在所述第三判断子单元判断出所述第一全量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二全量数据文件,并将所述第二数据源中类型为所述第一数据类型的数据写入所述第二全量数据文件;以及第二写入子单元,用于在所述第三判断子单元判断出所述第一全量数据文件的大小未达到所述预设大小的情况下,将所述第二数据源中类型为所述第一数据类型的数据写入所述第一全量数据文件。
[0026] 进一步地,所述装置还包括:接收单元,用于在所述第一读取单元读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录之前,接收数据更新信息,其中,所述数据更新信息包括更新数据和所述更新数据的数据类型;第三解析单元,用于解析预设的数据生成配置文件,得到与所述更新数据的数据类型对应的目标数据格式;转换单元,用于将所述更新数据的格式转换为所述目标数据格式;以及第二写入单元,用于将转换为所述目标数据格式的所述更新数据写入所述第一数据源。
[0027] 进一步地,所述第二写入单元包括:第四判断子单元,用于判断第一增量数据文件的大小是否达到预设大小,其中,所述第一增量数据文件为所述第一数据源中当前进行数据写入的增量数据文件;第三写入子单元,用于在所述第四判断子单元判断出所述第一增量数据文件的大小达到所述预设大小的情况下,在所述第一数据源中创建第二增量数据文件,并将转换为所述目标数据格式的所述更新数据写入所述第二增量数据文件;以及第四写入子单元,用于在所述第四判断子单元判断出所述第一增量数据文件的大小未达到所述预设大小的情况下,将转换为所述目标数据格式的所述更新数据写入所述第一增量数据文件。
[0028] 进一步地,所述目录索引文件为CSV格式,所述数据索引文件E1至数据索引文件En均为CSV格式。
[0029] 在本发明实施例中,采用读取第一数据源中的目录索引文件,得到所述目录索引文件所包含的n个应用的数据目录,其中,所述第一数据源用于提供数据同步所需的数据,n为大于等于2的自然数;读取数据目录Di所包含的数据索引文件Ei,其中,所述数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成所述n个应用,数据目录D1至数据目录Dn构成所述n个应用的数据目录;解析所述应用Ai的更新配置文件,得到所述应用Ai中需要进行数据同步的目标数据的目录和所述目标数据的类型属性;以及根据所述数据索引文件Ei中的变更信息,按照所述目标数据的类型属性转换所述第一数据源中的数据的数据结构,第二数据源获取所述第一数据源中转换所述数据结构后的数据,完成数据同步,其中,所述第二数据源为存储所述应用A1至所述应用An的数据源。通过以索引文件方式记录数据的情况,在进行数据同步过程中,通过读取索引文件的方式进行数据更新,实现了数据快速、有序、高效地读写,达到了提高数据同步效率的技术效果,进而解决了现有技术中不同的数据库之间数据同步的性能较差的技术问题。

附图说明

[0030] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0031] 图1是根据本发明实施例的数据同步方法的流程图;
[0032] 图2是根据本发明实施例的数据同步方法中目录索引文件和数据索引文件的目录结构图;
[0033] 图3是根据本发明又一实施例的数据同步方法的流程图;
[0034] 图4是根据本发明实施例的数据同步方法中进行全量同步的流程图;
[0035] 图5是根据本发明实施例的数据同步方法中进行增量同步的流程图;
[0036] 图6是根据本发明实施例的数据同步方法中生成全量数据的流程图;
[0037] 图7是根据本发明实施例的数据同步方法中生成增量数据的流程图;以及[0038] 图8是根据本发明实施例的数据同步装置的示意图。

具体实施方式

[0039] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0040] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0041] 根据本发明实施例,提供了一种数据同步方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0042] 图1是根据本发明实施例的数据同步方法的流程图,如图1所示,该方法主要包括如下步骤S102至步骤S108:
[0043] 步骤S102,读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录,其中,第一数据源用于提供数据同步所需的数据,目录索引文件采用CSV格式,n为大于等于2的自然数;
[0044] 步骤S104,读取数据目录Di所包含的数据索引文件Ei,其中,数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成n个应用,数据目录D1至数据目录Dn构成n个应用的数据目录,数据索引文件E1至数据索引文件En均采用CSV格式;
[0045] 步骤S106,解析应用Ai的更新配置文件,得到应用Ai中需要进行数据同步的目标数据的目录和目标数据的类型属性,其中,更新配置文件存储在需要同步的数据库中,在本发明实施例中,第二数据源为需要进行数据同步的数据库,更新配置文件存在第一数据源中。对更新配置文件的解析则可以采用任意一种进行配置文件解析的方式,此处不再赘述;
[0046] 步骤S108,根据数据索引文件Ei中的变更信息,按照目标数据的类型属性转换第一数据源中的数据的数据结构,第二数据源获取第一数据源中转换数据结构后的数据,完成数据同步,即,以数据索引文件Ei中的变更信息为基准,同步第一数据源中的数据至第二数据源,其中,第二数据源为存储应用A1至应用An的数据源。
[0047] 本发明实施例所提供的数据同步方法,通过以索引文件方式记录数据的情况,在进行数据同步过程中,通过读取索引文件的方式进行数据更新,实现了数据快速、有序、高效地读写,达到了提高数据同步效率的技术效果,进而解决了现有技术中不同的数据库之间数据同步的性能较差的技术问题。
[0048] 图2是根据本发明实施例的数据同步方法中目录索引文件和数据索引文件的目录结构图,如图2所示,在数据文件根目录下的是目录索引文件,目录索引文件描述当前数据同步的应用目录区分,每个目录下都包含一份数据索引文件。目录索引文件的作用是可以区分当前数据来源于哪些应用,并且避免应用间数据文件的覆盖;数据索引文件的作用是记录数据的全量、增量同步,同步的时间、区间以及同步文件名。
[0049] 在图2中,示意性示出了目录索引文件包括应用1至应用n的数据目录,对于任一应用的数据目录来说,在该数据目录下的是该应用的数据索引文件,数据索引文件主要包括该应用各种数据类型的目录,其中,对于某一种数据类型目录来说,在该目录下又包括全量数据目录和增量数据目录,全量数据目录下存储的是全量数据文件,增量数据目录下存储的增量数据文件。其中,为了实现读写分离,避免某个数据目录下数据文件在进行数据读取的时候又写入新的数据,设置在数据索引文件下的各种数据类型的目录为随机数据目录。
[0050] 进一步地,在本发明实施例中,目录索引文件和数据索引文件均采用CSV格式,目录索引文件的格式在下表1中示出,数据索引文件的格式在下表2中示出:
[0051] 表1
[0052]应用类型 应用编号 应用目录 更新时间 排序号
appType appCode appDir updateTime sort
[0053] 其中,对于目录索引文件的格式作如下说明:
[0054] 应用编号(appCode)必须保持唯一,一个应用实例只有一条索引记录。
[0055] 排序号(sort)是保证同步时,读取应用数据能够按照排序号的大小进行顺序读取。
[0056] 表2
[0057]
[0058] 其中,对于数据索引文件的格式作如下说明:
[0059] 数据类型(dataType)必须保持唯一,一种数据类型只有一条索引记录。
[0060] 随机目录(syncDir)在数据生成过能中,用于读写分离,在重复生成数据文件的过程中,以随机目录分开,避免相同目录的数据文件正在被读取时造成冲突;在数据同步过能中,用于指明当前需要同步的数据文件所在的目录。
[0061] 全量更新时间(fullUpdateTime)表示最近一次全量数据文件生成的时间,为全量数据同步提供比较依据。
[0062] 全量目录(fullDir)表示全量数据文件的目录,属于随机目录syncDir的子目录。
[0063] 全量文件名(fullFileName)表示全量数据文件名的前缀。
[0064] 全量文件数(fullCount)表示该类全量数据文件的分片个数,结合fullFileName组合确定全量数据文件名。例:fullCount=3,fullFileName=User;则全量数据文件名分别为:User.0.csv,User.1.csv,User.2.csv,文件序号从0开始。
[0065] 增量文件目录(increDir)表示增量数据文件的目录,也属于syncDir的子目录。
[0066] 增量文件名(increFileName)表示增量数据文件名的前缀。
[0067] 增量更新行号(increRowId)表示增量文件行数,格式[分片数.行号]。例:increRowId=3.3,表示有3个分片文件,且第1和第2个分片已满,第3个分片文件有3行数据;结合increFileName得到增量数据文件名分别为:User.0.csv,User.1.csv,User.2.csv,文件序号从0开始,规则同全量文件名相同。
[0068] 利用CSV数据格式进行索引,实现了提供一种开放式且标准的数据格式,方便第三方系统解析和集成,同时结合索引的特点保证,保证数据快速,有序,高效的读写。
[0069] 图3是根据本发明又一实施例的数据同步方法的流程图,如图3所示,该方法主要包括如下步骤S301至步骤S312:
[0070] 步骤S301,判断是否有权限读取第一数据源,其中,在判断出有权限对第一数据源进行读取的情况下,依次执行如下步骤S302至步骤S312,在判断出没有权限的情况下,则结束流程。具体地,判断是否有权限读取第一数据源可以采用任意一种进行权限验证的方式,在本发明实施例中,进行权限验证,主要是为了防止数据泄露或者被非法获取,提高数据安全性。
[0071] 步骤S302,读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录,具体地,同上述步骤S102。
[0072] 步骤S303,从第一数据源中读取数据目录Di所包含的数据索引文件Ei,其中,数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,即,对每一个应用的数据目录均执行数据索引文件读取,相应地,同样还需执行后续步骤S304至步骤S312,该步骤S303同上述步骤S104。
[0073] 步骤S304,解析应用Ai的更新配置文件,得到应用Ai中需要进行数据同步的目标数据和目标数据的类型属性,其中,更新配置文件存储在需要同步的数据库中,在本发明实施例中,第二数据源为需要进行数据同步的数据库,更新配置文件存在第一数据源中。对更新配置文件的解析则可以采用任意一种进行配置文件解析的方式,此处不再赘述,该步骤S304同上述步骤S106。
[0074] 步骤S305,判断是否对第二数据源进行全量数据同步,具体地,在本发明实施例中,进行全量同步与否的判断主要是读取索引文件Ei中的全量更新时间,然后根据全量更新时间判断是否进行全量数据同步,如果第一数据源中索引文件Ei的全量更新时间与第二数据源中索引文件Ei的全量更新时间不一致,则确定需要对第二数据源进行全量数据同步,反之则不进行全量数据同步。
[0075] 步骤S306,在判断出需要对第二数据源进行全量数据同步的情况下,从第一数据源中读取全量数据文件,然后以应用Ai中的目标数据的类型属性为基准,将全量数据文件同步至第二数据源,具体地,可以按照步骤S307和步骤S308执行。
[0076] 步骤S307,按照更新配置文件中,需要进行数据同步的目标数据的类型属性来转换全量数据文件的数据结构。
[0077] 步骤S308,将转换数据结构后的全量数据文件同步至第二数据源。
[0078] 步骤S309,在将转换数据结构后的全量数据文件同步至第二数据源之后,或在判断出不对第二数据源进行全量数据同步的情况下,判断是否对第二数据源进行增量数据同步。具体地,在将转换数据结构后的全量数据文件同步至第二数据源之后,进行增量同步与否的判断主要是判断增量更新行号是否大于零,在大于零的情况下,即确定需要进行增量数据同步,反之,则不进行增量数据同步;在判断出不对第二数据源进行全量数据同步的情况下,进行增量同步与否的判断主要是第二数据源中增量更新行号是否小于第一数据源中对应的增量更新行号,如果小于的话,即确定需要进行增量数据同步,反之,则不进行增量数据同步。
[0079] 步骤S310,在判断出需要对第二数据源进行增量数据同步的情况下,从第一数据源中读取增量数据文件,然后以应用Ai中的目标数据的类型属性为基准,将增量数据文件同步至第二数据源,具体地,可以按照步骤S311和步骤S312执行。
[0080] 步骤S311,按照更新配置文件中,需要进行数据同步的目标数据的类型属性来转换增量数据文件的数据结构。
[0081] 步骤S312,将转换数据结构后的增量数据文件同步至第二数据源。
[0082] 其中,步骤S305至步骤S312相当于上述步骤S108。
[0083] 图4是根据本发明实施例的数据同步方法中进行全量同步的流程图,如图4所示,将转换数据结构后的全量数据文件同步至第二数据源主要包括如下步骤S401至步骤S406:
[0084] 步骤S401,从第二数据源查询目标数据的所有键值,具体地,按照目标数据的数据类型,对每一类数据依次进行键值的查找,即,对每一类数据均执行步骤S401至步骤S406。
[0085] 步骤S402,存储所有键值至临时文件。
[0086] 步骤S403,判断转换数据结构后的全量数据文件中的键值Kj’是否存在于临时文件中,其中,j’依次取1至m1,m1为全量数据文件中键值的总数量。
[0087] 步骤S404,在判断出转换数据结构后的全量数据文件中的键值Kj’存在于临时文件中的情况下,将第二数据源中键值Kj’表示的数据更新为转换数据结构后的全量数据文件中键值Kj’表示的数据,并删除临时文件中的键值Kj’,即,以第一数据源中的数据为基准,更新两个数据源中均存在的键值所表示的数据。
[0088] 步骤S405,在判断出转换数据结构后的全量数据文件中的键值Kj’不存在于临时文件中的情况下,保存转换数据结构后的全量数据文件中的键值Kj’表示的数据至第二数据源,如果全量数据文件中的某个键值不存在于临时文件中,则表示这个键值所表示的数据为新增数据,此种情况,将新增的数据保存至第二数据源。
[0089] 步骤S406,从第二数据源中删除临时文件中剩余的键值表示的数据,即,删除第二数据源中需要被删除掉的数据。
[0090] 图5是根据本发明实施例的数据同步方法中进行增量同步的流程图,如图5所示,将转换数据结构后的全量数据文件同步至第二数据源主要包括如下步骤S501至步骤S506:
[0091] 步骤S501,从第二数据源查询目标数据的所有键值,具体地,按照目标数据的数据类型,对每一类数据依次进行键值的查找,即,对每一类数据均执行步骤S501至步骤S506。
[0092] 步骤S502,存储所有键值至临时文件。
[0093] 步骤S503,判断转换数据结构后的增量数据文件中的键值Kj”是否存在于临时文件中,其中,j”依次取1至m2,m2为增量数据文件中键值的总数量。
[0094] 步骤S504,在判断出转换数据结构后的增量数据文件中的键值Kj”存在于临时文件中的情况下,将第二数据源中键值Kj”表示的数据更新为转换数据结构后的增量数据文件中键值Kj”表示的数据,并删除临时文件中的键值Kj”,即,以第一数据源中的数据为基准,更新两个数据源中均存在的键值所表示的数据。
[0095] 步骤S505,在判断出转换数据结构后的增量数据文件中的键值Kj”不存在于临时文件中的情况下,保存转换数据结构后的增量数据文件中的键值Kj”表示的数据至第二数据源,如果全量数据文件中的某个键值不存在于临时文件中,则表示这个键值所表示的数据为新增数据,此种情况,将新增的数据保存至第二数据源。
[0096] 步骤S506,从第二数据源中删除临时文件中剩余的键值表示的数据,即,删除第二数据源中需要被删除掉的数据。
[0097] 进一步地,在对第一数据源中的目录索引文件进行读取之前,本发明实施例所提供的数据同步方法还包括生成全量数据和增量数据,图6是根据本发明实施例的数据同步方法中生成全量数据的流程图,图7是根据本发明实施例的数据同步方法中生成增量数据的流程图,以下结合附图具体说明:
[0098] 如图6所示,本发明实施例所提供的数据同步方法中生成全量数据主要包括如下步骤S601至步骤S606:
[0099] 步骤S601,解析预设的数据生成配置文件,得到需要生成的第一数据类型,然后判断第二数据源中是否存在类型为第一数据类型的数据,在解析步骤中,还可以解析得到第一数据格式,以便后续进行数据同步的过程中,能够将数据文件内数据转换为程序能够识别的对象格式(即,第一数据格式)。
[0100] 其中,得到的第一数据类型可以包括多个不同的数据类型,判断第二数据源中是否存在类型为第一数据类型的数据可以按照步骤S602和步骤S603执行。
[0101] 步骤S602:对于每一种数据类型,向第二数据源进行查找。
[0102] 步骤S603,判断是否查找到该数据类型的数据,在判断出查找到某一数据类型的数据的情况下,将第二数据源中该类型的数据写入第一数据源,并返回步骤S602进行下一数据类型的查找和判断;在判断出未查找到某一数据类型的数据的情况下,则直接跳过这一数据类型,返回步骤S602继续进行下一数据类型的查找和判断。直至解析出的所有第一数据类型均查找结束,写入第一数据源的数据即是生成的全量数据。
[0103] 具体地,将第二数据源中类型为第一数据类型的数据写入第一数据源主要包括步骤S604至步骤S606:
[0104] 步骤S604,判断第一全量数据文件的大小是否达到预设大小,其中,第一全量数据文件为第一数据源中当前进行数据写入的全量数据文件,在本发明实施例中,可以将一个全量数据文件的上限大小设置为100W条,即,预设大小为100W条。
[0105] 步骤S605,在判断出第一全量数据文件的大小达到预设大小的情况下,在第一数据源中创建第二全量数据文件,并将第二数据源中类型为第一数据类型的数据写入第二全量数据文件,即,在第一全量数据文件的大小超过设置上限的情况下,进行文件分片。
[0106] 步骤S606,在判断出第一全量数据文件的大小未达到预设大小的情况下,将第二数据源中类型为第一数据类型的数据写入第一全量数据文件。
[0107] 如图7所示,本发明实施例所提供的数据同步方法中生成增量数据主要包括如下步骤S701至步骤S706:
[0108] 步骤S701,接收数据更新信息,其中,数据更新信息包括更新数据和更新数据的数据类型,系统出现数据变更后,可以通过消息队列(Message Queue,简称MQ)的方式发送数据更新消息给第二数据源,以通知数据变更。
[0109] 步骤S702,解析预设的数据生成配置文件,得到与更新数据的数据类型对应的目标数据格式。
[0110] 步骤S703,将更新数据的格式转换为目标数据格式,然后将转换为目标数据格式的更新数据写入第一数据源。
[0111] 其中,将转换为目标数据格式的更新数据写入第一数据源主要按照步骤S704至步骤S706执行:
[0112] 步骤S704,判断第一增量数据文件的大小是否达到预设大小,其中,第一增量数据文件为第一数据源中当前进行数据写入的增量数据文件,在本发明实施例中,可以将一个增量数据文件的上限大小设置为100W条,即,预设大小为100W条。
[0113] 步骤S705,在判断出第一增量数据文件的大小达到预设大小的情况下,在第一数据源中创建第二增量数据文件,并将转换为目标数据格式的更新数据写入第二增量数据文件,即,在第一增量数据文件的大小超过设置上限的情况下,进行文件分片。
[0114] 步骤S706,在判断出第一增量数据文件的大小未达到预设大小的情况下,将转换为目标数据格式的更新数据写入第一增量数据文件。
[0115] 在大数据同步过程中,如果单个文件太大的话,会降低解析性能,本发明实施例所提供的数据同步方法,考虑到大数据的同步,采用分文件的形式,存储大数据,经过测试默认推荐文件大小(100万条/文件),100万条/文件的大小对于一般的系统来说数据够用,并且解析性能较高,达到了既能满足小数据同步的实时效果,又能快速进行大数据同步。
[0116] 进一步地,在本发明实施例中,任一配置文件均可以采用XML配置文件作为元数据的格式约定文件,以满足随着应用系统功能的不断增加、不断完善以及不同的定制需要,所带来的对数据的同步和生成也有不同的需求。
[0117] XML配置文件具有很好的可读性,并且配以XSD文件,帮助规范、正确的定制XML配置文件,并且具有代码无侵入性的特点,在定制项目的情况下,只改变XML就可以满足数据的定制。
[0118] 格式约定说明:
[0119] 根节点:唯一,用于定义数据文件的编码格式、相对存储路径,索引文件等。
[0120] 数据节点:是数据的基本格式单位,一种数据类型只能定义一个data节点,dataConvert内可以有多不同的data。并可以指定数据序列化的对象类型,进行序列号和反序列化。
[0121] 属性节点:包含多个,定义数据的属性键值对,作为序列化和反序列化的依据,支持数据的映射转换,以满足同步方的数据要求。
[0122] 默认节点:包含多个未被fields定义的属性键值对,为序列化时提供默认值,不在需要同步方编码处理。
[0123] 默认节点:包含多个不需要进行数据同步的属性键值对,以方便数据同步的定制配置。
[0124] 默认节点:包含多个需要定制同步更新模式的属性,以方便数据同步时数据值冲突的解决和数据可用性的保证。
[0125] 隐含约束:
[0126] 数据类型的同步顺序,按照data定义的先后顺序执行,解决依赖数据的入库顺序问题。
[0127] 不同步数据中属性值空的属性。
[0128] 数据内容无变更时不同步。
[0129] 配置使用场景:
[0130] 一般情况下,数据生成一方的系统生成的数据建议不进行转换、过滤和映射等功能,统一由同步方根据需求去配置转换、过滤和映射,因为如果有多个不同的同步方时,数据生成一方数据转换、过滤和映射不能满足各方需求。
[0131] 两个系统之间进行数据同步可以使用一份相同的XML配置文件进行,数据生成和同步。
[0132] 一方系统升级,需要升级XML配置文件,以满足系统的数据同步需求,只需要在原来XML格式基础上进行追加,不改变原配置相关属性,即可兼容不同系统需要。
[0133] 如果升级的系统去同步老系统的配置,只需要升级的系统中与老系统中有差异的配置项在升级的系统中非必填,即可同步接入。
[0134] 利用XML配置文件对数据进行同步过程中,主要是对数据进行映射、转换和过滤等功能,达到了如下技术效果:
[0135] (1)解决不同数据源之间对象不一致的问题,提高兼容性
[0136] 具体地,可以通过XML配置的数据节点标签映射进入数据源对象的属性,并且可以支持MAP方式。通过默认节点标签设置数据默认值,满足部分数据源对象数据必须有值,但是数据同步并无该数据。
[0137] (2)值映射,使进入数据源的数据符合数据源的约定要求
[0138] 通过在属性节点定义mapping映射的方式,把同步的数据值转换成数据源所需值,以符合系统原有定义。
[0139] (3)值过滤,使数据源无法处理的值不入库
[0140] 或模式:通过valueExclude设置过滤值,只要符合其中一个值,该条数据过滤。
[0141] 并模式:通过valueExclude设置过滤值,符合所有条件,该条数据才能被过滤。
[0142] (4)属性值冲突解决,可以根据系统不同的业务需求,处理数据冲突的同步文件。
[0143] 默认模式:无需配置,以数据文件为准属性全部同步。
[0144] Blank模式:配置updateExclude的属性模式,空或者null值时,属性不更新。
[0145] 零值模式:配置updateExclude的属性模式,0值时,属性不更新。
[0146] 冲突模式:配置updateExclude的属性模式,同步属性值冲突时不更新,以当前系统为准。
[0147] 强制模式:配置updateExclude的属性模式,忽略数据同步的数据。
[0148] 配置文件的使用实现了数据的定制化和同步的数据源集成的简化,同步双方以相同的基本格式定义,在无系统自定义需求的前提下,可以使用同一份配置,即可集成数据同步文件生成和数据同步;同时对于有定制需求的系统,又可以通过配置进行无代码侵入的方式快速实现定制。数据源系统的集成涉及各种不确定因素,通过多个模式的配置,可以解决大部分系统的自定义需求,简化和方便系统集成的数据同步,包括新系统集成和已运行系统的集成。
[0149] 本发明实施例还提供了一种数据同步装置,以下对本发明实施例所提供的数据同步装置做具体介绍:
[0150] 图8是根据本发明实施例的数据同步装置的示意图,如图8所示,该数据同步装置主要包括第一读取单元10、第二读取单元20、第一解析单元30和同步单元40,其中:
[0151] 第一读取单元10用于读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录,其中,第一数据源用于提供数据同步所需的数据,目录索引文件采用CSV格式,n为大于等于2的自然数。
[0152] 第二读取单元20用于读取数据目录Di所包含的数据索引文件Ei,其中,数据索引文件Ei包括应用Ai中数据的变更信息,i依次取1至n,应用A1至应用An构成n个应用,数据目录D1至数据目录Dn构成n个应用的数据目录,数据索引文件E1至数据索引文件En均采用CSV格式。
[0153] 第一解析单元30用于解析应用Ai的更新配置文件,得到应用Ai中需要进行数据同步的目标数据和目标数据的类型属性,其中,更新配置文件存储在需要同步的数据库中,在本发明实施例中,第二数据源为需要进行数据同步的数据库,更新配置文件存在第一数据源中。对更新配置文件的解析则可以采用任意一种进行配置文件解析的方式,此处不再赘述。
[0154] 同步单元40用于以数据索引文件Ei中的变更信息和应用Ai中的目标数据的类型属性为基准,同步第一数据源中的数据至第二数据源,其中,第二数据源为存储应用A1至应用An的数据源。
[0155] 本发明实施例所提供的数据同步装置,通过以索引文件方式记录数据的情况,在进行数据同步过程中,通过读取索引文件的方式进行数据更新,实现了数据快速、有序、高效地读写,达到了提高数据同步效率的技术效果,进而解决了现有技术中不同的数据库之间数据同步的性能较差的技术问题。
[0156] 在本发明实施例中,目录索引文件和数据索引文件均采用CSV格式,利用CSV数据格式进行索引,实现了提供一种开放式且标准的数据格式,方便第三方系统解析和集成,同时结合索引的特点保证,保证数据快速,有序,高效的读写。
[0157] 进一步地,同步单元40主要包括具有以下功能的多个子单元:
[0158] 第一读取子单元,用于读取数据索引文件Ei中的全量更新时间。
[0159] 第一判断子单元,用于根据全量更新时间判断是否进行全量数据同步。
[0160] 第一同步子单元,用于在第一判断子单元根据全量更新时间判断出进行全量数据同步的情况下,从第一数据源中读取全量数据文件,并以应用Ai中的目标数据的类型属性为基准,将全量数据文件同步至第二数据源;其中,如果第一数据源中索引文件Ei的全量更新时间与第二数据源中索引文件Ei的全量更新时间不一致,则确定需要对第二数据源进行全量数据同步,反之则不进行全量数据同步。第一同步子单元主要是按照目标数据的类型属性转换全量数据文件的数据结构,然后将转换数据结构后的全量数据文件同步至第二数据源。
[0161] 第二读取子单元,用于在第一判断子单元根据全量更新时间判断出不进行全量数据同步的情况下,或在第一同步子单元将转换数据结构后的全量数据文件同步至第二数据源之后,读取数据索引文件Ei中的增量文件行数。
[0162] 第二判断子单元,用于根据增量文件行数判断是否进行增量数据同步,其中,进行增量同步与否的判断主要是判断增量更新行号是否大于零,在大于零的情况下,即确定需要进行增量数据同步,反之,则不进行增量数据同步;在判断出不对第二数据源进行全量数据同步的情况下,进行增量同步与否的判断主要是第二数据源中增量更新行号是否小于第一数据源中对应的增量更新行号,如果小于的话,即确定需要进行增量数据同步,反之,则不进行增量数据同步。
[0163] 第二同步子单元,用于在第二判断子单元根据增量文件行数判断出进行增量数据同步的情况下,从第一数据源中读取增量数据文件,并以应用Ai中的目标数据的类型属性为基准,将增量数据文件同步至第二数据源。第二同步子单元主要是按照目标数据的类型属性转换增量数据文件的数据结构;然后将转换数据结构后的增量数据文件同步至第二数据源。
[0164] 进一步地,第一同步子单元主要包括具有以下功能的多个模块:
[0165] 第一查询模块,用于从第二数据源查询目标数据的所有键值,具体地,第一查询子模块按照目标数据的数据类型,对每一类数据依次进行键值的查找,即,对每一类数据均执行第一同步模块的多个子模块的功能。
[0166] 第一存储模块,用于存储所有键值至临时文件。
[0167] 第一判断模块,用于判断转换数据结构后的全量数据文件中的键值Kj’是否存在于临时文件中,其中,j’依次取1至m1,m1为全量数据文件中键值的总数量。
[0168] 第一处理模块,用于在第一判断模块判断出转换数据结构后的全量数据文件中的键值Kj’存在于临时文件中的情况下,将第二数据源中键值Kj’表示的数据更新为转换数据结构后的全量数据文件中键值Kj’表示的数据,并删除临时文件中的键值Kj’,即,以第一数据源中的数据为基准,更新两个数据源中均存在的键值所表示的数据。
[0169] 第二处理模块,用于在第一判断模块判断出转换数据结构后的全量数据文件中的键值Kj’不存在于临时文件中的情况下,保存转换数据结构后的全量数据文件中的键值Kj’表示的数据至第二数据源,如果全量数据文件中的某个键值不存在于临时文件中,则表示这个键值所表示的数据为新增数据,此种情况,将新增的数据保存至第二数据源。
[0170] 第一删除模块,用于从第二数据源中删除临时文件中剩余的键值表示的数据,即,删除第二数据源中需要被删除掉的数据。
[0171] 第二同步子单元主要包括具有以下功能的多个模块:
[0172] 第二查询模块,用于从第二数据源查询目标数据的所有键值,具体地,第二查询模块按照目标数据的数据类型,对每一类数据依次进行键值的查找,即,对每一类数据均执行第二同步模块的多个子模块的功能。
[0173] 第二存储模块,用于存储所有键值至临时文件。
[0174] 第二判断模块,用于判断转换数据结构后的增量数据文件中的键值Kj”是否存在于临时文件中,其中,j”依次取1至m2,m2为增量数据文件中键值的总数量。
[0175] 第三处理模块,用于在第二判断模块判断出转换数据结构后的增量数据文件中的键值Kj”存在于临时文件中的情况下,将第二数据源中键值Kj”表示的数据更新为转换数据结构后的增量数据文件中键值Kj”表示的数据,并删除临时文件中的键值Kj”,即,以第一数据源中的数据为基准,更新两个数据源中均存在的键值所表示的数据。
[0176] 第四处理模块,用于在第二判断模块判断出转换数据结构后的增量数据文件中的键值Kj”不存在于临时文件中的情况下,保存转换数据结构后的增量数据文件中的键值Kj”表示的数据至第二数据源,如果全量数据文件中的某个键值不存在于临时文件中,则表示这个键值所表示的数据为新增数据,此种情况,将新增的数据保存至第二数据源。
[0177] 第四删除模块,用于从第二数据源中删除临时文件中剩余的键值表示的数据,即,删除第二数据源中需要被删除掉的数据。
[0178] 进一步地,本发明实施例所提供的数据同步装置还包括第二解析单元、判断单元和第一写入单元,其中:
[0179] 第二解析单元用于在第一读取单元读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录之前,解析预设的数据生成配置文件,得到需要生成的第一数据类型,在该解析过程中,还可以解析得到第一数据格式,以便后续进行数据同步的过程中,能够将数据文件内数据转换为程序能够识别的对象格式(即,第一数据格式)。
[0180] 判断单元用于判断第二数据源中是否存在类型为第一数据类型的数据。
[0181] 第一写入单元用于在判断单元判断出第二数据源中存在类型为第一数据类型的数据的情况下,将第二数据源中类型为第一数据类型的数据写入第一数据源。
[0182] 其中,得到的第一数据类型可以包括多个不同的数据类型,判断第二数据源中是否存在类型为第一数据类型的数据的过程中,对于每一种数据类型,向第二数据源进行查找,然后判断是否查找到该数据类型的数据,在判断出查找到某一数据类型的数据的情况下,将第二数据源中该类型的数据写入第一数据源,并返回进行下一数据类型的查找和判断;在判断出未查找到某一数据类型的数据的情况下,则直接跳过这一数据类型,返回继续进行下一数据类型的查找和判断。直至解析出的所有第一数据类型均查找结束,写入第一数据源的数据即是生成的全量数据。
[0183] 具体地,第一写入单元包括具有如下功能的多个子单元:
[0184] 第三判断子单元用于判断第一全量数据文件的大小是否达到预设大小,其中,第一全量数据文件为第一数据源中当前进行数据写入的全量数据文件,在本发明实施例中,可以将一个全量数据文件的上限大小设置为100W条,即,预设大小为100W条。
[0185] 第一写入子单元用于在第三判断子单元判断出第一全量数据文件的大小达到预设大小的情况下,在第一数据源中创建第二全量数据文件,并将第二数据源中类型为第一数据类型的数据写入第二全量数据文件,即,在第一全量数据文件的大小超过设置上限的情况下,进行文件分片。
[0186] 第二写入子单元用于在第三判断子单元判断出第一全量数据文件的大小未达到预设大小的情况下,将第二数据源中类型为第一数据类型的数据写入第一全量数据文件。
[0187] 本发明实施例所提供的数据同步装置还包括接收单元、第三解析单元、转换单元和第二写入单元,其中:
[0188] 接收单元用于在第一读取单元读取第一数据源中的目录索引文件,得到目录索引文件所包含的n个应用的数据目录之前,接收数据更新信息,其中,数据更新信息包括更新数据和更新数据的数据类型,系统出现数据变更后,可以通过消息队列(Message Queue,简称MQ)的方式发送数据更新消息给第二数据源,以通知数据变更。
[0189] 第三解析单元用于解析预设的数据生成配置文件,得到与更新数据的数据类型对应的目标数据格式;
[0190] 转换单元用于将更新数据的格式转换为目标数据格式。
[0191] 第二写入单元用于将转换为目标数据格式的更新数据写入第一数据源。
[0192] 具体地,第二写入单元包括具有如下功能的多个子单元:
[0193] 第四判断子单元,用于判断第一增量数据文件的大小是否达到预设大小,其中,第一增量数据文件为第一数据源中当前进行数据写入的增量数据文件,在本发明实施例中,可以将一个增量数据文件的上限大小设置为100W条,即,预设大小为100W条。
[0194] 第三写入子单元,用于在第四判断子单元判断出第一增量数据文件的大小达到预设大小的情况下,在第一数据源中创建第二增量数据文件,并将转换为目标数据格式的更新数据写入第二增量数据文件,即,在第一增量数据文件的大小超过设置上限的情况下,进行文件分片。
[0195] 第四写入子单元,用于在第四判断子单元判断出第一增量数据文件的大小未达到预设大小的情况下,将转换为目标数据格式的更新数据写入第一增量数据文件。
[0196] 在大数据同步过程中,如果单个文件太大的话,会降低解析性能,本发明实施例所提供的数据同步方法,考虑到大数据的同步,采用分文件的形式,存储大数据,经过测试默认推荐文件大小(100万条/文件),100万条/文件的大小对于一般的系统来说数据够用,并且解析性能较高,达到了既能满足小数据同步的实时效果,又能快速进行大数据同步。
[0197] 进一步地,在本发明实施例中,任一配置文件均可以采用XML配置文件作为元数据的格式约定文件,以满足随着应用系统功能的不断增加、不断完善以及不同的定制需要,所带来的对数据的同步和生成也有不同的需求。
[0198] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0199] 在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0200] 在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0201] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0202] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0203] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0204] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。