数据集的乱序处理方法和装置与流程

文档序号:12157845阅读:439来源:国知局
数据集的乱序处理方法和装置与流程

本申请涉及数据处理技术领域,尤其涉及一种数据集的乱序处理方法和装置。



背景技术:

在自动题库、对称式密码设计、网络信息安全模拟检测等系统中,都需要对大型数据集进行乱序处理。乱序处理是对数据集中的记录进行重新排列,并且使得重新排列后的顺序与原先的顺序尽可能不相关联。

在对数据集进行重新排列时,需要将涉及到记录读入内存后再按照预定的算法确定其新的顺序。由于任何计算设备的硬件资源都有存在限制,当数据集的规模增大到一定程度时,对整个数据集重新排序所需要的时间往往无法满足实际应用的需求。

现有技术中,将大规模的数据集拆分成若干个小文件,每个文件中包括部分记录,针对每个文件中的记录采用乱序算法重新排列顺序。这样,实际上只实现了数据集的局部乱序而不是全局乱序,乱序后的数据集仍旧有特征可循。例如,一个包括100万条顺序排列的密码的数据集,每个文件中包括100个连续的密码,乱序后由于系统在一段时间内应用的都是同一个文件中的密码,则在这段时间内可以在100个值而不是100万个值中猜测可能出现的密码,也就是说,局部乱序极大的降低了系统的安全性。



技术实现要素:

有鉴于此,本申请提供一种数据集的乱序处理方法,包括:

在一定的取值范围内为初始数据集中的每条记录生成一个随机数;

将每条记录根据其随机数划分到子数据集中;每个子数据集对应于不同的数值区间,所有子数据集对应的数值区间之和为随机数的取值范围;

在每个子数据集中按照随机数对所有记录进行排序,根据对应的数值区间的顺序将子数据集合成为乱序数据集。

本申请还提供了一种数据集的乱序处理装置,包括:

随机数生成单元,用于在一定的取值范围内为初始数据集中的每条记录生成一个随机数;

子数据集划分单元,用于将每条记录根据其随机数划分到子数据集中;每个子数据集对应于不同的数值区间,所有子数据集对应的数值区间之和为随机数的取值范围;

排序单元,用于在每个子数据集中按照随机数对所有记录进行排序,根据对应的数值区间的顺序将子数据集合成为乱序数据集。

由以上技术方案可见,本申请的实施例中为每条记录生成随机数,按照随机数所属的数值区间将记录划分到子数据集中,通过对子数据集中的记录和子数据集分别进行排序,利用有限的硬件资源即可高效的实现大数据集的全局乱序,达到更好的乱序效果,在应用于密码乱序时可以极大的提高安全性。

附图说明

图1是本申请实施例中一种数据集的乱序方法的流程图;

图2是本申请实施例中一种划分子数据集的实现方式的流程图;

图3是本申请应用示例中对初始文件进行乱序的处理流程图;

图4是本申请实施例所应用的设备的一种硬件结构图;

图5是本申请实施例中一种数据集的乱序装置的逻辑结构图。

具体实施方式

本申请的实施例提出一种新的数据集的乱序处理方法,通过为初始数据集中的每条记录生成随机数并对随机数进行全局排序的方式实现全局乱序,并通过将全局排序拆分为两次排序,即不同数值区间内记录的排序和数值区间的排序,来降低对硬件资源的占用并提高处理速度,以解决现有技术中存在的问题。本申请的实施例可以应用在任何具有计算功能的设备上,其流程如图1所示。

步骤110,在一定的取值范围内为初始数据集中的每条记录生成一个随机数。

本实施例中,初始数据集可以是包含若干记录的文件,可以是数据库中的一张表;记录是进行乱序处理的单位(即针对记录进行重新排列),每条记录可以是一个数字,可以是一个字符串;可以是包括多个不同类型字段的一行数据,也可以是包括多个值的数据序列。记录可以是口令、密码、测验题目等等。本实施例中对初始数据集和记录的具体形式都不做限定。

对需要进行乱序处理的初始数据集,在一定的取值范围内为其中的每条记录生成一个随机数。实际应用中,可以根据具体场景的需求、所处的运行环境等因素来确定随机数的取值范围。不论取值范围为多大,各条记录的随机数在理论上总是存在重复(即随机数数值相等)的可能性,本实施例中随机数用来对所有记录进行全局排序,重复的随机数越少,乱序的效果就越好。在本实施例中,随机数的取值范围可以可以大于、小于或等于初始数据集中记录的总条数,但较大的取值范围能够达到更好的离散性从而提高乱序的效果,而较大的取值范围也往往需要更多的硬件资源来支持。

在一定范围内生成随机数的方法可以参照现有技术中的各种随机数生成算法,不再赘述。

步骤120,将每条记录根据其随机数划分到子数据集中;每个子数据集对应于不同的数值区间,所有子数据集对应的数值区间之和为随机数的取值 范围。

将随机数的取值范围分成若干个数值区间,每个数值区间对应于一个子数据集,每个子数据集对应的数值区间不相重叠。各个子数据集数值区间的大小可以相同,也可以不同。对每条记录,按照这条记录的随机数所属的数值区间,把该记录划分到对应的子数据集中。

可以采用多种不同的方式来将初始数据集中的记录划分到子数据集中。例如,可以逐条处理初始数据集中的记录,按照记录的随机数把记录移动到对应的子数据集中,直至初始数据集为空;再如,可以针对一个子数据集的数值区间扫描初始数据集中的所有记录,将随机数处于该数值区间内的记录写入到该子数据集中,直到对所有的子数据集执行上述操作。

在一种实现方式中,每批次将初始数据集中随机数属于一定处理值域的记录划分到对应的子数据集中,其流程如图2所示。需要说明的是,每批次的随机数处理值域可以与子数据集对应的数值区间有关,也可以与其无关;换言之,可以根据子数据集对应的数值区间来设置随机数处理值域(如一批次处理数个子数据集对应的数值区间,或数个批次处理一个子数据集对应的数值区间),也可以由其他因素确定各批次的处理值域而不考虑子数据集的数值区间。

步骤210,将初始数据集置为源数据集。

划分记录的流程开始时,以全部的记录,即初始数据集作为源数据集。

步骤220,确定本批次的随机数处理值域。

每批次处理的随机数处理值域的大小可以相同,也可以不同。可以采用任意方式来在随机数的取值范围内确定每批次的处理值域,本实施例中不做限定,各次处理值域的和能够覆盖随机数的取值范围即可。

例如,可以以固定增量的方式来获得每批次的处理值域,设随机数的取值范围为0到99999,固定增量为10000时,第一批次的处理值域为0到9999,第二批次为10000到19999,以此类推,直到第十批次为90000到99999。

步骤230,读入源数据集中的一条记录,如果该记录的随机数在本批次 的处理值域内,则根据该记录的随机数将该记录及其随机数写入子数据集中;否则将该记录及其随机数写入未处理数据集中;重复本步骤直到源数据集的每条记录处理完毕。

如果源数据集中的记录的随机数在本批次的处理值域内,则按照其随机数所处的数值区间,将该记录及其随机数写入到对应于该数值区间的子数据集中。如果记录的随机数不在本批次的处理值域内,则本批次不对该记录进行子数据集的划分,将该记录及其随机数写入未处理数据集中,留待后续的批次再行划分。

对源数据集中的每条记录执行本步骤,执行完毕时,本批次划分进行完毕,随机数在本批次处理值域内的所有记录都被划分到子数据集中,而尚未进行划分的所有记录都在未处理数据集中。

步骤240,判断未处理数据集是否为空,如果不为空,将未处理数据集置为源数据集后转步骤220,进行下一批次的划分;如果为空则划分流程结束。

在一个批次的划分进行完毕后,如果未处理数据集为空,说明所有的初始数据集中的记录已划分完毕,划分流程结束。如果未处理数据集不为空,将未处理数据集置为源数据集后转步骤220,在下一个随机数处理值域继续进行记录的划分。将未处理数据集置为源数据集后,未处理数据集为空。

需要说明的是,未处理数据集为空包括两种情形,第一种是不存在未处理数据集,第二种是未处理数据集存在但其中的记录条数为零。对第一种情形,将记录写入未处理数据集时可能需要先创建未处理数据集的文件或者表项等。例如,对文件形式的未处理数据集,未处理数据集为空可能表现为该文件存在但内容为空,也可能表现为该文件不存在;类似的,将记录写入未处理数据集时可能是直接在文件中增加记录,也可能是先创建文件再增加记录。

当子数据集为文件时,可以根据子数据集对应的数值区间来为子文件命名,从而简化划分流程的实现。例如,设子数据集包括文件名为从0到K的 (K+1)个子文件(K为自然数),每个子文件对应的数值区间的大小相同,都为N(N为自然数),设随机数的取值范围为从0到L(L为自然数,且L不大于N乘以(K+1)),则文件名为m的子文件对应的随机数的数值区间为从m*N到(m+1)*N-1。在将记录划分到子文件中时,记录的随机数除以N所得的整数商即是该记录要写入的子文件的文件名。

回到图1,步骤130,在每个子数据集中按照随机数对所有记录进行排序,根据对应的数值区间的顺序将子数据集合成为乱序数据集。

步骤120执行完毕后,每个子数据集中包括随机数在该子数据集对应的数值区间内的所有记录。为了实现全局乱序,需要对初始数据集中的所有记录按照随机数排序,本实施例中,所有记录的排序拆分为两个阶段来进行:对所有子数据集的排序和对每个子数据集内记录的排序。由于每个子数据集内的记录条数可以远小于初始数据集内的记录条数,在硬件资源有限的条件下,分别进行每个子数据集内记录的排序的执行效率将远远高于对初始数据集内记录的排序。

可以采用不同的方式来具体实现这两个阶段的排序。一个例子中,按照对应的数值区间的顺序排列子数据集,将第一个子数据集作为当前子数据集;对当前子数据集中的所有记录根据记录的随机数进行排序,按照排序后的顺序将所有子数据集中的记录增加到乱序数据集中;以下一个子数据集为当前数据集按照上个步骤进行记录排序和写入乱序数据集,直到所有子数据集处理完毕。

另一个例子中,先对每个子数据集中的所有记录按照其随机数进行排序,生成排序后的子数据集;再按照对应的数值区间的顺序,把所有排序后的子数据集中的记录汇总到乱序数据集中。

本步骤中输出的乱序数据集即为所有记录按照随机数进行全局排序的数据集,即实现了全局乱序的数据集。

可见,本申请的实施例中,为初始数据集中的每条记录生成随机数并按照随机数的全局排序来确定记录的顺序,从而实现了所有记录的全局乱序; 在对记录做全局排序时,将排序拆分为对对应于随机数所属的数值区间的子数据集的排序、和对各个子数据集内记录的排序两个阶段,从而能够利用有限的硬件资源达到大数据集的全局乱序,提高了运行效率;对密码或口令进行乱序时能够极大的增加被破解的难度,提高了安全性。

在本申请的一个应用示例中,初始文件(即初始数据集)中存放了100,000,000条顺序排列的口令,其格式为每行一个口令(每行一个记录),需要将这些口令乱序后存放到List文件中,这样,在使用这些口令时,从List文件中逐行读取,即可达到足够的安全性。本应用示例中,子数据集包括20个子文件,其文件名为0.txt、1.txt直到19.txt,其对应的随机数的数值范围分别为(0,4,999,999]、[5,000,000,9,999,999]直到[95,000,000,100,000,000)。本应用示例的流程如图3所示。

步骤301,读取初始文件,为每行记录产生一个随机数,随机数的取值范围为(0,100,000,000)。生成的随机数添加在每行的头部,保存为新的文件new.txt。

步骤302,确定本批次划分子文件时的随机数处理值域。设每批次最多划分10,000条记录,则第一批次的随机数处理值域为(0,9,999],第二批次的随机数处理值域为[10,000,19,999],依此类推。

步骤303,从new.txt(源文件)中读取一行,截取行头的随机数。

步骤304,判断该行的随机数是否在本批次的处理值域内,如果在,则执行步骤305,把该行写入文件名为a.txt的子文件中,a等于该行的随机数除以5,000,000的整数商,转步骤307;如果不在,则执行步骤306,把该行写入未处理文件unexe.txt中。如果写入unexe.txt时,该文件尚不存在,则创建该文件并写入。

步骤307,判断是否到达源文件尾,如果到达,没有下一行的随机数和口令可以读取,执行步骤308,否则转步骤303。

步骤308,判断是否存在未处理文件unexe.txt,如果存在,执行步骤309,将unexe.txt重命名为new.txt,转步骤302;如果不存在,执行步骤310。

步骤310,按照子文件名对所有子文件进行排序。

步骤311,按照排序读入一个子文件,将该子文件中的数据读入内存,按照行头的随机数对所有行进行排序,把排序后的记录(即口令,不包括随机数)按照其排序增加到List文件中。

步骤312,判断是否还有未处理的子文件,如果有,转步骤311读入下一个子文件;如果没有,则流程结束,List文件即为按照随机数排序的最终乱序口令文件。

与上述流程实现对应,本申请的实施例还提供了一种数据集的乱序处理装置。该装置应用在具有计算功能的设备上,可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图4所示的CPU、内存以及非易失性存储器之外,该装置所在的设备通常还包括用于实现网络通信功能的板卡等其他硬件。

图5所示为本申请实施例提供的一种数据集的乱序处理装置,其特征在于,包括随机数生成单元、子数据集划分单元和排序单元,其中:随机数生成单元用于在一定的取值范围内为初始数据集中的每条记录生成一个随机数;子数据集划分单元用于将每条记录根据其随机数划分到子数据集中;每个子数据集对应于不同的数值区间,所有子数据集对应的数值区间之和为随机数的取值范围;排序单元用于在每个子数据集中按照随机数对所有记录进行排序,根据对应的数值区间的顺序将子数据集合成为乱序数据集。

可选的,所述子数据集划分单元包括初始化模块、处理值域模块、记录划分模块和循环控制模块,其中:初始化模块用于将初始数据集置为源数据集;处理值域模块用于确定本批次的随机数处理值域;记录划分模块用于读入源数据集中的一条记录,如果该记录的随机数在本批次的处理值域内,则根据该记录的随机数将该记录及其随机数写入子数据集中;否则将该记录及其随机数写入未处理数据集中;重复应用本模块直到源数据集的每条记录处 理完毕;循环控制模块用于当未处理数据集不为空时,将未处理数据集置为源数据集后转入处理值域模块,由处理值域模块和记录划分模块进行下一批次的处理,直到未处理数据集为空。

一种实现方式中,所述排序单元包括当前子数据集模块和增量写入模块,其中:当前子数据集模块用于按照对应的数值区间的顺序依次将一个子数据集作为当前子数据集;增量写入模块用于对当前子数据集中的所有记录按照其随机数进行排序,按照排序后的顺序将所有记录增加到乱序数据集中;重复上述应用两个模块直到所有子数据集处理完毕。

另一种实现方式中,所述排序单元包括子数据集排序模块和汇总模块,其中:子数据集排序模块用于对每个子数据集中的所有记录按照其随机数进行排序,生成排序后的子数据集;汇总模块用于按照对应的数值区间的顺序,将所有排序后的子数据集中的记录汇总到乱序数据集中。

可选的,所述子数据集包括文件名为从0到K的(K+1)个子文件,K为自然数;所述子数据集划分单元具体用于:将记录写入到以其随机数除以N所得的整数商为文件名的子文件中;N为预设的自然数,且N乘以(K+1)不小于随机数的取值范围。

可选的,所述记录包括口令或密码。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序 的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1