本发明属于软件算法,特别涉及一种hbase多条件过滤查询方法,
背景技术:
1、随着互联网的迅速发展,为了应对海量数据存储与检索问题涌现出了一大批非关系型数据库。非关系型数据库不同于传统关系型数据库,其设计之初就考虑了分布式、海量存储、高可用性。非关系型数据库主要分为五大类,document stores(文件存储数据库)、graph dbms(图数据库)、search engines(搜索引擎)、wide column stores(宽列存储数据库)、time series dbms(时间序列数据库),每一类数据库都直接解决当前某种类型数据的存储和检索问题。hbase属于宽列存储数据库,这种类型的数据库是专门为了处理大量数据而设计的,它们通过列族来组织数据,使得对大数据集的读写操作变得更加高效。hbase作为hadoop(一种大数据存储与计算框架)生态圈的核心组件,以良好的写性能,极佳的可扩展性,稳定的数据存储,是海量结构化数据的理想存储介质,在非关系数据库阵营中扮演着重要角色。在国内外众多公司的核心存储架构中发挥着关键性作用。
2、hbase基于hdfs(一种分布式文件存储系统),可以安全的、分布式的存储数据,其通过lsm-tree(日志结构合并树,log structured merge tree)的方式组织数据文件,相比于b-tree与b+tree(多路搜索树)的方式组织的数据文件可以显著提高数据入库效率。
3、但是hbase在检索方面存在一些劣势。lsm-tree结构中的indexblock(数据索引块)存储rowkey(每行记录行键)索引信息,所以在hbase中使用rowkey作为检索条件查询效率非常高,耗时通常为几毫秒至几十毫秒。但是这种仅仅基于rowkey作为检索hbase数据库的方式非常单一,不能完全满足各类查询要求。在对数据库非主键列进行精准匹配检索时只能通过filter(hbase提供的条件查询组件,需扫描全表)过滤的方式来获取满足条件的记录,如表中存储有上亿级别的数据,条件查询过程中很容易出现超时异常,远不能满足实时查询的要求。
4、对于hbase检索方面的劣势,现有的解决办法是对非rowkey列建立二级索引表,将这些行的属性作为rowkey,主表中的rowkey作为列值。在进行非主键的列作为过滤属性的查询时,在对应的表中通过row-filter(行键过滤器)进行过滤,然后将得到的值在主表中进行查询。但是在应对多条件复杂查询时,这种方式的效率并不高。目前比较流行的复杂查询的解决方案是hbase+phoenix。phoenix是一种建立在hbase之上的查询引擎,是apache软件基金协会下的顶级项目,支持jdbc(java数据库连接)和sql(结构化查询语言)语句,非常适合关系型数据库使用人员的技术迁移。在执行数据规模极大的多条件查询时,phoenix预先从二级索引表中获取数据,然后通过java工具对这些数据进行集合运算,效率较低。在进行大规模的数据分析时,往往需要执行多条件、数据规模极大的查询,
5、此场景下,phoenix的效率不能令人满意。
技术实现思路
1、本发明的目的在于克服现有技术的不足,提供一种利用大数据工具以及mapreduce编程框架,可以并行地执行多个过滤条件的查询以及处理这些条件之间的关系,可以有效提高具有多个过滤条件的查询速度的hbase多条件过滤查询方法。
2、本发明的目的是通过以下技术方案来实现的:一种hbase多条件过滤查询方法,包括以下步骤:
3、s1、根据hbase主表中数据的查询过滤属性,将非rowkey的属性单独作为条目,保存到hbase中新的表中,作为二级索引表,在二级索引表中,属性条目的排序为字典序;
4、s2、对于要进行过滤查询的多个过滤属性,根据其先后顺序以及描述符and、or、not,通过公式计算每个条件的得分,并通过整体的过滤条件计算符合最终查询结果的对象需要的分数mn;
5、s3、对于要过滤的查询条件,除首个过滤条件外,其余以扁平式的and、or或not连接;然后对每个查询条件,生成相应的hbase过滤器,在二级索引表中获取符合该属性的对象在主表中的rowkey集合;
6、s4、通过spark的mapreduce框架,在map阶段将每个过滤条件对应的集合中的元素映射为该集合的分数,然后在reduce阶段将每个相同的rowkey的得分进行相加,进而得到每个rowkey的得分,得分不小于mn的rowkey所对应的对象便是符合过滤条件的查询对象。
7、所述步骤s2具体实现方法为:首先接受n个过滤条件,并且这些过滤条件,除第一个外,以and、or或者not进行描述,根据其次序以及描述符,计算每个条件的得分,以及满足从第一个过滤条件到每个条件处,所有条件均满足的最低得分和最高得分;
8、以ki表示满足第i个条件的对象的分数,mi表示满足第一个条件到第i个条件的最低得分,mi表示满足从第一个条件到第i个条件的最高得分;最终在n个过滤条件的查询中,得分不低于mn的元素为符合所有条件的元素;
9、mi、mi的计算方式如下:对k1、m1、m1赋值为1;若第i个条件的连接符为and,则ki=mi-1,mi=mi-1+ki,mi=mi-1+ki;若第i个条件的连接符为or,则ki=mi-1,mi=mi-1,mi=mi-1+ki;若第i个条件的连接符为not,则ki=int_min,mi=mi-1,mi=mi-1。
10、所述步骤s3中,对每个查询条件,生成相应的hbase过滤器,在二级索引表中获取符合该属性的对象在主表中的rowkey集合的具体实现方法为:通过spark的分布式hbase连接器,根据每个过滤条件,在二级索引表中查询到符合的主表rowkey集合,并将该集合中的元素保存在spark的内存中。
11、本发明的有益效果是:本发明的方法充分利用大数据工具以及mapreduce编程框架,可以并行地执行多个过滤条件的查询以及处理这些条件之间的关系,相比于phoenix查询引擎串行处理条件关系的方法,本发明可以有效提高具有多个过滤条件的查询速度。
1.一种hbase多条件过滤查询方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种hbase多条件过滤查询方法,其特征在于,所述步骤s2具体实现方法为:首先接受n个过滤条件,并且这些过滤条件,除第一个外,以and、or或者not进行描述,根据其次序以及描述符,计算每个条件的得分,以及满足从第一个过滤条件到每个条件处,所有条件均满足的最低得分和最高得分;
3.根据权利要求1所述的一种hbase多条件过滤查询方法,其特征在于,所述步骤s3中,对每个查询条件,生成相应的hbase过滤器,在二级索引表中获取符合该属性的对象在主表中的rowkey集合的具体实现方法为:通过spark的分布式hbase连接器,根据每个过滤条件,在二级索引表中查询到符合的主表rowkey集合,并将该集合中的元素保存在spark的内存中。
