一种快速查找关联数据的方法与流程

文档序号:11830434阅读:450来源:国知局
一种快速查找关联数据的方法与流程
本发明涉及一种数据查找领域,尤其涉及一种快速查找关联数据的方法。
背景技术
:在大数据挖掘中,对于一些有关联的数据需要进行整合,例如电信套餐资费上需要以用户或套餐信息进行存储与关联,根据需要获取相关联的所有信息,再比如在设置一些推荐功能(菜单推荐、音乐推荐等)时,同样需要获取大量的相关信息进行处理。目前,对于相关数据的收集与处理,一般通过集合进行分类后在关联,而集合之间的合并与关联的效率直接影响着数据处理的效率。当数据通过集合进行分类表示时,通常采用大写字母表示集合,小写字母表示集合的元素,并将集合A中不同元素的数目称为集合A的基数,记作card(A),当存在多个集合A0,A1,A2,……,An,每个集合中包含有不同数量的有限多个元素,那么在计算各个集合的关联度时,需要对所有有交集的集合进行合并,要求合并完成后的最终的新的集合之间无交集,并获取此时最大元素个数的集合Ax,计算其元素的个数card(Ax)。在现有技术中,合并存在关联的集合时的处理方式是这样的:如图1所示,把集合从左到右排列分别为A0,A1,A2,……,An-1,An,从最左边的第一个集合A0开始作为主端集合,依次与其右边A1,A2,A3直到An(这轮比较这些集合称作副端)进行交集判断,逻辑如下:若主端A0集合与副端A1集合有交集,则A0集合与A1集合需要进行合并,生成的并集替换原有的副端的A1集合中内容,如此反复,从左到右依次完成主端集合A0集合的交集计算;A0集合的所有交集计算完成后,依次向右从A1作为主端集合开始,从左到右分别与A2、A3直到An逐一计算A1的交集,处理的方式与A0一致,以此反复;最后一轮是计算An-1和An的交集情况(由于An右边没有集合了,就此结束)。所有计算完成后将形成所有无交集的集合,这就是我们最终要的集合分组,分别计算每个集合的元素个数,最大的集合就是包含最多元素数量的集合。上述方案逻辑比较简洁清晰,但是该方案的效率一般,处理过程中会发现处理最慢的地方是在集合操作中的交集判断,当集合数量巨大(超过百万),且每个集合之间的关联度很大时(如十万个集合以上有相互的关联关系,并将最终形成交集),处理性能将急剧下降。技术实现要素:本发明要解决的技术问题,在于提供一种快速查找关联数据的方法,提高数据分类以及数据关联查询的效率。本发明是这样实现的:一种快速查找关联数据的方法,包括如下步骤:步骤10、获取待处理数据进行分类,将同一类别的数据划分在一个集合下,作为该集合的元素,每一集合包含数量不等的元素;步骤20、对每一集合的每一元素创建一条记录插入二维表中,每一记录包含元素字段、集合字段以及分组编号字段;步骤30、将所述二维表按集合字段进行排列得到表A,按元素字段进行排列得到表B,所述表A和表B均包含元素字段、集合字段、索引字段、反向索引字段以及分组编号字段;步骤40、依次获取表A中的一分组编号为空的记录作为源记录,设置本轮次的分组编号值,通过反向索引在表A和表B中反复查找,得到与所述源记录所在的源集合的所有关联集合,并将所述源集合的记录以及所述源集合的所有关联集合的记录所对应的分组编号置为本轮次的分组编号值;步骤50、根据相同的分组编号快速查询到所有关联的集合,从而得到所有相关的记录,得到所有关联数据群;其中,所述表A和表B互为对应列表,所述索引字段按对应记录所在列表的位置进行编号,所述反向索引字段按照对应记录在对应列表中的位置进行编号。进一步的,所述分组编号初始值为空。进一步的,所述步骤40进一步包括:步骤41、创建一新的二维表relaA,用于存储表A中的待遍历记录;步骤42、依次获取表A中一条分组编号为空的记录作为源记录,并设置本轮次的分组编号值,通过反向索引查询表B中所有与所述源记录存在相同元素字段的第一相关记录集,再逐一通过所述第一相关记录集中每一条记录的反向索引查询表A中所有与该条记录存在相同集合字段的第二相关记录集,逐一判断所述第二相关记录集中每一记录对应的分组编号是否为空,若是,则将第二相关记录集的记录插入列表relaA的尾部,并将其对应的分组编号置为本轮次的分组编号值,否则,跳过对该条记录的操作;步骤43、依次获取列表relaA中未被遍历到的一记录作为源记录,通过反向索引查询表B中所有与源记录存在相同元素字段的第三相关记录集,再逐一通过所述第三相关记录集中每一条记录的反向索引查询表A中所有与该条记录存在相同集合字段的第四相关记录集,逐一判断所述第四相关记录集中每一记录对应的分组编号是否为空,若是,则将所述第四相关记录集的记录插入到列表relaA的尾部,并将其对应的分组编号置为本轮次的分组编号值,否则,跳过对该条记录的操作;步骤44、判断列表relaA中是否存在未被遍历到的记录,若是,则返回步骤43,否则,进入步骤45;步骤45、判断表A中是否存在分组编号为空的记录,若是,则返回步骤42,否则,结束流程。进一步的,所述本轮次对应的分组编号值为与所述表A中非空的分组编号值不同的数值。本发明具有如下优点:本发明通过将数据划分集合后存入二维表,并引入反向索引,在两个列表之间的往返关联查找能直接命中被关联记录,最大限度减少计算中的无用性遍历,极大的提升了集合关联性分析的处理性能,提高大数据处理效率。附图说明下面参照附图结合实施例对本发明作进一步的说明。图1为现有技术中集合合并的原理示意图。图2为本发明一种快速查找关联数据的方法执行流程图。具体实施方式如图2所示,一种快速查找关联数据的方法,包括如下步骤:步骤10、获取待处理数据进行分类,将同一类别的数据划分在一个集合下,作为该集合的元素,每一集合包含数量不等的元素;步骤20、对每一集合的每一元素创建一条记录插入二维表中,每一记录包含元素字段、集合字段、索引字段、反向索引字段以及分组编号字段,所述分组编号初始值为空;步骤30、将所述二维表按集合字段进行排列得到表A,按元素字段进行排列得到表B,所述表A和表B均包含元素字段、集合字段、索引字段、反向索引字段以及分组编号字段,所述分组编号初始值为空;步骤40、依次获取表A中的一记录作为源记录,设置本轮次的分组编号值,作为最外围大循环,从这里开始,会给个分组编号,通常是从0或1开始,这条记录处理完,开始处理第二条记录后,组号就+1,就这样把分组编号定出来,即每一大轮中的分组编号都是一样的,都取本轮最开始订立的分组编号,通过反向索引在表A和表B中反复查找,得到与所述源记录所在的源集合的所有关联集合,并将所述源集合的记录以及所述源集合的所有关联集合的记录所对应的分组编号置为本轮次的分组编号值;所述步骤40进一步包括步骤41至步骤45:步骤41、创建一新的二维表relaA,用于存储表A中的待遍历记录;步骤42、依次获取表A中一条分组编号为空的记录作为源记录,并设置本轮次的分组编号值,通过反向索引查询表B中所有与所述源记录存在相同元素字段的第一相关记录集,再逐一通过所述第一相关记录集中每一条记录的反向索引查询表A中所有与该条记录存在相同集合字段的第二相关记录集,逐一判断所述第二相关记录集中每一记录对应的分组编号是否为空,若是,则将第二相关记录集的记录插入列表relaA的尾部,并将其对应的分组编号置为本轮次的分组编号值,否则,跳过对该条记录的操作;步骤43、依次获取列表relaA中未被遍历到的一记录作为源记录,通过反向索引查询表B中所有与源记录存在相同元素字段的第三相关记录集,再逐一通过所述第三相关记录集中每一条记录的反向索引查询表A中所有与该条记录存在相同集合字段的第四相关记录集,逐一判断所述第四相关记录集中每一记录对应的分组编号是否为空,若是,则将所述第四相关记录集的记录插入到列表relaA的尾部,并将其对应的分组编号置为本轮次的分组编号值,否则,跳过对该条记录的操作;步骤44、判断列表relaA中是否存在未被遍历到的记录,若是,则返回步骤43,否则,进入步骤45;步骤45、判断表A中是否存在分组编号为空的记录,若是,则返回步骤42,否则,结束流程。步骤50、根据相同的分组编号快速查询到所有关联的集合,从而得到所有相关的记录,得到所有关联数据群;其中,所述表A和表B互为对应列表,所述索引字段按对应记录所在列表的位置进行编号,所述反向索引字段按照对应记录在对应列表中的位置进行编号。下面结合一具体实施例对本发明做进一步说明:一种快速查找关联数据的方法,通过事先将数据进行集合划分后存入二维表中,根据具有记录进行关联查找后重新分组,即可得到关联集合组,具体的,将二维表按不同字段进行排列的得到两个列表,并引入索引和反向索引对列表中的记录位置进行标记,使得在查询时候可以直接命中相应记录,实现快速查找,以及引入一个中间列表relaA,用于存储即将被遍历的记录,使得遍历有序轮询,不浪费多余的遍历判断,实现有效遍历的同时节省遍历时间。例如,采用本发明的关联数据查找方法对电信计费批价处理,因为电信用户的海量数据,计费应用按照分布式部署,由多台计费应用构成集群完成批价处理,为了性能的考虑,计费应用集群被设计成只访问本地档案数据,不跨网络访问,因此需要把海量档案进行关联分组,并把有关联关系的所有档案分发到对应每台应用节点,确保计费批价时通过本地对档案数据进行访问(即不产生跨主机的档案访问),这就需要按照上述的档案关联关系进行分组,不管直接地、还是间接地,只要两个集合具备某种业务关系,则最终它们都被归并到同一关联分组,并加载到相同的主机,从而避免存在关联的数据被分到不同的应用主机,确保批价正确性。在电信计费中,可以按密集计算框架的分组思想,将业务关联性归为销售品关联用户、账户关联用户、支付客户关联用户、银行账号关联用户、用户关联用户和产权客户关联用户6类,对应的销售品关联用户集合、账户关联用户集合、支付客户关联用户集合、银行账号关联用户集合、用户关联用户集合、产权客户关联用户集合,按这六大关联关系对一区域内的所有档案进行分组计算。具体的,当一用户M订阅了电信的e家套餐,套餐中包括M的宽带b0、M的天翼手机号b1、母亲的天翼手机号b2和配偶的天翼手机号b3,将这些元素划入M的销售品关联用户的e家套餐集合A1中,即A1={b0,b1,b2,b3},同时M还订阅了公司wpn群套餐,该套餐包括M的天翼手机号和公司的其他4名同事的手机号,分别为b1、bA21、bA22、bA23和bA24,将5个元素划入M的销售品关联用户的vpn群套餐集合A2中,即A2={b1,bA21,bA22,bA23,bA24},另外该用户M家庭中成员的所有电芯费用都通过M的一个电信账户进行支付,支付范围包括M的宽度b0、M的天翼手机号b1、母亲的天翼手机号b2和配偶的天翼手机号b3以及父亲的天翼手机号b4,将上述的这5个元素划入M对应的账户关联用户的集合A3中,即A3={b0,b1,b2,b3,b4},其中,父亲的天翼手机号不在M的e家套餐中,而是自己订阅了一个4g套餐,将父亲订阅的这个销售品关联用户的4g套餐定义为集合A4,则A4={b4},M的朋友自己订阅了一个天翼88套餐,其手机号B5,将这个销售品关联用户定义为A5,则A5={b5};将上述5个集合存入二维表中,将分组编号字段初始化为空,如表1:表1集合元素分组编号A1b0(空)A1b1(空)A1b2(空)A1b3(空)A2b1(空)A2bA21(空)A2bA22(空)A2bA23(空)A2bA24(空)A3b0(空)A3b1(空)A3b2(空)A3b3(空)A3b4(空)A4b4(空)A5b5(空)根据表1创建表A和表B;表A表B元素集合索引反向索引分组编号b0A100(空)b0A319(空)b1A121(空)b1A234(空)b1A3410(空)b2A152(空)b2A3611(空)b3A173(空)b3A3812(空)b4A3913(空)b4A41014(空)b5A51115(空)bA21A2125(空)bA22A2136(空)bA23A2147(空)bA24A2158(空)从表A的第一条记录开始遍历,将表A中第一条记录作为源记录,通过源记录的反向索引找到该记录在表B中的位置,并得到包含该记录中元素b0的两个关联集合A1和A3,再到表A中查找集合A1和集合A3的所有记录,由于此时的集合A1和A3的记录中的分组编号均为空,因此将这两个集合存入一个中间表relaA(为不重复记录,将除源记录的其他A1和A3集合的记录存入即可),并将集合A1和A3的记录的分组编号写入本轮次的分组编号值1,如下表relaA:表relaA集合元素索引反向索引分组编号A1b1121A1b2251A1b3371A3b0911A3b11041A3b21161A3b31281A3b41391然后对表relaA进行遍历,具体的,将第一条记录作为源记录,到表B中查找到与元素b1相关的集合A1、A2、A3,再到表A中查找集合A1、A2、A3的所有记录,判断集合A1和A3的分组编号不为空(为1),A2集合的分组编号为空,此时将A2集合的所有记录插入到表relaA尾部,并将A2集合的所有记录的分组编号写入与A1和A3相同的分组编号1;将relaA中的第二条记录作为源记录,到表B中查找与元素b2关联的集合A1和A3,再到表A中查找A1和A3所有记录,判断得到A1和A3的分组编号均不为空,即已被分组,则忽略,依次对表relaA中的其他未遍历的记录进行相同操作,直至遍历完所有表relaA的记录,即找到了第一条源记录b1的关联集合,包括b1直接关联的A1、A2、A3集合以及通过A3间接关联到的A4,此时集合A1、A2、A3和A4的所有记录的分组编号均为1;依次取表A的未遍历到的分组编号为空的记录为源记录,设置本轮次的分组编号值为2,到表B中查找到与元素b5相关的集合A5,再到表A中查找集合A5的所有记录只有一条,且该记录的分组编号为空,将该记录的分组编号写入本轮次的分组编号值为2,本次在表A中查找到的记录只有一条源记录,不需要存入表relaA中,即表relaA中无未遍历到的记录,再返回表A进行遍历,此时的表A中也无未遍历的分组编号为空的记录,即完成分组操作,得到的最终结果如表4:表4集合元素分组编号A1b01A1b11A1b21A1b31A2b11A2bA211A2bA221A2bA231A2bA241A3b01A3b11A3b21A3b31A3b41A4b41A5b52此时可以很快速查询到具有相同分组编号的集合A1、A2、A3和A4,这4个集合是关联的集合,从而快速获取所有相关的记录:b0,b1,b2,b3,bA21,bA22,bA23,bA24,b4;将这些有关联的数据快速查询到后分配到同一主机进行数据处理,可避免因将这些有关联的数据分配到不同主机节点上,再跨网络访问数据时造成的访问性能下降以及延时的问题,提高了电信计费系统效率。本发明的这种查找关联数据的方法还可以应用于行为分析以及数据挖掘中,可以大大提高分析效率。例如,发现存在于大量数据集中的关联性或相关性,或描述了一个事物中某些属性同时出现的规律和模式等。具体的,比如,购物篮分析,通过发现顾客放入其购物篮中的不同商品之间的联系,分析顾客的购买习惯,从而找到哪些商品频繁地被顾客同时购买的这种关联,去帮助零售商制定营销策略;比如,某个时期某个物品最经常被客户购买,针对这些客户群进行针对性营销可提高超市的服务质量和效益;还比如,关联数据查找还用于行为分析中“由于某些事件的发生而引起另外一些事件的发生”。虽然以上描述了本发明的具体实施方式,但是熟悉本
技术领域
的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1