CN105653554A - 一种文件数据比对方法和系统 - Google Patents
一种文件数据比对方法和系统 Download PDFInfo
- Publication number
- CN105653554A CN105653554A CN201410650545.7A CN201410650545A CN105653554A CN 105653554 A CN105653554 A CN 105653554A CN 201410650545 A CN201410650545 A CN 201410650545A CN 105653554 A CN105653554 A CN 105653554A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- comparison
- subfile
- module
- 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
Abstract
本发明公开了一种文件数据比对方法和系统,属于文件数据的比较技术领域,解决了现有的文件数据比对技术中由于实际业务系统中数据比对规则复杂而导致的开发及维护难度大、比对性能慢的缺陷。系统包括比对业务单元和比对核心单元。方法包括:读取两个待比对文件;基于业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;将多个相对应的子文件分批加载到内存中;在内存中根据比对规则对相对应的子文件进行数据比对;将比对结果写入比对结果文件。实现了文件的高效数据比对以及不同比对规则的扩展。
Description
技术领域
本发明涉及文件数据的比较技术,更具体地说,涉及一种文件数据比对方法和系统。
背景技术
对两份文件的数据进行比对,行业内主要有文件直接比对技术、数据库数据比对技术。
文件直接比对技术是直接对两份文件的文字进行比对,该技术主要是找出两份文档的差异文字部分,展示两份文件文字的差异,而且对文件文字的顺序有一致要求,如果文字的前后顺序不一致,则会认为是不一致的。
数据库数据比对技术基于数据库存储过程和SQL语言,首先将需要比对的两个文件分别导入到两个数据表中,然后对两个数据表的数据通过SQL语句进行查找比对,并把数据比对结果保存到另一个数据表中,从数据表获取到最终的比对结果。
文件直接比对技术实现对两份文件内容的严格比对,包括内容的顺序,但该技术不能解决对文件内容进行数据层面的比对。在一些业务系统中,两份文件的数据存放的顺序可能不一样,但只要对应的数据是相同的,则可以认为这两份文件的数据比对一致,因此,文件直接比对技术无法解决文件数据层面的比对。
数据库数据比对技术可以对两个数据表的数据进行直接的快速比对,但前提是两份数据的比对规则比较简单,才能进行快速比对,如果数据比对的规则比较复杂,则会导致比对性能很差,而且SQL语句非常复杂,难以后续维护。例如对于域名字段数据,含“http://”前缀与不含前缀是一致的,最后是否含斜杆“/”也是一致的,即数据“http://www.baidu.com”与“www.baidu.com/”在业务层面认为是一致的。在实际的业务系统中,数据的比对有很多不一样的规则,当规则很多的时候,使用数据库数据比对技术,会导致SQL语言开发功能量很大,维护困难,而且比对的性能非常慢,不能满足业务系统的实际要求。
发明内容
本发明针对现有的文件数据比对技术,由于实际业务系统中数据比对规则复杂而导致的开发及维护难度大、比对性能慢的缺陷,提供一种文件数据比对方法和系统,能够实现文件的高效数据比对以及方便不同比对规则的扩展。
本发明解决其技术问题采用的技术方案是:提供一种文件数据比对方法,包括以下步骤:
S1、读取两个待比对文件;
S2、基于业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
S3、将多个相对应的子文件分批加载到内存中;
S4、在内存中根据比对规则对相对应的子文件进行数据比对;
S5、将比对结果写入比对结果文件。
优选地,步骤S2包括以下子步骤:
S21、计算应分拆的子文件数量f;
S22、基于业务逻辑以及应分拆的子文件数量f将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中。
优选地,子步骤S21包括以下次级子步骤:
S211、分别计算两个待比对文件的记录数量;
S212、取两个待比对文件的记录数量中的最大值M;
S213、从配置文件中读取系统配置的每份子文件的记录数量n;
S214、计算应分拆的子文件数量f,f=M/n,并且在M/n不为整数时取整数部分数值加1。
优选地,子步骤S22包括以下次级子步骤:
S221、在对每个待比对文件进行分拆时,一次读取一条数据;
S222、计算读取的数据的主键的散列值h;
S223、采用求模的方式计算读取的数据应该拆分到的子文件的序号i,i=hmodf;
S224、将读取的数据写入序号为i的子文件中。
优选地,步骤S3包括以下子步骤:
S31、按照子文件的序号的顺序将相对应的子文件加载到内存中;
S32、校验加载数据的有效性,并将校验不合格的数据输出到不合格数据结果文件中;
S33、识别记载数据中的重复数据,并把重复数据输出到重复数据结果文件中。
提供一种文件数据比对系统,包括:
比对业务单元,用于提供业务逻辑,以及根据规则配置文件加载相应的比对规则;
比对核心单元,用于读取两个待比对文件,基于所述业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中以及将多个相对应的子文件加载到内存中,还用于根据所述比对规则在内存中对相对应的子文件进行数据比对,并将比对结果写入比对结果文件。
优选地,所述比对业务单元包括:
数据加载器,用于根据业务逻辑构建具体的数据对象;
比对规则插件池,用于存储多个比对规则插件;
比对规则接口模块,用于为比对规则插件提供统一接口;
数据对象模块,用于根据所述规则配置文件,通过所述比对规则接口模块加载所述比对规则插件池中相应的比对规则插件。
优选地,所述比对核心单元包括:
文件读取接口模块,用于读取两个待比对文件;
数据对象加载接口模块,分别与所述数据加载器以及所述数据对象模块连接;
文件分拆模块,分别与所述文件读取接口模块以及所述数据对象加载接口模块连接,用于根据基于业务逻辑构建的数据对象将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
数据加载模块,分别与所述文件读取接口模块、所述数据对象加载模块以及所述文件分拆模块连接,用于将多个相对应的子文件加载到内存中;
数据比对接口模块,与所述数据对象模块连接;
数据对比模块,与所述数据比对接口模块连接,用于在内存中根据加载的比对规则对相对应的子文件进行数据比对;
数据输出接口模块,与所述数据对象模块连接;
文件输出接口模块;
结果输出模块,分别与所述数据输出接口模块以及所述文件输出接口模块连接,用于比对结果写入比对结果文件。
优选地,所述文件分拆模块包括:
计算子模块,用于计算应分拆的子文件数量f;
分拆子模块,用于基于业务逻辑以及应分拆的子文件数量f将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
其中,所述计算子模块分别计算两个待比对文件的记录数量,取两个待比对文件的记录数量中的最大值M,从配置文件中读取系统配置的每份子文件的记录数量n,计算应分拆的子文件数量f,f=M/n,并且在M/n不为整数时取整数部分数值加1;
所述分拆子模块在对每个待比对文件进行分拆时,通过所述文件读取接口模块一次读取一条数据,计算读取的数据的主键的散列值h,并采用求模的方式计算读取的数据应该拆分到的子文件的序号i,i=hmodf,然后将读取的数据写入序号为i的子文件中。
优选地,所述数据加载模块包括:
数据加载子模块,用于按照子文件的序号的顺序将相对应的子文件加载到内存中;
校验子模块,用于校验加载数据的有效性,并将校验不合格的数据输出到不合格数据结果文件中;
重复数据识别子模块,用于识别记载数据中的重复数据,并把重复数据输出到重复数据结果文件中。
本发明的文件数据比对方法和系统具有以下有益效果:对于大数据的文件,先进行数据分拆,再分别对分拆后的小文件比对,这样可以在内存资源有限的所有计算机上都能对大数据文件进行比对计算;可以在内存中高效地进行数据的比对,即使面对复杂的业务逻辑,在内存中仍可高效快速的完成比对计算;将业务逻辑与文件操作分离,可以扩展不同的比对业务逻辑,也可以扩展不同的文件格式类型,在业务实现层面上,具备良好的可扩展性。
附图说明
图1为本发明的文本数据比对方法第一实施例的流程图;
图2为本发明的文本数据比对方法第一实施例中数据比对技术的逻辑框图;
图3为本发明的文本数据比对方法第一实施例中进行子文件比对的流程图;
图4为本发明的文件数据比对系统第一实施例的逻辑框图;
图5为本发明的文件数据比对系统第一实施例中文件分拆模块的逻辑框图;
图6为本发明的文件数据比对系统第一实施例中数据加载模块的逻辑框图。
具体实施方式
本发明实施例提供一种文本数据比对方法和系统,解决了现有的文件数据比对技术中由于实际业务系统中数据比对规则复杂而导致的开发及维护难度大、比对性能慢的缺陷,实现了文件的高效数据比对以及不同比对规则的扩展。
以下结合附图以及实施例对本发明做进一步的解释说明。
图1为本发明的文本数据比对方法第一实施例的流程图,如图1所示,在本实施例中,方法包括以下步骤:
S1、读取两个待比对文件;
S2、基于业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
S3、将多个相对应的子文件分批加载到内存中;
S4、在内存中根据比对规则对相对应的子文件进行数据比对;
S5、将比对结果写入比对结果文件。
参见图2,在本实施例中,数据比对技术分为比对核心层、文件操作层以及比对业务层。比对核心层实现文件数据比对的主流程,以及文件进行分拆、数据加载、数据比对和结果数据的核心逻辑。比对业务层可以结合业务需求,定义不同的数据加载器,加载不同的数据对象,还可以按照不同数据的比对规则,定义不同的比对规则插件,实现各种业务对比规则。数据对象可以根据规则配置文件实现数据比对。文件操作层负责实现对不同格式的文件的读取和写入等操作,支持主流的文件格式文件和XML格式文件。基于文件读取和输出接口,通过增加其他文件格式的操作实现,就能支持扩展更多的文件格式比对。
具体的,在步骤S1中,文件读取接口读取相同格式的两个待比对文件,待比对文件的格式可以是文本格式或者XML格式等。
在步骤S2中,比对核心层基于数据加载器所加载的业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中。文件分拆的目的是防止待比对文件过大,一次把文件的数据加载到内存,会导致内存溢出。文件分拆的核心是必需保障两份待比对文件中,具有相同主键的数据必需分拆到相应的子文件中,这样,在进行子文件的比对时,才能高效的一对一对子文件进行比对,而不需要所有子文件都交叉比对。
文件分拆的算法如下:
1)计算待比对文件A的记录数量Ma,以文本文件为例,一行对应一条记录;
2)计算待比对文件B的记录数量Mb;
3)取两份待比对文件的最大记录数M=Max(Ma,Mb);
4)从配置文件中读取系统配置的每份子文件的记录数量n,n的取值结合计算机的内存实际情况设定;
5)计算分拆的子文件数f,f=M/n,并且在M/n不为整数时取整数部分数值加1;
6)对待分拆文件A进行分拆,分拆时,一次读取一条数据;
7)对一条数据计算其主键的散列值(Hash值)h,h=hashCode(数据主键字符串),如果一条数据的主键由多个字段组成,则把多个字段连接成一个字符串,然后对该字符串计算其HashCode值;
8)采用求模方式计算该数据该放到的子文件序号i,i=hmodf,例如5)中计算的f=4,7)中计算出h=32,则i=8;
9)把该数据写入子文件Ai;
10)按相同的算法对待分拆文件B进行分拆,每条数据将会分拆到子文件Bi中。
为支持大文件的数据比对,本实施例提供了基于Hash算法对数据主键进行计算分拆的技术,该算法确保了具有相同主键值的数据被分拆到相同的子文件中,为下一步子文件的高效比对提供良好的基础。
在步骤S2中,将文件分拆的目的是避免文件过大导致内存溢出,因此在步骤S3中,相对应的子文件需要分批加载以进行比对。完成一对子文件的加载及比对后就释放这批数据的内存。
具体的,在步骤S3中,按照子文件的序号的顺序分批将相对应的子文件加载到内存中,加载时,通过数据对象加载接口分别读取比对子文件Ai和子文件Bi的数据,在内存中生成比对对象,并放在Java语言的集合SetA和SetB中,Java语言中的集合Set中的对象不可重复。此过程除了把数据读取到内存集合之外,还可以对数据的有效性以及重复性进行处理:在数据加载的过程中,可以分析判断数据的有效性,对于校验不通过的数据,可以输出到校验不合格的数据结果文件(即不合格数据结果文件)中;基于JavaSet对象不可重复的特性,在往Set对象存放数据对象时,可以识别出重复数据,并把重复数据存放到重复数据结果文件中。
参见图3,在步骤S4中,同样基于JavaSet对象使用Hash值以及equals方法,可以快速地把另一集合相同的数据去除,例如SetA1=SetA.remove(SetB),就可以获得A文件中比B文件多以及与B文件不一致的数据。反过来SetB1=SetB.remove(SetA)也是如此。继续使用remove方法,SetA.remove(SetA1),得到的数据就是A文件和B文件中的一致的数据。分别对SetA1和SetB1的数据(多出的数据以及不一致的数据)根据业务主键转换为MapA和MapB集合的对象(Map为Java语言中的一种集合,以键值对形式保存)。其中,数据的主键值作为Map对象的Key值,数据对象作为Map对象的Value值。同样基于JavaMap对象对Key使用Hash值,可以快速把另一个Map集合相同Key值得数据去除。即MapA1=MapA.remove(MapB),就可以获得A文件比B文件多的数据,自然,MapA.remove(MapA1)的数据就是不一致的数据了。反过来,MapB1=MapB.remove(MapA),得到的就是B文件多出的数据,MapB.remove(MapB1)的数据也就是不一致的数据了。
在步骤S4的上述过程中,把子文件的数据加载到内存后,通过Java的Set集合与Map集合,基于Hash的快速算法,可以快速地把两个集合中的数据,区分出一致的数据、不一致的数据以及多出/缺少的数据。其中,在集合中把重复数据高效地移除,主要依赖于Hash值的快速查找。另外,在比对两个数据对象是否一致,需要调用对象的equals方法。获取Hash值以及equals方法都通过接口调用,具体数据对象可以根据业务逻辑实现其比对规则和算法,这样可以让比对核心层与比对业务层分离,便于业务的扩展。
最后,在步骤S5中,将比对结果通过文件输出接口写入比对结果文件。例如,当待比对文件为文本文件时,将比对结果也为文本文件,将通过文件输出接口将比对结果输出以写入比对结果文件。
在本发明的文件数据比对方法第一实施例中,基于Hash的高效文件数据比对技术,采用Java语言进行开发,基于内存运算的高效性,把文件的数据加载到内存,在内存中通过Hash技术进行比对运算,实现文件的高效数据比对;此外,通过配置文件和插件方式解决业务比对规则的差异性,方便不同比对规则的扩展,业务适应能力更强;另外,鉴于计算机的内存有限,对于大文件的数据比对,本技术同样采用Hash算法先对大文件进行分拆,然后再对分拆后的小文件分别进行比对,避免把大量的数据一次加载到内存导致计算机内存溢出;再者,在进行分拆时,首先计算待比对文件需要分拆的子文件数,然后分别对两份待比对文件进行分拆,分拆成若干个子文件,之后分别对子文件进行比对,由于分拆时,采用的算法保障相同关键字的数据分拆时,可分拆到对应的子文件中,因此,只需要序号相同的子文件想比对即可,例如A0与B0子文件比对,A1与B1子文件比对,……,An与Bn子文件比对,每对子文件比对完毕后,把比对结果输出到结果文件,在所有子文件都比对完毕,整个比对流程完成,不涉及数据的交叉对比。
图4为本发明的文件数据比对系统100第一实施例的逻辑框图,如图4所示,在本实施例中,系统100包括:
比对业务单元110,用于提供业务逻辑,以及根据规则配置文件加载相应的比对规则;
比对核心单元120,用于读取两个待比对文件,基于业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中以及将多个相对应的子文件加载到内存中,还用于根据所述比对规则在内存中对相对应的子文件进行数据比对,并将比对结果写入比对结果文件。
在本实施例中,比对业务单元110包括:
数据加载器111,用于根据业务逻辑构建具体的数据对象;
比对规则插件池112,用于存储多个比对规则插件;
比对规则接口模块113,用于为比对规则插件提供统一的接口;
数据对象模块114,用于根据规则配置文件,通过比对规则接口模块113加载比对规则插件池112中相应的比对规则插件。
比对核心单元120包括:
文件读取接口模块121,用于读取两个待比对文件;
数据对象加载接口模块122,分别与数据加载器111以及数据对象模块114连接;
文件分拆模块123,分别与文件读取接口模块121以及数据对象加载接口模块122连接,用于根据基于业务逻辑构建的数据对象将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
数据加载模块124,分别与所述文件读取接口模块121、数据对象加载模块122以及文件分拆模块123连接,用于将多个相对应的子文件加载到内存中;
数据比对接口模块125,与所述数据对象模块122连接;
数据对比模块126,与数据比对接口模块125连接,用于在内存中根据加载的比对规则对相对应的子文件进行数据比对;
数据输出接口模块127,与数据对象模块122连接,用于调用数据对象比对结果输出方法,获取不同业务规则对应的比对结果输出内容;
文件输出接口模块128;
结果输出模块129,分别与数据输出接口模块127以及文件输出接口模块128连接,用于比对结果写入比对结果文件。
比对规则插件池112中存储了多个比对规则插件,数据对象模块114根据规则配置文件通过比对规则接口模块从比对规则插件池112中加载相应的比对规则插件。数据加载器111提供适用于本次操作的业务逻辑。
工作时,文件读取接口模块121读取相同格式的两个待比对文件,待比对文件的格式可以是文件格式或者XML格式等。
然后,文件分拆模块123基于数据加载器111提供的业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中。文件分拆的目的是防止待比对文件过大,一次把文件的数据加载到内存,会导致内存溢出。文件分拆的核心是必需保障两份待比对文件中,具有相同主键的数据必需分拆到相应的子文件中,这样,在进行子文件的比对时,才能高效的一对一对子文件进行比对,而不需要所有子文件都交叉比对。
在本实施例中,如图5所示,文件分拆模块123包括计算子模块1231以及分拆子模块1232。其中,计算子模块1231用于计算应分拆的子文件数量f。首先,计算子模块1231计算待比对文件A的记录数量Ma,以文本文件为例,一行对应一条记录;然后计算待比对文件B的记录数量Mb;接着取两份待比对文件的最大记录数M=Max(Ma,Mb);再者从配置文件中读取系统配置的每份子文件的记录数量n,n的取值结合计算机的内存实际情况设定;最后计算分拆的子文件数f,f=M/n。
分拆子模块1232,用于基于业务逻辑以及应分拆的子文件数量f将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中。分拆子模块1232在对每个待比对文件进行分拆时,通过文件读取接口模块121一次读取一条数据;对一条数据计算其Hash值h,h=hashCode(数据主键字符串),如果一条数据的主键由多个字段组成,则把多个字段连接成一个字符串,然后对该字符串计算其HashCode值;随后,采用求模方式计算该数据该放到的子文件序号i,i=hmodf;然后把该数据写入子文件Ai,分拆子模块1232按相同的算法对待分拆文件B进行分拆,每条数据将会分拆到子文件Bi中。
如图6所示,在本实施例中,数据加载模块124包括数据加载子模块1241、校验子模块1242以及重复数据识别子模块1243。在完成了文件分拆之后,数据加载子模块1241按照子文件的序号的顺序把两个待比对文件的相对应的子文件分批加载到内存中,加载时,通过数据对象加载接口模块122分别读取比对子文件Ai和子文件Bi的数据,在内存中生成比对对象,并放在Java语言的集合SetA和SetB中,Java语言中的集合Set中的对象不可重复。数据加载模块124除了把数据读取到内存集合之外,还可以对数据的合理性以及重复性进行处理:通过校验子模块1242在数据加载的过程中,分析判断数据的有效性,对于校验不通过的数据,输出到校验不合格的数据结果文件(即不合格数据结果文件)中。通过重复数据识别子模块1243基于JavaSet对象不可重复的特性,在往Set对象存放数据对象时,识别出重复数据,并把重复数据存放到重复数据结果文件中。应当说明的时,数据加载模块125根据数据加载器111基于业务逻辑构建的数据对象完成上述相应工作。
将子文件加载到内存中之后,数据比对模块126通过数据比对接口模块125获取比对规则,基于JavaSet对象使用Hash值以及equals方法,快速地把另一集合相同的数据去除,例如SetA1=SetA.remove(SetB),就可以获得A文件中比B文件多以及与B文件不一致的数据。反过来SetB1=SetB.remove(SetA)也是如此。继续使用remove方法,SetA.remove(SetA1),得到的数据就是A文件和B文件中的一致的数据。分别对SetA1和SetB1的数据(多出的数据以及不一致的数据)根据业务主键转换为MapA和MapB集合的对象(Map为Java语言中的一种集合,以键值对形式保存)。其中,数据的主键值作为Map对象的Key值,数据对象作为Map对象的Value值。同样基于JavaMap对象对Key使用Hash值,可以快速把另一个Map集合相同Key值得数据去除。即MapA1=MapA.remove(MapB),就可以获得A文件比B文件多的数据,自然,MapA.remove(MapA1)的数据就是不一致的数据了。反过来,MapB1=MapB.remove(MapA),得到的就是B文件多出的数据,MapB.remove(MapB1)的数据也就是不一致的数据了。
在数据比对模块126执行上述过程中,在集合中把重复数据高效地移除,主要依赖于Hash值的快速查找。此外,在比对两个数据对象是否一致,需要调用对象的equals方法。获取Hash值以及equals方法都通过调用数据比对接口模块125的具体数据对象的hashCode()和equals()方法,具体数据对象可以根据业务逻辑实现其比对规则和算法,这样可以让比对核心层与比对业务层分离,便于业务的扩展。
最后,结果输出模块129将比对结果通过文件输出接口模块128写入比对结果文件。例如,当待比对文件为文本文件时,将比对结果也为文本文件,将通过文件输出接口将比对结果输出以写入比对结果文件。
如上所述,比对核心单元120需要调用一系列的接口模块完成比对工作,这些接口模块包括数据对象加载接口模块122、数据比对接口模块125、数据输出接口模块127、文件读取接口模块121以及文件输出接口模块128。以下对上述接口模块进行逐一说明。
1)数据对象加载接口模块122
数据对象加载接口模块122用于把一条数据生成一个数据比对对象,即提供从文件数据转换为内存数据的功能。数据对象加载接口模块122定义如下:/**
*根据行号,行数据,是否基准数据构造ComparableObject。
*paramrowNumber
*paramvalueString
*paramisStandard
*return如果构造发生异常,或valueString数据校验不通过,则返回null;否则返回一个新的继承于ComparableObject的对象。
*/
publicComparableObjectinstance(IntegerrowNumber,StringvalueString,booleanisStandard);
2)数据比对接口模块125
数据比对接口模块125用于两个对象的数据比对运算,包含一系列的接口方法,如计算Hash值方法、equals、getKey方法等。
计算hashCode的默认方法定义如下:
equals方法一般由业务层的对象实现,该方法是判断两条数据是否相同的关键方法。
getKey方法一般由业务层的对象实现,该方法用于获取数据的主键值。
3)数据输出接口模块127
数据输出接口模块127用于把比对结果转换成输出文件的字符。数据输出接口模块127定义如下:
/**
*把对象转换为字符串,用于文件输出
*
*return
*/
publicabstractStringtoResultString();
4)文件读取接口模块121
文件读取接口模块121负责读取文件的数据,目前支持文本格式和XML格式的文件数据读取。
5)文件输出接口模块128
文件输出接口模块128负责把比对结果写入比对结果文件,目前支持文本格式和XML格式的文件数据输出。
如上所述,比对业务单元110是结合具体业务需求,按业务规则实现具体的比对算法。比对业务单元110需要根据比对核心层定义的数据加载接口、数据比对接口和数据输出接口的规则,按照业务逻辑实现具体的方法,就能结合业务完成相应的比对任务。
此外,比对业务单元110可以定义具体比对规则算法的实现,为特殊规则提供良好的扩展。
目前已经提供一个基础的业务比对业务单元110实现对象,通过配置文件可以解决大部分的比对规则要求。比对接口通过读取配置文件的规则,实现具体的数据比对。配置文件示例如下:
<BizCompareInfobizType="SMSC_ROU"
compNodePath="/SmscRouteData/List/SmscRoute"
loaderBeanName="com.aspire.ndmp.app.adapter.compare.bureaudata.loader.CommonComparableObjectLoader">
<UnitCompareInfounitId="All">
<fieldisCompared="true"isVerfied="false"isPk="false"dbFieldName="VALID_CODE">ValidCode</field>
<fieldisCompared="true"isVerfied="false"isPk="false"dbFieldName="VALID_TIME">ValidTime</field>
<fieldisCompared="true"isVerfied="true"isPk="true"dbFieldName="SP_CODE">SpCode</field>
<fieldisCompared="true"isVerfied="true"isPk="true"dbFieldName="ACCESS_GWID"
formula="mobileNumberFormula">AccessGwID</field>
<fieldisCompared="false"isVerfied="false"isPk="false"dbFieldName="MEMO">Memo</field>
</UnitCompareInfo>
</BizCompareInfo>
其中,loaderBeanName约定了具体的实现对象是哪个;isPk约定了哪些字段属于主键;isVerfied约定了哪些字段需要进行加载校验;isCompared约定了哪些字段需要比对,哪些字段不需要比对;formula约定了特殊的比对规则实现对象。
在本发明的文件数据比对系统100第一实施例中,比对系统100支持大规模的数据比对:对于大数据的文件,先进行数据分拆,再分别对分拆后的小文件比对,这样可以在内存资源有限的所有计算机上都能对大数据文件进行比对计算;面对复杂的业务比对规则,比对性能高:基于计算机内存进行运算,而且充分使用Hash的计算方法,可以在内存中高效地进行数据的比对,即使面对复杂的业务逻辑,在内存中仍可高效快速的完成比对计算;业务扩展性好:系统100分为比对业务单元110以及比对核心单元120,比对核心单元110通过接口分离业务逻辑与文件操作,可以扩展不同的比对业务逻辑,也可以扩展不同的文件格式类型,比对业务单元120通过配置文件解决各字段的比对规则,同时可以通过特殊比对规则支撑新的比对算法,因此,在业务实现层面上,具备良好的可扩展性。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在发明的权利要求范围之内。
Claims (10)
1.一种文件数据比对方法,其特征在于,包括以下步骤:
S1、读取两个待比对文件;
S2、基于业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
S3、将多个相对应的子文件分批加载到内存中;
S4、在内存中根据比对规则对相对应的子文件进行数据比对;
S5、将比对结果写入比对结果文件。
2.根据权利要求1所述的文件数据比对方法,其特征在于,步骤S2包括以下子步骤:
S21、计算应分拆的子文件数量f;
S22、基于业务逻辑以及应分拆的子文件数量f将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中。
3.根据权利要求2所述的文件数据比对方法,其特征在于,子步骤S21包括以下次级子步骤:
S211、分别计算两个待比对文件的记录数量;
S212、取两个待比对文件的记录数量中的最大值M;
S213、从配置文件中读取系统配置的每份子文件的记录数量n;
S214、计算应分拆的子文件数量f,f=M/n,并且在M/n不为整数时取整数部分数值加1。
4.根据权利要求2所述的文件数据比对方法,其特征在于,子步骤S22包括以下次级子步骤:
S221、在对每个待比对文件进行分拆时,一次读取一条数据;
S222、计算读取的数据的主键的散列值h;
S223、采用求模的方式计算读取的数据应该拆分到的子文件的序号i,i=hmodf;
S224、将读取的数据写入序号为i的子文件中。
5.根据权利要求4所述的文件数据比对方法,其特征在于,步骤S3包括以下子步骤:
S31、按照子文件的序号的顺序将相对应的子文件加载到内存中;
S32、校验加载数据的有效性,并将校验不合格的数据输出到不合格数据结果文件中;
S33、识别记载数据中的重复数据,并把重复数据输出到重复数据结果文件中。
6.一种文件数据比对系统,其特征在于,包括:
比对业务单元(110),用于提供业务逻辑,以及根据规则配置文件加载相应的比对规则;
比对核心单元(120),用于读取两个待比对文件,基于所述业务逻辑将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中以及将多个相对应的子文件加载到内存中,还用于根据所述比对规则在内存中对相对应的子文件进行数据比对,并将比对结果写入比对结果文件。
7.根据权利要求6所述的文件数据比对系统,其特征在于,所述比对业务单元(110)包括:
数据加载器(111),用于根据业务逻辑构建具体的数据对象;
比对规则插件池(112),用于存储多个比对规则插件;
比对规则接口模块(113),用于为比对规则插件提供统一接口
数据对象模块(114),用于根据所述规则配置文件,通过所述比对规则接口模块(113)加载所述比对规则插件池(112)中相应的比对规则插件。
8.根据权利要求7所述的文件数据比对系统,其特征在于,所述比对核心单元(120)包括:
文件读取接口模块(121),用于读取两个待比对文件;
数据对象加载接口模块(122),分别与所述数据加载器(111)以及所述数据对象模块(114)连接;
文件分拆模块(123),分别与所述文件读取接口模块(121)以及所述数据对象加载接口模块(122)连接,用于根据基于业务逻辑构建的数据对象将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
数据加载模块(124),分别与所述文件读取接口模块(121)、所述数据对象加载模块(122)以及所述文件分拆模块(123)连接,用于将多个相对应的子文件加载到内存中;
数据比对接口模块(125),与所述数据对象模块(114)连接;
数据对比模块(126),与所述数据比对接口模块(125)连接,用于在内存中根据加载的比对规则对相对应的子文件进行数据比对;
数据输出接口模块(127),与所述数据对象模块(114)连接;
文件输出接口模块(128);
结果输出模块(129),分别与所述数据输出接口模块(127)以及所述文件输出接口模块(128)连接,用于比对结果写入比对结果文件。
9.根据权利要求8所述的文件数据比对系统,其特征在于,所述文件分拆模块(123)包括:
计算子模块(1231),用于计算应分拆的子文件数量f;
分拆子模块(1232),用于基于业务逻辑以及应分拆的子文件数量f将两个待比对文件中具有相同主键的数据分拆到多个相对应的子文件中;
其中,所述计算子模块(1231)分别计算两个待比对文件的记录数量,取两个待比对文件的记录数量中的最大值M,从配置文件中读取系统配置的每份子文件的记录数量n,计算应分拆的子文件数量f,f=M/n,并且在M/n不为整数时取整数部分数值加1;
所述分拆子模块(1232)在对每个待比对文件进行分拆时,通过所述文件读取接口模块(121)一次读取一条数据,计算读取的数据的主键的散列值h,并采用求模的方式计算读取的数据应该拆分到的子文件的序号i,i=hmodf,然后将读取的数据写入序号为i的子文件中。
10.根据权利要求9所述的文件数据比对系统,其特征在于,所述数据加载模块(124)包括:
数据加载子模块(1241),用于按照子文件的序号的顺序将相对应的子文件加载到内存中;
校验子模块(1242),用于校验加载数据的有效性,并将校验不合格的数据输出到不合格数据结果文件中;
重复数据识别子模块(1243),用于识别记载数据中的重复数据,并把重复数据输出到重复数据结果文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410650545.7A CN105653554B (zh) | 2014-11-14 | 2014-11-14 | 一种文件数据比对方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410650545.7A CN105653554B (zh) | 2014-11-14 | 2014-11-14 | 一种文件数据比对方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105653554A true CN105653554A (zh) | 2016-06-08 |
CN105653554B CN105653554B (zh) | 2019-07-16 |
Family
ID=56480088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410650545.7A Active CN105653554B (zh) | 2014-11-14 | 2014-11-14 | 一种文件数据比对方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105653554B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021119A (zh) * | 2016-08-03 | 2016-10-12 | 网易(杭州)网络有限公司 | 配置文件的校验方法和装置 |
CN106384226A (zh) * | 2016-09-21 | 2017-02-08 | 国网四川省电力公司电力科学研究院 | 一种标准化多体系文件数据整合方法 |
CN108446394A (zh) * | 2018-03-26 | 2018-08-24 | 网易(杭州)网络有限公司 | 文件差异的对比方法和装置 |
CN109117376A (zh) * | 2018-08-31 | 2019-01-01 | 北京龙创悦动网络科技有限公司 | 一种ccb文件的检测方法和装置 |
CN110162509A (zh) * | 2019-04-26 | 2019-08-23 | 平安普惠企业管理有限公司 | 文件比对方法、装置、计算机设备及存储介质 |
CN110413960A (zh) * | 2019-06-19 | 2019-11-05 | 平安银行股份有限公司 | 文件对比方法、装置、计算机设备及计算机可读存储介质 |
CN110428319A (zh) * | 2019-08-05 | 2019-11-08 | 深圳乐信软件技术有限公司 | 一种数据比对平台、方法、设备和存储介质 |
CN110515964A (zh) * | 2019-08-30 | 2019-11-29 | 百度在线网络技术(北京)有限公司 | 一种文件更新方法、装置、电子设备和介质 |
CN111339039A (zh) * | 2020-02-21 | 2020-06-26 | 京东数字科技控股有限公司 | 文件的比较方法和装置、存储介质、电子装置 |
CN111506608A (zh) * | 2020-04-16 | 2020-08-07 | 泰康保险集团股份有限公司 | 一种结构化文本的比较方法和装置 |
CN113254397A (zh) * | 2021-06-15 | 2021-08-13 | 成都统信软件技术有限公司 | 一种数据检查方法及计算设备 |
CN113836208A (zh) * | 2021-08-16 | 2021-12-24 | 深圳希施玛数据科技有限公司 | 一种数据处理方法、装置及终端设备 |
CN114490889A (zh) * | 2022-01-25 | 2022-05-13 | 成都鼎桥通信技术有限公司 | 配置信息处理方法、装置、设备、介质及程序产品 |
US11670424B2 (en) | 2020-09-24 | 2023-06-06 | International Business Machines Corporation | Evaluation of reduction of disease risk and treatment decision |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236554A (zh) * | 2007-11-29 | 2008-08-06 | 中兴通讯股份有限公司 | 一种数据库海量数据比对的方法 |
CN101582081A (zh) * | 2009-05-25 | 2009-11-18 | 中兴通讯股份有限公司 | 一种数据比对的方法及装置 |
CN101826109A (zh) * | 2010-04-07 | 2010-09-08 | 深圳创维-Rgb电子有限公司 | 一种大容量文件分割方法、装置及系统 |
CN101957858A (zh) * | 2010-09-27 | 2011-01-26 | 中兴通讯股份有限公司 | 数据比对方法和装置 |
-
2014
- 2014-11-14 CN CN201410650545.7A patent/CN105653554B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236554A (zh) * | 2007-11-29 | 2008-08-06 | 中兴通讯股份有限公司 | 一种数据库海量数据比对的方法 |
CN101582081A (zh) * | 2009-05-25 | 2009-11-18 | 中兴通讯股份有限公司 | 一种数据比对的方法及装置 |
CN101826109A (zh) * | 2010-04-07 | 2010-09-08 | 深圳创维-Rgb电子有限公司 | 一种大容量文件分割方法、装置及系统 |
CN101957858A (zh) * | 2010-09-27 | 2011-01-26 | 中兴通讯股份有限公司 | 数据比对方法和装置 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021119A (zh) * | 2016-08-03 | 2016-10-12 | 网易(杭州)网络有限公司 | 配置文件的校验方法和装置 |
CN106384226A (zh) * | 2016-09-21 | 2017-02-08 | 国网四川省电力公司电力科学研究院 | 一种标准化多体系文件数据整合方法 |
CN108446394B (zh) * | 2018-03-26 | 2021-02-19 | 网易(杭州)网络有限公司 | 文件差异的对比方法和装置 |
CN108446394A (zh) * | 2018-03-26 | 2018-08-24 | 网易(杭州)网络有限公司 | 文件差异的对比方法和装置 |
CN109117376A (zh) * | 2018-08-31 | 2019-01-01 | 北京龙创悦动网络科技有限公司 | 一种ccb文件的检测方法和装置 |
CN110162509A (zh) * | 2019-04-26 | 2019-08-23 | 平安普惠企业管理有限公司 | 文件比对方法、装置、计算机设备及存储介质 |
CN110413960A (zh) * | 2019-06-19 | 2019-11-05 | 平安银行股份有限公司 | 文件对比方法、装置、计算机设备及计算机可读存储介质 |
CN110413960B (zh) * | 2019-06-19 | 2023-03-28 | 平安银行股份有限公司 | 文件对比方法、装置、计算机设备及计算机可读存储介质 |
CN110428319A (zh) * | 2019-08-05 | 2019-11-08 | 深圳乐信软件技术有限公司 | 一种数据比对平台、方法、设备和存储介质 |
CN110515964A (zh) * | 2019-08-30 | 2019-11-29 | 百度在线网络技术(北京)有限公司 | 一种文件更新方法、装置、电子设备和介质 |
CN111339039A (zh) * | 2020-02-21 | 2020-06-26 | 京东数字科技控股有限公司 | 文件的比较方法和装置、存储介质、电子装置 |
CN111506608A (zh) * | 2020-04-16 | 2020-08-07 | 泰康保险集团股份有限公司 | 一种结构化文本的比较方法和装置 |
US11670424B2 (en) | 2020-09-24 | 2023-06-06 | International Business Machines Corporation | Evaluation of reduction of disease risk and treatment decision |
CN113254397A (zh) * | 2021-06-15 | 2021-08-13 | 成都统信软件技术有限公司 | 一种数据检查方法及计算设备 |
CN113836208A (zh) * | 2021-08-16 | 2021-12-24 | 深圳希施玛数据科技有限公司 | 一种数据处理方法、装置及终端设备 |
CN114490889A (zh) * | 2022-01-25 | 2022-05-13 | 成都鼎桥通信技术有限公司 | 配置信息处理方法、装置、设备、介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN105653554B (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105653554A (zh) | 一种文件数据比对方法和系统 | |
US20210342404A1 (en) | System and method for indexing electronic discovery data | |
US20200012631A1 (en) | Comparing data stores using hash sums on disparate parallel systems | |
US10831747B2 (en) | Multi stage aggregation using digest order after a first stage of aggregation | |
US20180181646A1 (en) | System and method for determining identity relationships among enterprise data entities | |
TW202029079A (zh) | 異常群體識別方法及裝置 | |
WO2015180432A1 (zh) | 一种聚簇存储方法及装置 | |
CN104598376A (zh) | 一种数据驱动的分层自动化测试系统和方法 | |
CN105224237A (zh) | 一种数据存储方法及装置 | |
CN104360865A (zh) | 一种序列化方法、反序列化方法及相关设备 | |
WO2022105135A1 (zh) | 信息审核方法、装置、电子设备及存储介质 | |
CN111506621A (zh) | 一种数据统计方法及装置 | |
CN111651453A (zh) | 用户历史行为查询方法、装置、电子设备及存储介质 | |
CN102169491A (zh) | 一种多数据集中重复记录动态检测方法 | |
US20220229854A1 (en) | Constructing ground truth when classifying data | |
CN111768096A (zh) | 基于算法模型的评级方法、装置、电子设备及存储介质 | |
US20110264703A1 (en) | Importing Tree Structure | |
US20220121665A1 (en) | Computerized Methods and Systems for Selecting a View of Query Results | |
CN104598485B (zh) | 处理数据库表的方法和设备 | |
CN106354721A (zh) | 基于权限的检索方法和装置 | |
CN101650732B (zh) | 一种对象管理系统中的对象分组方法及装置 | |
CN107888686B (zh) | 一种位于HBase客户端的用户数据有效性验证方法 | |
US9201937B2 (en) | Rapid provisioning of information for business analytics | |
CN115203339A (zh) | 多数据源整合方法、装置、计算机设备及存储介质 | |
CN113407657A (zh) | 基于单级数据库的数据查询方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |