一种查询唯一值的方法及设备技术

技术编号:18783668 阅读:32 留言:0更新日期:2018-08-29 06:55
本申请的目的是提供一种查询唯一值的方法及设备,本申请通过已创建好的索引树,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,确定当前待查询的稀疏列的值,并在所述叶子节点中依次查找当前待查询的稀疏列的值所属的第一条指引记录,所述指引记录包括数据的存储位置和对应的所述数据中的稀疏列的值,所述指引记录按照所述稀疏列的值从小到大的顺序,依次存于索引树的各连续的叶子节点;并根据查找到的第一条指引记录中数据的存储位置,获取对应的所述数据,将获取到的所述数据中的稀疏列的值加入唯一值集合,实现了基于该索引树,完成对待查询的稀疏列的值的唯一值的快速获取。

【技术实现步骤摘要】
一种查询唯一值的方法及设备
本申请涉及计算机领域,尤其涉及一种查询唯一值的方法及设备
技术介绍
稀疏列是指稀疏列所属的总的记录数据很多,但是值却不多的列,例如,某个环卫公司有1000辆车,若每辆车每天可能产生10万条行驶轨迹的记录数据,其中这些记录数据中有一个列存储的是车辆的车牌,那么在总的1亿记录中,车牌所属列的值实际上只有1000个。唯一值,用于指示在一张表中,某列的取值个数,例如在该稀疏列(车牌)的唯一值就是这1000个车牌。现有技术中,由于稀疏列所属的记录数据存储在没有规则拍讯的堆表中,若需计算稀疏列的唯一值,则需要扫描全表,对稀疏列进行排序,然后去除稀疏列的重复值,得到稀疏列的唯一值的个数。例如如图1所示,在上述车辆在一天中的所有1亿条记录数据存储于堆表中,当需计算有多少辆车子出勤了的时候,则需对上述1亿的记录数据进行排序,然后去除车辆对应的车牌的重复值所属的记录数据,每个车辆对应的车牌所属的记录数据只留下一条,则计算得到的车辆对应的车牌的总数,可以得到车牌(稀疏列)的唯一值的个数,导致整个过程的资源开销非常大且效率低。进一步地,现有技术还使用索引,对需要计算唯一值的稀疏列创建索引树,由于索引是已经对稀疏列的排序后的数据组织,故不需要排序的过程,又由于数据库是支持并行访问的,每天记录数据有版本信息但索引没有版本信息,需要扫描索引树中的所有的叶子节点,然后去重,并统计稀疏列的唯一值所属的记录数据条数,导致查找稀疏列的唯一值的工作量大且效率低,进而无法快速地获取稀疏列的唯一值。
技术实现思路
本申请的一个目的是提供一种查询唯一值的方法及设备,解决现有技术中查找唯一值导致的工足量大且效率低的问题。根据本申请的一个方面,提供了一种含有稀疏列的数据的存储方法,该方法包括:获取数据的存储位置和对应的所述数据中的稀疏列的值,将数据的存储位置和对应的所述数据中的稀疏列的值作为指引记录;按照所述稀疏列的值从小到大的顺序,将所述指引记录依次存入索引树的各连续的叶子节点;在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。进一步地,上述方法中,所述在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最大值或最小值。进一步地,上述方法中,所述上层节点包括所述叶子节点的上一层根节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在所述根节点中记录其所包含的叶子节点及该叶子节点中的指引记录中的稀疏列的值的最值。进一步地,上述方法中,所述上层节点包括所述叶子节点的上一层分支节点和所述分支节点的上一层根节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在所述叶子节点的上一层的分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值;在根节点记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值。进一步地,上述方法中,所述上层节点包括根节点,处于所述根节点和叶子节点之间的多层分支节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,或在分支节点中记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;在根节点记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值。根据本申请的另一个方面,提供了一种查询唯一值的方法,该方法包括:根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,确定当前待查询的稀疏列的值;在所述叶子节点中依次查找当前待查询的稀疏列的值所属的第一条指引记录,其中,所述指引记录包括数据的存储位置和对应的所述数据中的稀疏列的值,所述指引记录按照所述稀疏列的值从小到大的顺序,依次存于索引树的各连续的叶子节点;根据查找到的第一条指引记录中数据的存储位置获取所述数据,将获取到的所述数据中的稀疏列的值加入唯一值集合。进一步地,上述方法中,根据查找到的指引记录中数据的存储位置获取所述数据之后,还包括:若未获取到,在当前查询的叶子节点或后续叶节点依次查找当前待查询的稀疏列的值所属的下一条指引记录;根据查找到的下一条指引记录中的数据的存储位置获取所述数据,若获取到,将所述含有稀疏列的值加入唯一值集合,若未获取,重复上述步骤直至获取所述数据,则将获取到的所述数据中的稀疏列的值加入唯一值集合,或直至查询到的下一条指引记录中的稀疏列的值不同于当前待查询的稀疏列的值。进一步地,上述方法中,若索引树中的上层节点中记录的是该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最小值,确定当前待查询的稀疏列的值,包括:由上层节点所包含的叶子节点中的指引记录的稀疏列的值的所有最小值中的最小值开始,按从小到大的顺序,依次将叶子节点中的指引记录的稀疏列的值作为当前待查询的稀疏列的值。进一步地,上述方法中,若索引树中的上层节点中记录的是该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最大值,确定当前待查询的稀疏列的值,包括:由上层节点所包含的叶子节点中的指引记录的稀疏列的值的所有最大值中的最大值开始,按从大到小的顺序,依次将叶子节点中的指引记录的稀疏列的值作为当前待查询的稀疏列的值。进一步地,上述方法中,所述上层节点包括所述叶子节点的上一层根节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:根据索引树中的根节点中记录的其所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值。进一步地,上述方法中,所述上层节点包括所述叶子节点的上一层分支节点和所述分支节点的上一层根节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:先根据根节点记录的其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;再根据所述叶子节点的上一层的分支节点中记录的其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。进一步地,上述方法中,所述上层节点包括根节点,处于所述根节点和叶子节点之间的多层分支节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:先根据根节点记录的其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;再根据分支节点中记录该分支节点所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;最后根据分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。根据本申请的另一个方面,提供了一种含有稀疏列的数据的存储设备,其中,所述设备包括:获取装置,用于获取数据的存储位置和对应的所述数据中的稀疏列的值,将数据的存储位置和对应的所述数据中的稀疏列的值作为指引记录;存储装置,用于按照所本文档来自技高网...

【技术保护点】
1.一种含有稀疏列的数据的存储方法,其中,所述方法包括:获取数据的存储位置和对应的所述数据中的稀疏列的值,将数据的存储位置和对应的所述数据中的稀疏列的值作为指引记录;按照所述稀疏列的值从小到大的顺序,将所述指引记录依次存入索引树的各连续的叶子节点;在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。

【技术特征摘要】
1.一种含有稀疏列的数据的存储方法,其中,所述方法包括:获取数据的存储位置和对应的所述数据中的稀疏列的值,将数据的存储位置和对应的所述数据中的稀疏列的值作为指引记录;按照所述稀疏列的值从小到大的顺序,将所述指引记录依次存入索引树的各连续的叶子节点;在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。2.根据权利要求1所述的方法,其中,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最大值或最小值。3.根据权利要求1所述的方法,其中,所述上层节点包括所述叶子节点的上一层根节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在所述根节点中记录其所包含的叶子节点及该叶子节点中的指引记录中的稀疏列的值的最值。4.根据权利要求1所述的方法,其中,所述上层节点包括所述叶子节点的上一层分支节点和所述分支节点的上一层根节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在所述叶子节点的上一层的分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值;在根节点记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值。5.根据权利要求1所述的方法,其中,所述上层节点包括根节点,处于所述根节点和叶子节点之间的多层分支节点,在所述叶子节点的上层节点中记录该上层节点所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,包括:在分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值,或在分支节点中记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;在根节点记录其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值。6.一种查询唯一值的方法,其中,所述方法包括:根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,确定当前待查询的稀疏列的值;在所述叶子节点中依次查找当前待查询的稀疏列的值所属的第一条指引记录,其中,所述指引记录包括数据的存储位置和对应的所述数据中的稀疏列的值,所述指引记录按照所述稀疏列的值从小到大的顺序,依次存于索引树的各连续的叶子节点;根据查找到的第一条指引记录中数据的存储位置获取所述数据,将获取到的所述数据中的稀疏列的值加入唯一值集合。7.根据权利要求6所述的方法,其中,根据查找到的指引记录中数据的存储位置获取所述数据之后,还包括:若未获取到,在当前查询的叶子节点或后续叶节点依次查找当前待查询的稀疏列的值所属的下一条指引记录;根据查找到的下一条指引记录中的数据的存储位置获取所述数据,若获取到,将所述含有稀疏列的值加入唯一值集合,若未获取,重复上述步骤直至获取所述数据,则将获取到的所述数据中的稀疏列的值加入唯一值集合,或直至查询到的下一条指引记录中的稀疏列的值不同于当前待查询的稀疏列的值。8.根据权利要求6所述的方法,其中,若索引树中的上层节点中记录的是该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最小值,确定当前待查询的稀疏列的值,包括:由上层节点所包含的叶子节点中的指引记录的稀疏列的值的所有最小值中的最小值开始,按从小到大的顺序,依次将叶子节点中的指引记录的稀疏列的值作为当前待查询的稀疏列的值。9.根据权利要求6所述的方法,其中,若索引树中的上层节点中记录的是该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最大值,确定当前待查询的稀疏列的值,包括:由上层节点所包含的叶子节点中的指引记录的稀疏列的值的所有最大值中的最大值开始,按从大到小的顺序,依次将叶子节点中的指引记录的稀疏列的值作为当前待查询的稀疏列的值。10.根据权利要求6所述的方法,其中,所述上层节点包括所述叶子节点的上一层根节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:根据索引树中的根节点中记录的其所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值。11.根据权利要求6所述的方法,其中,所述上层节点包括所述叶子节点的上一层分支节点和所述分支节点的上一层根节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:先根据根节点记录的其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;再根据所述叶子节点的上一层的分支节点中记录的其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。12.根据权利要求6所述的方法,其中,所述上层节点包括根节点,处于所述根节点和叶子节点之间的多层分支节点,根据索引树中的上层节点中记录的该上层节点所包含的叶子节点及该叶子节点中的指引记录的稀疏列的值的最值,包括:先根据根节点记录的其所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;再根据分支节点中记录该分支节点所包含的下一层分支节点及该下一层分支节点中的稀疏列的值的最值;最后根据分支节点中记录其所包含的叶子节点及该叶子节点中指引记录的稀疏列的值的最值。13.一种含有稀疏列的数据的存储设备,其中,所述设备包括:获取装置,用于获取数据的存储位置和对应的所述数据中的稀疏列的值,将数据的存储位置和对应的所述数据中的稀疏列的值作为指引记录;存储装置,用于按照所述稀疏列的值从小到大的顺序,将所述指引记录依次存入索引树的各连续的叶子...

【专利技术属性】
技术研发人员:周正中
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1