一种分布式数据库多列复合查询的系统及方法技术方案

技术编号:9765921 阅读:137 留言:0更新日期:2014-03-15 11:43
本申请公开一种分布式数据库多列复合查询的系统及方法,由存储子系统、索引子系统、线性序列生成器、入库模块、查询模块组成。在数据入库建立索引时,为每一条数据记录生成一个单调递增序列值,将索引字段的值和单调递增序列值组合作为索引表的行键;索引扫描时,返回结果按行键顺序排序,执行效率较高,且占用系统资源较少;并且,索引键值的查询、索引结果的合并、查找存储子系统可以并发执行,大大提高了查询响应的速度。

【技术实现步骤摘要】

本申请属于信息
,尤其涉及。
技术介绍
当前很多行业,每天都在产生大量的数据,随着技术和业务的发展,数据产生的速度不断加快,数据量不断膨胀。对于这种海量数据集,要进行存储并从中快速的查找需要的数据,传统的数据库已经不太适合,于是诞生了各种分布式数据库。在大规模的数据管理中,影响数据查询速度的关键因素在于需要访问的数据量和磁盘10。索引技术是数据库实践中提高查询性能的重要方法。目前常见的分布式数据库系统中,针对多列查询,即查询条件中包括多个索引键值的查询,通常有如下几种处理方式:1.依据各个索引键值分别做索引查询,得到一系列结果集,然后根据各个索引键值之间的逻辑关系,对各结果集取交集或取并集,最终得到一个没有重复的结果集。合并时需要依次查找每个结果集中的每条结果是否存在于其他结果集之中,为提高合并效率,通常又有两种具体实现方式:a)对各结果集进行排序,对排序后的结果集再做合并;b)将各结果集的值存入HASH容器中,提高查找速度。2.从多个索引键值中,选取一个选择性比较高的做索引查询,得到一个结果集,扫描此结果集内的全部数据,使用查询条件中其他未做索引查询的索引键值对这些数据做过滤,得到最终的查询结果集。比如下面的查询:select氺from user_info where username = iCC9 and sex = ‘male’,单独根据username查找得到的结果数比较少,即username列的选择性比较高,于是只根据username = ‘CC’这一条件做查找,遍历其结果集,将其中满足条件sex = ‘male’的结果返回给查询用户。然而,现有技术在多列查询时,存在效率低下、资源占用率较高等问题。在前述处理方式1(a)中,需要对各个结果集做排序,必须等各索引键值的查询全部结束,才能完成排序,排序完成后才能开始做合并和返回结果。采用这种方式时,如果有一个结果集的数据量很大,即使其余结果集的数据量都很小,也无法很快返回结果,其响应速度受制于最慢的一个子查询。在前述处理方式1(b)中,需要将各结果集存入HASH类容器,这样会占用较大的内存,当结果集数据量很大时,还会超过系统最大负荷。前述处理方式2,只适用于多个索引键值之间逻辑关系为与的情况,如果多个索引键值之间的逻辑关系为或,则不适用。其次,由于实际运行环境中的业务和数据复杂多变,准确选取可选择性大的索引键值并不容易做到,有时甚至是无法做到,这样单对一个索引键值做查询会得到很多结果,将这些索引结果对应的数据全部从原始数据存储模块中读出来做过滤,会造成大量的磁盘10,而过大的数据访问量和磁盘IO正是海量数据库的常见性能瓶颈所在。
技术实现思路
本专利申请要解决的技术问题是:提供一种在分布式数据库多列复合查询的优化方法,解决当前分布式数据库系统针对多列查询效率低下、资源占用率较高等问题。为了解决上述技术问题,本专利申请提供了。本申请所述系统由存储子系统、索引子系统、线性序列生成器、入库模块、查询模块组成,其中:存储子系统采用分布式文件系统,包括分区存储的多个数据块,用于存储完整的原始数据;索引子系统采用分布式列存储数据库,用于存储数据的索引;线性序列生成器在数据入库前为每一条数据记录生成一个单调递增的序列值;入库模块负责将原始数据写入存储子系统,并在索引子系统中建立对应的索引;查询模块又分为查询解析模块、索引查询模块、原始数据扫描模块等儿个子模块,查询模块负责处理用户的查询请求,返回查询结果。在数据入库建立索引时,为每一条数据记录生成一个单调递增序列值,将索引字段的值和单调递增序列值组合作为索引表的行键。索引扫描时,返回结果按行键顺序排序。这样,在根据某一个指定的索引键值做查询时,得到的结果是按其序列值排序的。因而,对多个索引键值的查询结果做合并,是对多个有序队列做归并,其执行效率较高且资源占用率较低,有助于提高系统的查询响应速度和可支持的并发数。数据查询时,查询模块中的查询解析模块将查询语句分解为多个查询子条件,每个查询子条件为一个索引键值,由此索引键值可以得到一系列包含该索引键值的数据记录,以及这些数据记录的存储位置,组成一个结果集。查询模块将这些结果集合并成一个。合并操作时,可以用记录的单调递增序列值或者存储位置作为区分是否为不同记录的依据。根据合并得到的结果集,查找存储子系统,将得到的原始数据记录内容返回给查询客户端。本申请的有益后果是:1、由于每个子结果集都是按照统一的单调递增序列排序的,所以本专利申请所述的分布式数据库多列复合查询的方法合并操作执行速度比较快;2、各索引键值的查询返回部分结果时,就可以开始对这些结果做合并,不必等各索引键值的查询结束再做合并;3、与此同时,根据合并的结果集查找存储子系统也不必等待合并全部完成,这样,索引键值的查询、索引结果的合并、查找存储子系统可以并发执行,大大提高了查询响应速度。4、由于进行列式存储,访问所需要的IO量局限在所需要的字段,极大地降低了 IO访问要求。经过测算和模拟,如此数据访问优化、流程优化和结果集计算预启动后,IO请求平均减少一半,能提高响应速度一倍以上;如果设立了返回数量上限,响应速度可以提高十倍多。【附图说明】附图1为系统架构图附图2为数据入库流程图附图3为实施例1的索引表示意图附图4为数据查询流程图【具体实施方式】本专利申请所述的一种分布式数据库多列复合查询的系统由索引子系统、线性序列生成器、入库模块、查询模块组成。其系统架构图如附图1所示。其中,查询模块包括查询解析模块,索引查询模块,原始数据扫描模块。数据入库流程如附图2所示,数据入库前,为每一条数据记录生成一个序列值。该序列值由线性序列生成器生成,是一个单调递增序列。较佳的,如果原始记录中已经存在这样一个字段,其值满足单调递增条件且都不为空,线性序列生成器可以直接使用该字段的值作为序列值。 数据入库时,首先将原始数据存入原始数据存储子系统,得到数据存储位置,再对该条数据记录建立索引。一张原始数据表里可以对多个字段分别建立索引。建立索引时,将原始数据中需要用做查询条件的字段作为索引字段,每一个索引字段在索引子系统中对应一张索引表。每条索引包括行键和行值两个部分,行键由索引字段的值和该数据记录的单调递增序列值两部分组成;行值为数据记录在存储子系统中的存储位置,所述数据存储位置包括数据记录所在数据块的位置以及数据记录在数据块内的偏移量,因此根据此存储位置可以直接定位到数据记录。索引扫描时,返回的结果是按行键排序的,因此以某一指定索引键值做查询时,得到的结果是按序列值排序的。实施例1:有一张用户交易记录表(ExchangeInfo),每一条用户交易信息中包括用户标识字段(UserName),商品类别字段(Category),交易价格字段(Price),此外为每条记录生成一个序列值(Sequence),交易记录表详细数据如下表所示:表1用户交易信息表 Sequence UserName Category Price 1W= Wl Too2We SsI iooo 3We200本文档来自技高网
...

【技术保护点】
一种分布式数据库多列复合查询的系统,其特征在于:由存储子系统、索引子系统、线性序列生成器、入库模块、查询模块组成。

【技术特征摘要】
1.一种分布式数据库多列复合查询的系统,其特征在于:由存储子系统、索引子系统、线性序列生成器、入库模块、查询模块组成。2.如权利要求1所述的一种分布式数据库多列复合查询的系统,其特征在于:存储子系统采用分布式文件系统,索引子系统采用分布式列存储数据库,查询模块包括查询解析模块、索引查询模块和原始数据扫描模块。3.一种分布式数据库多列复合查询的方法,其特征在于:在数据入库建立索引时,为每一条数据记录生成一个单调递增序列值,将索引字段的值和单调递增序列值组合作为索引表的行键;索引扫描时,返回结果按行键顺序排序。4.如权利要求3所述的一种分布式数据库多列复合查询的方法,其特征在于:如果原始记录中已经存在一个字段的值满足单调递增条件且都不为空,则可以直接使用该字段的值做为序列值。5.如权利要求3所述的一种分布式数据库多列复合查询的方法,其...

【专利技术属性】
技术研发人员:孙杰阎星娥赵万亮杨昆
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:

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

1