一种数据存储方法及查询方法技术领域
本发明涉及计算机技术领域,特别是涉及一种数据存储方法及查询方法。
背景技术
随着手机的普及,出现了海量的用户,因此对于手机号码的管理也越来越复杂。例
如,由于一些不法分子利用手机进行广告推销或者引诱消费者与其联系,从而导致消费者
出现巨额的损失。因此,运营商或者消费者可以将这些手机号码进行存储构成一个黑名单,
当需要进行正常的通信业务时,将目标号码与存储的黑名单进行比较,如果黑名单中存在
与目标号码相同的号码,说明目标号码就在黑名单的范围内,则需要过滤掉这个目标号码,
如果黑名单中不存在与目标号码相同的号码,说明目标号码不在黑名单的范围内,则不需
要过滤掉这个目标号码,可以与这个目标号码进行正常的通信业务。
现有技术中,采用的存储方法就是简单的将每个手机号码存储在指定的区域中。
由于黑名单中的号码非常多,可能存在上千万个,因此,以上述的存储方式进行存储后,如
果需要对某个号码进行查询,则需要遍历大量的号码,甚至是全部的号码。如果有100个号
码,则最大循环次数就是100次,如果是1000个号码,则最大循环次数就是1000次,很显然,
如果是千万级别的个数,则最大的循环次数就是千万次。
综上所述,现有的存储方式使得后续的查询工作非常繁琐,会耗费大量的时间,并
且随着数据的增多,查询的循环次数也在不断增加,对于服务器的性能影响非常大。因此,
如何降低查询时间以提高查询的效率是本领域技术人员亟待解决的问题。
发明内容
本发明的目的是提供一种数据存储方法及数据查询方法,本方法能够克服后续查
询工作繁琐,耗费大量时间的问题,并且不会随着数据的增多,而增加查询的循环次数。因
此,本方法能够降低查询时间以提高查询的效率。
为解决上述技术问题,本发明提供一种数据存储方法,包括:
将待存储数据按照数据位的位置关系分解成N个层级;
将所述待存储数据按照层级的关联关系存入预先设置的多叉树结构中;
其中,所述多叉树中的节点层级与所述N个层级对应,N为正整数,且等于或小于所
述待存储数据的数据位数。
优选地,所述待存储数据为包含多位数字的数字信息。
优选地,所述数字信息为10进制数据。
优选地,所述将待存储数据按照数据位的位置关系分解成N个层级具体包括:
将所述待存储数据按照预定规则进行压缩以生成对应的新待存储数据;
将所述新待存储数据按照数据位的位置关系分解成N个层级。
优选地,所述待存储数据为包含11位数字的手机号码。
优选地,所述预定规则为预定进制转换,则所述新待存储数据为所述待存储数据
按照预定进制转换后的结果。
优选地,所述预定进制转换为16进制转换或32进制转换或64进制转换。
优选地,所述待存储数据为包含多位字母的字母信息。
优选地,所述N个层级的先后顺序与所述待存储数据的读取顺序相同。
为解决上述技术问题,本发明提供一种数据查询方法,基于上述所述的数据存储
方法,包括:
将待查询数据按照数据位的关系分解成N个层级;
将所述待查询数据按照层级的关联关系遍历所述多叉树结构,直到所述多叉树结
构中的第M个节点层级中未包含有对应的数据位或查询到所述待查询数据为止;其中,M小
于或等于N。
本发明所提供的数据存储方法,包括将待存储数据按照层级的关联关系存入预先
设置的多叉树结构中,然后将待存储数据按照数据位的位置关系分解成N个层级。通过这样
的存储方式,在进行后续的查询过程中,不需要遍历全部的存储数据,只需要依据待查询数
据中各数据位的层级关系,遍历多叉树结构即可,最大的循环次数为多叉树的节点层级,并
且循环次数不会随着数据量的增多而增多。因此,本发明提供的数据存储方法能够降低后
续查询的工作量,从而降低查询时间和提高查询效率。
此外,本发明还提供的一种数据查询方法基于上述所述的数据存储方法,在查询
过程中,该方法不需要遍历全部的存储数据,只需要依据待查询数据中各数据位的层级关
系,遍历多叉树结构即可,最大的循环次数为多叉树的节点层级,并且循环次数不会随着数
据量的增多而增多。因此,本发明提供的数据查询方法能够降低查询的工作量,从而降低查
询时间和提高查询效率。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的
介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人
员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据存储方法的流程图;
图2为发明实施例提供的一种数据存储结构示意图;
图3为本发明实施例提供另一种数据存储方法的流程图;
图4为本发明实施例提供的一种经过压缩后的存储结构示意图;
图5为本发明实施例提供的一种数据查询方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本
发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他
实施例,都属于本发明保护范围。
本发明的核心是提供一种数据存储方法及数据查询方法,本方法能够克服后续查
询工作繁琐,耗费大量时间的问题,并且不会随着数据的增多,而增加查询的循环次数。因
此,本方法能够降低查询时间以提高查询的效率。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式
对本发明作进一步的详细说明。
图1为本发明实施例提供的一种数据存储方法的流程图。如图1所示,包括:
S10:将待存储数据按照数据位的位置关系分解成N个层级。
可以理解的是,待存储数据可以为包含多位数字的数字信息或为包含多位字母的
字母信息。例如,对于数字信息来说如果是10进制的数据,则数据位中的内容就是0-9,数据
位中的内容均是数字,如果是16进制的数据,则数据位中的内容就是0-F,则数据位中的内
容除了0-9数字外,还包括A-F几个字母,但是A-F几个字母也为数字信息。另外,还可以是2
进制或者32进制的数据,本实施例不再赘述。
本实施例中,按照数据位的位置关系分解成N个层级必须保证每个数据位在原始
数据中的位置关系与分解后的层级关系时相同的。例如,如果数据位为N位,分解成N个层级
的话,则第一个数据位的数据如果在第一个层级,则第二个数据位的数据必须是第二个层
级,第三个数据位的数据必须是第三个层级,以此类推;同样的,如果第一个数据位的数据
在最后一个层级,则第二个数据位的数据必须在倒数第二个层级,第三个数据位的数据必
须在倒数第三个层级,以此类推。只有这样的分解方式,才能保证每个数据位在原始数据中
的位置关系与在分解结构中的位置关系是相同的。
需要说明的是,上文中描述的数据位有N位,则分解成N个层级只是一种具体实现
形式,在另外一种实施例中,还可以是每两位,或者每三位等形式,本实施例不再赘述。分解
的层级越多,则需要循环的查询的次数越多,但是每一层的节点较少,即同一层的查询时间
就会较少。
S11:将待存储数据按照层级的关联关系存入预先设置的多叉树结构中,其中,多
叉树中的节点层级与N个层级对应,N为正整数,且等于或小于待存储数据的数据位数。
多叉树结构为倒立的树状结构,多叉树中有多个节点层级,这里的节点层级与待
存储数据分解成的N个层级相互对应。
为了让本领域技术人员更加理解本发明所提供的技术方案,本实施例中给出一个
简单的例子加以说明。如果待存储数据均为6位的数字信息,且为10进制,例如412012、
412013、415357和415358。按照步骤S10将这四个数据进行分解,例如分解成6个等级。图2为
发明实施例提供的一种数据存储结构示意图。如图2所示,如果最高数据位为第一个层级的
话,则每个待存储数据中的最高位(均为4)存储在多叉树结构中的第一个节点层级,这里4
个待存储数据的最高数据位均为1,因此,不需要分叉。按照数据位的位置关系,第一个待存
储数据的第二个数据位、第二个待存储数据的第二个数据位、第三个待存储数据的第二个
数据位以及第四个待存储数据的第二个数据位均为多叉树结构中的第二个节点层级,这里
4个待存储数据的第二个数据位均为1,因此,不需要分叉。按照数据位的位置关系,第一个
待存储数据的第三个数据位、第二个待存储数据的第三个数据位、第三个待存储数据的第
三个数据位以及第四个待存储数据的第三个数据位均为多叉树结构中的第三个节点层级,
这里4个待存储数据的第三个数据位有两种,分别为2或5,因此,多叉树要进行分叉,即第三
个节点层级有两个节点。其余的分解和存储均类似,本实施例不再赘述。
采用上述的存储方式,当进行数据查询时,将待查询数据按照层级的关联关系遍
历多叉树结构,直到多叉树结构中的第M个节点层级中未包含有对应的数据位或查询到待
查询数据为止;其中,M小于或等于N。图2中由于数据较少对于查询的效果并明显,然而如果
数据较多的话,例如最大可以是999999,则需要重复查询上万次,甚至更多次才可能查询到
相关的数据,因此循环查询的次数非常多,并且每个数据之间并没有关联,如果所要查询的
数据在最后一个或者不存在的话,则需要的查询次数最大。但是采用本存储方法的话,则只
需要按照多叉树结构依次查询即可。如果需要查询440896这个数据是否在存储范围中,则
只需要对多叉树结构中的第一个节点层级查询是否包含第一个数据位4即可,如果这个节
点层级中包含4,则进行下一个节点层级的查询,下一个数据位为4,不再第二个节点层级
中,则说明该待查询数据不再存储范围内,也就不需要再进行后续的查询步骤。利用本存储
方式,只需要查询2次即可,但是对于现有的存储方式来说,需要遍历存储范围内的全部数
据才能确定是否存在待查询数据,因此本存储方式能够较小查询的次数。
本实施例提供的数据存储方法,包括将待存储数据按照层级的关联关系存入预先
设置的多叉树结构中,然后将待存储数据按照数据位的位置关系分解成N个层级。通过这样
的存储方式,在进行后续的查询过程中,不需要遍历全部的存储数据,只需要依据待查询数
据中各数据位的层级关系,遍历多叉树结构即可,最大的循环次数为多叉树的节点层级,并
且循环次数不会随着数据量的增多而增多。因此,本发明提供的数据存储方法能够降低后
续查询的工作量,从而降低查询时间和提高查询效率。
在具体实施中,往往存储的数据非常多,给存储空间带来了巨大的压力,如何能够
减小存储空间的用量是本领域技术人员面临的又一个大问题。
本实施例中,在将待存储数据存储至多叉树结构之前,将待存储数据进行压缩,从
而减少存储空间的用量,具体过程如下。
图3为本发明实施例提供另一种数据存储方法的流程图。在图1的基础上步骤S10
具体包括:
S100:将待存储数据按照预定规则进行压缩以生成对应的新待存储数据。
S101:将新待存储数据按照数据位的位置关系分解成N个层级。
可以理解的是,采用何种预定规则需要根据实际情况而定,例如预定规则为预定
进制转换,则新待存储数据为待存储数据按照预定进制转换后的结果。预定进制转换为16
进制转换或32进制转换或64进制转换。例如,如果一个待存储数据本身就是16进制,因此,
如果采用16进制转换是没有意义的,无法实现数据的压缩。
在一种具体的实施方式中,待存储数据为包含11位数字的手机号码。当前中国大
陆的手机号码为包含11位数字,均以1开头。对于这样的数据我们可以进行64进制的数据转
换。例如,对于“18500000000”进行64进制转换后为“heHVA0”,很显然,数据位由原来的11
位,变成现在的6位,因此如果不进行压缩,则在进行数据查找时,需要循环11次,而经过压
缩后,则只需要循环6次即可。图4为本发明实施例提供的一种经过压缩后的存储结构示意
图。
作为优选的实施方式,N个层级的先后顺序与待存储数据的读取顺序相同。例如,
图2或图4所示的存储示意图。
在以上述存储方法进行存储下,本发明还提供一种数据查询方法。图5为本发明实
施例提供的一种数据查询方法的流程图。该数据查询方法基于上述实施例所述的数据存储
方法,包括:
S20:将待查询数据按照数据位的关系分解成N个层级;
S21:将待查询数据按照层级的关联关系遍历多叉树结构,直到多叉树结构中的第
M个节点层级中未包含有对应的数据位或查询到待查询数据为止,其中,M小于或等于N。
由于该数据查询方法基于上述实施例所述的数据存储方法,因此,数据存储方法
对应的实施例不再赘述。对于一个待查询数据,如果第三个节点层级中不包含该数据对应
的数据位,则可以停止本次查询,否则,依次对每个节点层级查询即可。
本实施例提供的数据查询方法,基于数据存储方法,该存储方法包括将待存储数
据按照层级的关联关系存入预先设置的多叉树结构中,然后将待存储数据按照数据位的位
置关系分解成N个层级。在查询过程中,不需要遍历全部的存储数据,只需要依据待查询数
据中各数据位的层级关系,遍历多叉树结构即可,最大的循环次数为多叉树的节点层级,并
且循环次数不会随着数据量的增多而增多。因此,本发明提供的数据查询方法能够降低查
询的工作量,从而降低查询时间和提高查询效率。
以上对本发明所提供的数据存储方式及查询方法进行了详细介绍。说明书中各个
实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个
实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公
开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于
本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若
干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。