基于KV存储的部分索引实现方法及系统技术方案

技术编号:33395732 阅读:12 留言:0更新日期:2022-05-11 23:15
本发明专利技术公开了一种基于KV存储的部分索引实现方法及系统,属于查询语句优化技术领域,本发明专利技术要解决的技术问题为如何提高数据库查询语句执行效率,降低在集群上创建和存储的成本,采用的技术方案为:该方法具体如下:生成部分索引:通过包含谓词表达式where的索引创建部分索引语句,即仅用于满足具有filter谓词的查询;数据修改和回填对部分索引中数据的操作:当数据进行增删改操作时,对部分索引同时进行数据的操作;选择部分索引与查找索引数据。据。据。

【技术实现步骤摘要】
基于KV存储的部分索引实现方法及系统


[0001]本专利技术涉及查询语句优化领域,具体地说是一种基于KV存储的部分索引实现方法及系统。

技术介绍

[0002]NewSQL技术近几年发展十分迅猛,国内外都有了较成熟的系统。在业界一些开源系统的实现中,Rocksdb起到了核心的存储和查询功能。Rocksdb是一个高性能的嵌入式持久化key

value存储。很多开源的数据库的存储都是内嵌的Rocksdb,以key

value的存储格式来存储数据。
[0003]而数据库的查询是数据库非常重要的功能之一,数据库进行一些查询时,有时需要频繁的对一个特定范围的数据进行读取,而若在只需要对这个范围的数据读取的情况下,却每一次都读取全部数据,数据库查询语句执行效率不高。
[0004]故如何提高数据库查询语句执行效率,降低在集群上创建和存储的成本是目前亟待解决的技术问题。

技术实现思路

[0005]本专利技术的技术任务是提供一种基于KV存储的部分索引实现方法及系统,来解决如何提高数据库查询语句执行效率,降低在集群上创建和存储的成本的问题。
[0006]本专利技术的技术任务是按以下方式实现的,一种基于KV存储的部分索引实现方法,该方法具体如下:
[0007]生成部分索引:通过包含谓词表达式where的索引创建部分索引语句,即仅用于满足具有filter谓词的查询;
[0008]数据修改和回填对部分索引中数据的操作:当数据进行增删改操作时,对部分索引同时进行数据的操作;
[0009]选择部分索引与查找索引数据。
[0010]作为优选,生成部分索引具体如下:
[0011]在索引的元数据IndexDescriptor中增加一个expr类型的关键字,存放部分索引的条件
[0012]判断索引是否为部分索引:依照该expr类型的关键字是否为空进行判断;
[0013]将通过filter筛选的数据存入索引创建的行值子集的排序副本中。
[0014]更优地,部分索引的谓词选择时,需满足如下要求:
[0015]①
、禅城一个布尔值;
[0016]②
、仅引用被索引的表中的列;
[0017]③
、谓词使用中的函数不可变,例如now()函数是不允许使用的。
[0018]更优地,验证谓词的有效性时,使用与验证checke表达式相同的逻辑,采用SanitizeVarFreeExpr去验证谓词表达式是否有效,再将expr表达式存入
indexdescriptor,即索引的元数据中等待对数据进行操作(增删改)或者回填数据时启用。
[0019]更优地,数据修改和回填对部分索引中数据的操作具体如下:
[0020]对数据进行的改动会对索引的布尔谓词表达式中评估为真的列和行创建行值子集的排序副本,而不修改表本身中的值;
[0021]通过在indexdescriptor存储的expr表达式解析出filter表达式;
[0022]在buildvalue构建值时,通过filterexpr查看行数据是否需要过滤,并将对应标志传入接下来的流程中;
[0023]在插入数据编码时,判断对应传入的标志是否需要将这一行数据编码插入到行值子集的排序副本(即二级索引)中去;
[0024]其余的增删改操作和回填操作与上述插入操作类似。
[0025]更优地,选择部分索引与查找索引数据具体如下:
[0026]在匹配投影列和索引列后,增加匹配谓词;
[0027]若谓词是匹配的,则增加子区间匹配;
[0028]若谓词匹配符合规则,则通过computeScanCost进行cbo的变动,并通过统计信息统计索引的行数,依靠行数减少使用代价;
[0029]由cbo选择索引;
[0030]完成对索引的选择,直接读取索引中的数据无需进行判断,若表的总数据量大,但where条件包含的数据量很少就可以很大程度上增加执行效率。
[0031]更优地,部分索引的索引语句具体如下:
[0032]CREATE opt_unique INDEX opt_index_name ON table_name opt_using_gin_btree'('index_params')'opt_storing opt_interleave opt_partition_by opt_idx_where opt_locate_in;
[0033]CREATE opt_unique INDEX IF NOT EXISTS index_name ON table_name opt_using_gin_btree'('index_params')'opt_storing opt_interleave opt_partition_by opt_idx_where opt_locate_in;
[0034]其中,opt_idx_where所代表的表达式即为部分索引的filter表达式;改变部分索引中的数据和使用部分索引时的语法和普通索引相同。
[0035]一种基于KV存储的部分索引系统,该系统包括,
[0036]生成模块,用于通过包含谓词表达式where的索引创建部分索引语句,即仅用于满足具有filter谓词的查询;
[0037]操作模块,用于当数据进行增删改操作时,对部分索引同时进行数据的操作;
[0038]选择及查找模块,用于选择部分索引与查找索引数据。
[0039]一种电子设备,包括:存储器和至少一个处理器;
[0040]其中,所述存储器上存储有计算机程序;
[0041]所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于KV存储的部分索引实现方法。
[0042]一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的基于KV存储的部分索引实现方法。
[0043]本专利技术的基于KV存储的部分索引实现方法及系统具有以下优点:
[0044](一)当部分索引的filter筛掉很多行,并且这个部分的数据查询会被频繁调用的情况下,当cbo选择走部分索引的时候,由于可以直接有序的拉取索引中的数据而不需要进行条件过滤器的判断,查询效果会大大提升;在一定程度上,过滤掉的行数越多,相较于普通索引,计算速度越快,当多次进行这个区间的数据的查询操作时,计算效果提升也会更加明显;
[0045](二)本专利技术包含的行比完整索引少,因此在群集上创建和存储它们的成本更低;
[0046](三)本专利技术对部分索引中包含的行的读取查询只扫描部分索引中的行,这与全索引中的列查询形成对比,后者必须扫描索引列中的所有行;
[0047](四)本专利技术对具有部分索引的表的写查询仅在插入的行满足部分索引谓词时执行索引写,这与对具有完整索引的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于KV存储的部分索引实现方法,其特征在于,该方法具体如下:生成部分索引:通过包含谓词表达式where的索引创建部分索引语句,即仅用于满足具有filter谓词的查询;数据修改和回填对部分索引中数据的操作:当数据进行增删改操作时,对部分索引同时进行数据的操作;选择部分索引与查找索引数据。2.根据权利要求1所述的基于KV存储的部分索引实现方法,其特征在于,生成部分索引具体如下:在索引的元数据IndexDescriptor中增加一个expr类型的关键字,存放部分索引的条件判断索引是否为部分索引:依照该expr类型的关键字是否为空进行判断;将通过filter筛选的数据存入索引创建的行值子集的排序副本中。3.根据权利要求1或2所述的基于KV存储的部分索引实现方法,其特征在于,部分索引的谓词选择时,需满足如下要求:

、禅城一个布尔值;

、仅引用被索引的表中的列;

、谓词使用中的函数不可变。4.根据权利要求3所述的基于KV存储的部分索引实现方法,其特征在于,验证谓词的有效性时,采用SanitizeVarFreeExpr去验证谓词表达式是否有效,再将expr表达式存入indexdescriptor,即索引的元数据中等待对数据进行操作或者回填数据时启用。5.根据权利要求4所述的基于KV存储的部分索引实现方法,其特征在于,数据修改和回填对部分索引中数据的操作具体如下:对数据进行的改动会对索引的布尔谓词表达式中评估为真的列和行创建行值子集的排序副本;通过在indexdescriptor存储的expr表达式解析出filter表达式;在buildvalue构建值时,通过filterexpr查看行数据是否需要过滤,并将对应标志传入接下来的流程中;在插入数据编码时,判断对应传入的标志是否需要将这一行数据编码插入到行值子集的排序副本中去。6.根据权利要求5所述的基于KV存储的部分索引实现方法,其特征在于,选择部分索引与查找索引数据具体如下:在匹配投影列和索引列后,增加匹配谓词;若谓...

【专利技术属性】
技术研发人员:牟冠学徐佳庆柴毅
申请(专利权)人:山东浪潮科学研究院有限公司
类型:发明
国别省市:

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

1