发明内容
针对相关技术中无法快速导入数据、生成差异或更新数据的问题,本发明提出一种差异数据的处理方法和装置,能够在数据量很大的情况下,快速的导入数据、生成差异、或更新数据。
本发明的技术方案是这样实现的:
根据本发明的一个方面,提供了一种差异数据的处理方法,该方法包括:
在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类;
通过多个差异信息集表示第一数据集与第二数据集之间的差异,其中,每个差异信息集表示第一数据集与第二数据集之间一个类型的差异;
根据多个差异信息集对第一数据集进行更新。
其中,第一数据集与第二数据集之间的差异的分类包括以下类型之中的至少之一:
第一类型,表示第一数据集相比于第二数据集增加的数据;
第二类型,表示第一数据集相比于第二数据集缺少的数据;
第三类型,表示第一数据集相比于第二数据集需要变更的数据。
并且,通过多个差异信息集表示第一数据集与第二数据集之间的差异包括以下至少之一:
通过第一差异信息集表示第一类型的差异;
通过第二差异信息集表示第二类型的差异;
通过第三差异信息集表示第三类型的差异。
该方法进一步包括:
通过相同信息集表示多个数据集之间彼此相同的数据。
此外,通过多个差异信息集表示第一数据集与第二数据集之间的差异进一步包括:
将第一数据集与第二数据集之间存在差异的数据导入到多个差异信息集中。
另外,在导入数据的过程中,禁止根据导入的数据生成索引和/或外键;并且,在导入数据之后,根据导入的全部数据生成该数据的索引和/或外键。
并且,第一数据集为存储在数据库中的网站信息,第二数据集为更新后的网站信息。
可选地,第一数据集可以为云端存储的网站身份证业务中的铭牌数据,第二数据集可以为更新后的铭牌数据。
而且,通过列表的方式来存储每个差异信息集。
根据本发明的另一方面,提供了一种差异数据的处理装置。
该装置包括:
分类模块,用于在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类;
构建模块,用于构建多个差异信息集,并通过多个差异信息集表示第一数据集与第二数据集之间的差异,其中,每个差异信息集表示第一数据集与第二数据集之间一个类型的差异;
更新模块,用于根据多个差异信息集对第一数据集进行更新。
该装置可进一步包括:
导入模块,用于根据差异的类型,将第一数据集与第二数据集之间存在差异的数据导入到构建的多个差异信息集中,其中,在导入数据的过程中,导入模块禁止根据导入的数据生成索引和/或外键;并且,在导入数据之后,导入模块根据导入的全部数据生成该数据的索引和/或外键。
本发明在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类,通过多个差异信息集表示第一数据集与第二数据集之间一个类型的差异,并根据多个差异信息集对第一数据集进行更新,能够在数据量很大的情况下,快速的生成差异并完成数据的更新,提高数据更新的效率并且避免更新数据时占用大量的存储空间。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
根据本发明的实施例,提供了一种差异数据的处理方法。
如图1所示,根据本发明实施例的差异数据的处理方法包括:
步骤S101,在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类;
步骤S103,通过多个差异信息集表示第一数据集与第二数据集之间的差异,其中,每个差异信息集表示第一数据集与第二数据集之间一个类型的差异;
步骤S105,根据多个差异信息集对第一数据集进行更新。
其中,第一数据集与第二数据集之间的差异的分类包括以下类型之中的至少之一:
第一类型,表示第一数据集相比于第二数据集增加的数据;
第二类型,表示第一数据集相比于第二数据集缺少的数据;
第三类型,表示第一数据集相比于第二数据集需要变更的数据。
并且,通过多个差异信息集表示第一数据集与第二数据集之间的差异包括以下至少之一:
通过第一差异信息集表示第一类型的差异;
通过第二差异信息集表示第二类型的差异;
通过第三差异信息集表示第三类型的差异。
该方法进一步包括:
通过相同信息集表示多个数据集之间彼此相同的数据。
此外,通过多个差异信息集表示第一数据集与第二数据集之间的差异进一步包括:
将第一数据集与第二数据集之间存在差异的数据导入到多个差异信息集中。
另外,在导入数据的过程中,禁止根据导入的数据生成索引和/或外键;并且,在导入数据之后,根据导入的全部数据生成该数据的索引和/或外键。因此,由于在导入数据的过程中不生成数据的索引和/或外键,并在导入之后一并生成,能够避免因为生成索引和/或外键而中断数据的导入,有效提高数据导入的速率。。
并且,第一数据集为存储在数据库中的网站信息,第二数据集为更新后的网站信息。
而且,通过列表的方式来存储每个差异信息集。
例如,在实际应用中,本发明快速导入、生成和更新数据的具体过程如下:
(1)快速导入数据到数据库的步骤:
a1)替换文件中的表名为临时表名,例如,原来的表名称为tb_a,则该处将原表名替换为tb_a_realtime;
b1)在导入数据语句前禁用表的索引/外键等约束;
c1)在导入数据语句结束后开启表的索引/外键等约束;
d1)将文件格式转换为与操作系统相同的格式,字符集为数据库中指定的字符集,以防止出现乱码;
e1)使用批量工具/命令oracle的sql loader、mysql的mysqlimport、mysql的命令(`which mysql`-h${db_host}-u${db_user}-p${db_pwd}${db_name}<$file_name)等导入数据。
通过以上步骤即可以实现快速导入数据,比普通方法(直接执行SQL、非批量等)快至少10倍。
(2)快速生成差异数据的步骤:
a2)新建保存中间结果的表若干个(备份在线表、相同内容表、比较中间表等),全部用中间表进行操作可以避免对现网业务产生影响;
b2)备份在线表和新表数据;
c2)生成在线表和新表相同数据到相同内容表;
d2)删除备份在线表里面在相同内容表里面的数据;
e2)删除备份新表里面在相同内容表里面的数据;
f2)从删除相同记录后的小记录集备份在线表和新表中生成差异数据;
g2)上述步骤b2和c2可以并行进行,d和e可以并行进行;并且使用了小表进行比较,因此极大加快了处理速度。
(3)快速更新数据的步骤:
a3)备份完整在线表数据,在出现错误的时候可恢复数据;
b3)新建保存中间结果的表若干个(备份在线表、备份新表、完全一致内容表),全部用中间表进行操作可以避免对现网业务产生影响;
c3)生成备份在线表数据;
d3)生成备份新表数据;
e3)从备份在线表和备份新表中获取完全一致内容表;
f3)删除备份在线表中在完全一致内容表中记录;
g3)删除备份新表中在完全一致内容表中记录;
h3)根据差异表中在线表需要删除的数据,删除在线表中的数据,并从备份在线表中将这部分数据删除;
i3)从差异表中获取在线表需要增加的数据插入到在线表中,并从备份新表中将这部分数据删除;
j3)将备份新表中更新单条内容数据生成到表A,更新多条内容数据生成到表B;
k3)从表A中顺序更新数据到在线表;
l3)从表B中顺序更新数据到在线表;
m3)数据更新完成后,比较在线表和新表数据,确保数据无误;
n3)上述步骤c3和d3可以并行进行,f3和g3可以并行进行,i3和j3可以并行进行,并且使用了小表进行更新,因此极大加快了处理速度,并且更新采用的是单条处理方式,不会对现网业务有影响;
具体地,本发明的上述方案可以应用与多种场景,例如,对于网站身份证(webid)业务,可以利用其中的网站域名和域名类型数据,上传到云端,实现地址栏铭牌显示用,铭牌打开后的详情就是这个数据库里面的数据;如果有最新的数据,则可以根据该最新的数据与已有数据之间的差异生成差异数据(对应于上述的差异信息集),将差异数据(删除/增加/修改)上传到云端;再根据差异数据更新现网网络内容服务商(ICP)数据。此时,第一数据集可以为云端存储的网站身份证业务中的铭牌数据,第二数据集可以为更新后的铭牌数据。因此,采用本发明的技术方案,数据的更新过程并不会影响到网站的正常业务,并且能够有效提高更新的效率。此外,由于借助于中间表(差异信息集),可以避免保存大量的相同数据(即,可以不存储相同数据集),减少存储空间的占用。
通过以上过程,可以快速的完成数据的处理时间,例如:
对于十万级的数据,导入数据、比较差异、更新数据可以在10分钟内完成;
对于百万级的数据,导入数据、比较差异、更新数据可以在1个小时内完成;
对于千万级的数据,导入数据、比较差异、更新数据可以在3个小时内完成。
因此,如上几个数量级的数据处理时间,比传统技术快很多倍。
根据本发明的实施例,还提供了一种差异数据的处理装置。
如图2所示,根据本发明实施例的差异数据的处理装置包括:
分类模块1,在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类;
构建模块2,用于构建多个差异信息集,并通过多个差异信息集表示第一数据集与第二数据集之间的差异,其中,每个差异信息集表示第一数据集与第二数据集之间一个类型的差异;
更新模块3,用于根据多个差异信息集对第一数据集进行更新。
此外,该装置可进一步包括:
导入模块(未示出),用于根据差异的类型,将第一数据集与第二数据集之间存在差异的数据导入到构建的多个差异信息集中,其中,在导入数据的过程中,导入模块禁止根据导入的数据生成索引和/或外键;并且,在导入数据之后,导入模块根据导入的全部数据生成该数据的索引和/或外键。
综上所述,借助于本发明的上述技术方案,在需要将第一数据集更新为第二数据集的情况下,对第一数据集与第二数据集之间的差异进行分类,通过多个差异信息集表示第一数据集与第二数据集之间一个类型的差异,并根据多个差异信息集对第一数据集进行更新,能够在数据量很大的情况下,快速的生成差异并完成数据的更新,提高数据更新的效率并且避免更新数据时占用大量的存储空间。本发明的技术方案能够在数据量很大的情况下,快速导入数据、生成差异或更新数据,这种做法能够保证快速导入的是最新的数据,快速比较最新数据和现在的数据并且生成差异数据,然后再根据差异数据更新现在的数据,因此,通过上述方案,可以快速的处理数据,并且处理过程对现网业务没有影响。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。