发明名称 基于Hadoop的关系表非冗余键集合识别方法
摘要 基于Hadoop的关系表非冗余键集合识别方法。包括:提出了一种基于数据修剪和属性修剪的键集合识别算法,并设计出了该算法的分布式解决方案MRKeyFinder。本发明提出的非冗余键集合识别算法,能够为大规模数据集中非冗余键集合信息识别提供一种有效的解决方案。本发明可用于数据建模、数据集成、异常检测、查询优化、建立索引等领域。
申请公布号 CN103853844A 申请公布日期 2014.06.11
申请号 CN201410110441.7 申请日期 2014.03.24
申请人 南开大学 发明人 袁晓洁;韩术鹏;蔡祥睿;莫云音;温延龙
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 天津佳盟知识产权代理有限公司 12002 代理人 李益书
主权项 基于Hadoop的关系表非冗余键集合识别方法,其特征在于该方法包括如下步骤:第1、识别数据中的键集合第1.1、使用投影统计方法判断一个属性集合是否是键,<b>定义</b><b>1</b><b>:</b>键:键是数据表中唯一标识一条数据记录的属性或属性集合;在数据表中,不存在两条数据记录构成键的所有属性值都相同;第1.1.1、投影操作:将数据表在属性集合K进行投影得到数据集合S;第1.1.2、统计操作:统计投影后集合S中每一条数据在S中出现的次数,如果每一条数据都只出现过一次,则说明属性集合K是键,否则,K不是键;第1.2、对冗余的属性集进行修剪,<b>定义</b><b>2</b><b>:</b>冗余键:除了包含键的所有属性之外,还含有关系中的其它属性的属性集合;第1.2.1、基于启发式规则:如果一个属性集合是某个键的超集,那么这个属性集合是一个冗余键;根据启发式规则可以对需要进行键判别的属性集合进行修剪,避免对冗余键的投影统计操作;第1.2.2、对于键所组成的集合KeySet中的每一个非冗余键<i>key</i>,如果待判定属性集合CandidateKey包含任意一个<i>key</i>,则说明CandidateKey是冗余的键;第1.3、对数据集进行修剪,在对某一个CandidateKey判别结束后,可以先对数据集进行修剪,去除数据表中执行投影统计操作后统计结果count域为1的数据记录,从而可以降低数据集的规模,降低键识别过程中的计算代价;第2、基于Hadoop的键集合识别算法    含数据修剪的分布式非冗余键集合识别算法:MRPKeyFinder;该算法的主要内容是:在属性集修剪操作及数据集合修剪操作的基础之上,基于Hadoop平台同时对属性集合树中每一个节点的子节点进行键判别;    <b>定义</b><b>3</b><b>:</b>属性集合树:一种用于表示属性集合之间包含关系的树形结构;    属性集合树中的每一个节点都是关系表中的属性所组成的集合,树中每一个节点所表示的集合都是这个节点的子节点表示的集合的子集,位于同一层的节点所表示的集合具有相同的阶数,即集合具有相同的元素数; 本发明主要利用属性集修剪操作及数据修剪操作对BruteForce算法进行改进,并在此基础上提出了分布式键集合识别算法MRPKeyFinder;由于将数据集在属性集合K上进行投影的计算过程中,数据集中的每一条记录在K上进行投影的过程是相互独立、互不影响的,所以可以将数据集的投影过程并行执行;因此,MRKeyFinder将属性集合树中同一层的属性集合的判别过程并行执行,从而可以在不影响程序正确性的基础上很大程度上提高程序的执行效率; 第2.1、键判别算法MRPCheckKey用来验证一个属性集合是否是键;MRPCheckKey采用KeyValueTextInputFormat的作业输入方式,key与value以“|”作为分隔符;该算法由一个Mapper类和一个Reducer类组成;第2.1.1、Mapper 类根据传入的属性列表,对输入数据进行投影:在Map任务中解析出AttrList,对于AttrList中的每一个<i>Attr</i>,根据传入的&lt;key,value&gt;及<i>Attr</i>拼接出输出的key,将输出的value设置为输入的value,输出到 Reduce;第2.1.2、Reducer 类对投影记录进行分组聚集,并根据聚集结果进行相应的输出:在 Reduce中,对于传入的&lt;key,value‑list&gt;,如果value‑list不止含有一个value,则遍历value‑list,对于value‑list的每一个<i>value</i>,将&lt;key,<i>value</i>&gt;输出到与该key对应的文件中;第2.2、MRPKeyFinder算法中定义如下数据结构用以保存上下文信息:ContextInfo {             String Path;             String curKey;             ArrayList&lt;int&gt; Attr;}    其中,Path为数据集文件路径,curKey为属性ID拼接成的字符串,Attr为属性ID集合;此外,MRPKeyFinder算法中定义变量Parallelism,用以指示允许同时进行键判别的属性集合的最大个数,该参数是为了防止内存空间不足而设置的;假设算法执行到对属性集合树第m层的属性集合集A[A<sub>1</sub>,A<sub>2</sub>,…A<sub>n</sub>]进行键判别,其中A<sub>i</sub> 是第m层中的第i个属性集合, curKeyList表示待验证的属性集合所组成的列表,MRPKeyFinder算法的执行流程如下:①、首先遍历A,对<i>A<sub>i</sub></i>进行冗余键判别,如果<i>A<sub>i</sub></i>不是冗余键,则将<i>A<sub>i</sub></i>插入curKeyList中,否则对以<i>A<sub>i</sub></i>为根的子树进行剪枝;②、遍历完A后,将curKeyList传递给MapReduce化的键判别算法MRCheckKey,同时对curKeyList中的所有属性集合进行键判别,并在判别的过程中进行数据剪枝;③、判别结束后,遍历curKeyList,对于curKeyList中的每一个<i>A<sub>i</sub></i>,根据MRCheckKey算法的输出判断<i>A<sub>i</sub></i>是否是键,如果<i>A<sub>i</sub></i>是键,则将<i>A<sub>i</sub></i>插入KeySet中,并对以<i>A<sub>i</sub></i>为根的子树进行剪枝;④、遍历curKeyList结束后,进入对下一层属性集合集的键判别过程。
地址 300071 天津市南开区卫津路94号