分表分页排序查询方法及装置的制造方法_2

文档序号:9887712阅读:来源:国知局
有的功能。
[0047]实施例二
[0048]本发明实施例二提供一种分表分布排序查询的装置。如图3所示,本发明实施例二的装置包括:
[0049]计算模块10,用于通过预设的查询参数和分表规则计算得到分表二维数组;分表二维数组的一维数组为同一查询参数值对应的多个分表;
[0050]建立索引模块20,用于根据预设的数据结构和查询参数为分表二级数组建立本次查询的查询结果集的索引表;数据结构包括查询参数、查询参数对应的一维数组内每一分表的序号和行数;
[0051]定位模块30,用于当需要调取所述索引表内待查询页的数据时,根据索引表定位该待查询页的数据所在的一组或多组分表;
[0052]显示模块40,用于调取一组或多组分表的数据,并显示。
[0053]如图4所示,建立索引模块20包括:
[0054]取数单元21,用于遍历分表二维数组,取每一一维数组;
[0055]创建HashMap单元22,用于创建HashMap,将每一查询参数值作为HashMap的Key,将所述一维数组中每一查询参数值对应的数据作为HashMap的Value,得到索引表。上述HashMap的Value为一二维数组,第一行数据为同一查询参数值对应的数据在每一分表中的行数,第二行数据为该分表在分表二维数组中的下标值。
[0056]如图5所示,定位模块30包括:
[0057]计算单元31,用于根据待查询页的序号和行数,计算所述待查询页的数据所在分表在所述索引表的位置;
[0058]获取单元32,用于根据待查询页的数据所在分表在索引表的位置,获取索引表中待查询页的数据所在分表的下标值和数据在该分表内的行数。
[0059]本发明实施例二的装置具体工作原理如下:
[0060]计算模块10通过预设的查询参数和分表规则计算得到分表二维数组;分表二维数组的一维数组为同一查询参数值对应的多个分表。
[0061]上述预设的查询参数可以根据需要进行设置,在实际应用中可能是餐饮类的价格、菜品等。通过查询参数和分表规则计算出所有的多组分表,分别存放于二维数组中,本发明实施例一将该二维数组称为分表二维数组,分表二维数组的一维数据存储同一次查询所关联的分表。
[0062]建立索引模块20根据预设的数据结构和查询参数为分表二级数组建立本次查询的查询结果集的索引表;数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数。
[0063]取数单元21遍历分表二维数组,取得每一个一维数组,将一维数组中的每个分表替换分组SQL中对应的原始表,并在此分组SQL上加排序和分组的功能即Order by和Groupby,分组和排序都是用同一列数据,该列数据称之为排序列,排序列的值为每一具体的查询参数值。
[0064]创建HashMap单元22设置一数据结构建立本次查询的查询结果集的索引表,创建HashMap用于存放每组查询的合并后的索引数据。先创建一个保存总行数的变量,查询返回的数据是一个列表,包括查询参数值和查询参数值对应的二维数组两列数据。然后遍历这个列表,将每一行数据合并到HashMap中,即将查询参数值相同的数据进行合并,HashMap的key是查询参数值,HashMap的Value是有两行的二维数组,存放查询参数值对应的索引数据,即索引二维数组,第一行存放是同一查询参数值对应数据在每一分表中的行数,第二行存入该分表在分表二维数组中的下标值。将每一查询参数值的行数累加到总行数中,遍历分表二维数组后,完成将所有索引数据存放HashMap中,并计算出了总行数,再将这个HashMap和总行数保存在缓存中,缓存的Key值是分页查询SQL,Value是HashMap和总行数,缓存超时时间默认是I分种。
[0065]当需要调取索引表内待查询页的数据时,输入查询的SQL、待查询页的开始位置和每页的行数。计算单元31通过SQL从缓存中查出HashMap。仓Il建一个变量用于记录已遍历过的行数,即变量A。遍历HashMap的Key值,通过Key值取得对应的Value值,Value值是索引二维数组。将索引二维数组的行数累加,再和变量A相加,将相加后的值存在变量A中。如果变量A的值等于或大于待查询页的开始位置时,记录下此数组的下标,此为开始下标,再用变量A值减去待查询页的开始位置,得到值再往后累加相应的行数,如果等于或大于每页的大小,记录下此数组的下标,此下标就是结束下标,获取单元32通过开始下标和结束下标截取索引二维数组第二行数据,截取出来的数据是一维组件,它存放是分表二维组件中分表的下标值,如此,可从分表二维数组找出多组分表。如果存在相同的分表,则把它们合平并,并且对应的行数也累加,累加后的行数就是一组分表分页查询的行数,再通过开始下标和结束下标计算出每一组分表查询的开始位置。
[0066]显示模块40创建一个列表存储每组分表查询返回的经果集,把它叫做结果集列表,遍历这些多组分表,把每一组分表替换SQL对应的原始表,通过开始位置和页的行数在SQL上加上分页的功能,然后通过SQL进行查询返回结果集采用快速排序法进行排序。依次遍历完所有的列表后,结果集列表就是分表排序分页查询的结果。
[0067]本发明实施例二以比较通用的方法解决了任何一种分表、排序、分页查询的问题。排序列是任何的列,不受限制。分表的规则也不受限制。采用排序索引定位每一组分表分页数据,速度快,索引数据结构精简,占用内存少,通过缓存保存索引数据,减少数据库的查询。本发明的功能可以封装在一起,能用一行代码处理完所有的功能。
[0068]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种分表分页排序查询方法,其特征在于,所述方法包括如下步骤: 通过预设的查询参数和分表规则计算得到分表二维数组;所述分表二维数组的一维数组为同一查询参数值对应的多个分表; 根据预设的数据结构和所述查询参数为所述分表二级数组建立本次查询的查询结果集的索引表;所述数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数; 当需要调取所述索引表内待查询页的数据时,根据所述索引表定位该待查询页的数据所在的一组或多组分表; 调取所述一组或多组分表的数据,并显示。2.如权利要求1所述的方法,其特征在于,所述根据预设的数据结构和查询参数为分表二级数组建立本次查询的查询结果集的索引表包括: 遍历分表二维数组,取每一一维数组; 创建HashMap,将每一查询参数值作为HashMap的Key,将所述一维数组中每一查询参数值对应的数据作为HashMap的Value,得到索引表。3.如权利要求2所述的方法,所述HashMap的Value为一二维数组,第一行数据为同一查询参数值对应的数据在每一分表中的行数,第二行数据为该分表在分表二维数组中的下标值。4.如权利要求3所述的方法,其特征在于,所述当需要调取索引表内待查询页的数据时,根据索引表定位该查询页的数据所在的一组或多组分表包括: 根据所述待查询页的序号和行数,计算所述待查询页的数据所在分表在所述索引表的位置; 根据所述待查询页的数据所在分表在所述索引表的位置,获取索引表中待查询页的数据所在分表的下标值和所述数据在该分表内的行数。5.一种分表分布排序查询的装置,其特征在于,所述装置包括: 计算模块,用于通过预设的查询参数和分表规则计算得到分表二维数组;所述分表二维数组的一维数组为同一查询参数值对应的多个分表; 建立索引模块,用于根据预设的数据结构和所述查询参数为所述分表二级数组建立本次查询的查询结果集的索引表;所述数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数; 定位模块,用于当需要调取所述索引表内待查询页的数据时,根据所述索引表定位该待查询页的数据所在的一组或多组分表; 显示模块,用于调取所述一组或多组分表的数据,并显示。6.如权利要求5所示的装置,其特征在于,所述建立索引模块包括: 取数单元,用于遍历分表二维数组,取每一一维数组; 创建HashMap单元,用于创建HashMap,将每一查询参数值作为HashMap的Key,将所述一维数组中每一查询参数值对应的数据作为HashMap的Value,得到索引表。7.如权利要求5所示的装置,其特征在于,所述HashMap的Value为一二维数组,第一行数据为同一查询参数值对应的数据在每一分表中的行数,第二行数据为该分表在分表二维数组中的下标值。8.如权利要求7所述的装置,其特征在于,所述定位模块包括: 计算单元,用于根据所述待查询页的序号和行数,计算所述待查询页的数据所在分表在所述索引表的位置; 获取单元,用于根据所述待查询页的数据所在分表在所述索引表的位置,获取索引表中待查询页的数据所在分表的下标值和所述数据在该分表内的行数。
【专利摘要】本发明适用于数据查询技术领域,提供了一种分表分页排序查询方法及装置,所述方法包括如下步骤:通过预设的查询参数和分表规则计算得到分表二维数组;所述分表二维数组的一维数组为同一查询参数值对应的多个分表;根据预设的数据结构和所述查询参数为所述分表二级数组建立本次查询的查询结果集的索引表;所述数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数;当需要调取所述索引表内待查询页的数据时,根据所述索引表定位该待查询页的数据所在的一组或多组分表;调取所述一组或多组分表的数据,并显示。
【IPC分类】G06F17/30
【公开号】CN105653611
【申请号】
【发明人】梁文
【申请人】深圳市汇朗科技有限公司
【公开日】2016年6月8日
【申请日】2015年12月24日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1