CN106815260B - 一种索引建立方法及设备 - Google Patents

一种索引建立方法及设备 Download PDF

Info

Publication number
CN106815260B
CN106815260B CN201510868254.XA CN201510868254A CN106815260B CN 106815260 B CN106815260 B CN 106815260B CN 201510868254 A CN201510868254 A CN 201510868254A CN 106815260 B CN106815260 B CN 106815260B
Authority
CN
China
Prior art keywords
index
column
determining
type
time threshold
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510868254.XA
Other languages
English (en)
Other versions
CN106815260A (zh
Inventor
郑博文
潘岳
魏闯先
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510868254.XA priority Critical patent/CN106815260B/zh
Priority to PCT/CN2016/106581 priority patent/WO2017092583A1/zh
Priority to JP2018524442A priority patent/JP6898320B2/ja
Priority to EP16869893.4A priority patent/EP3385864B1/en
Publication of CN106815260A publication Critical patent/CN106815260A/zh
Priority to US15/996,237 priority patent/US11003649B2/en
Application granted granted Critical
Publication of CN106815260B publication Critical patent/CN106815260B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/319Inverted lists

Abstract

本发明公开了一种索引建立方法,首先根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为该列建立索引,并在确定需要为建立索引时根据该列的数据信息确定索引类型,以及按照索引类型为该列建立索引。从而实现了数据库各列的动态索引建立,并且能够根据实际情况选择合适的索引类型,在减少资源消耗以及人力投入的前提下有效提高数据检索效率。

Description

一种索引建立方法及设备
技术领域
本发明涉及通信技术领域,特别涉及一种索引建立方法,本申请同时还涉及一种索引建立设备。
背景技术
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引提供指向存储在表的指定列中的数据值的指针,然后根据用户指定的排序顺序对这些指针排序。当需要在数据库中使用索引时,首先搜索索引以找到特定值,然后顺指针找到包含该值的行。
随着互联网技术的不断发展,人们每天通过互联网的活动将产生海量的数据,在将这些海量的数据进行存储之后,如何从中快速检索需要的数据成为了技术人员首要考虑的问题。传统数据库的索引都是需要用户自己指定索引类型,然而同一种索引类型在面对不同的数据类型时的查询时间也是不一样的,所以当索引类型设置不当的情况下,用户在数据库的查询时间将会变得十分漫长,从而给用户带来的不良的使用体验。
在实现本申请的过程中,发明人发现现有技术存在着以下缺陷:
(1)现有索引类型单一,导致某些场景查询性能差。
传统数据的索引类型较为单一、以B-Tree(B树)索引为主,并不是所有数据特征都适合B-Tree索引,比如Key-Value(键-值)模式查找速度很慢。在带有Join(联接)的SQL(Structured Query Language,结构化查询语言)中,一条SQL会进行多次查找。如果采用B-Tree查找的话严重影响join SQL的性能。
(2)通过人工分析日志优化索引,导致可运维性差。
传统数据库在大量数据的场景下,索引带来的维护开销是很大,因此需要每天晚上看下用户访问的日志来决定哪些列增加新索引、哪些列不需要索引、以及哪些列联合起来建组合索引。这种利用历史统计(HBO)自动调整索引类型完全是人工的,使得可运维性很差。
由此可见,如何结合数据库的使用情况为其中各列建立合适的索引,以提高数据检索效率以及减少运维资源,成为本领域技术人员亟待解决的技术问题。
发明内容
本发明提供了一种索引建立方法。用以对索引建立流程进行优化,在提高数据检索效率的同时减少人力的消耗,该方法包括以下步骤:
根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引;
若确定需要为所述列建立索引,根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引。
优选地,还包括:
若确定无需为所述列建立索引,在所述时间阈值后根据所述列在所述时间阈值内的索引使用状况信息确定是否需要为所述列建立索引。
优选地,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引,具体为:
获取所述列在所述时间阈值内的所述索引状态信息;
根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值;
若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;
若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
优选地,所述索引类型至少包括B-Tree索引、Hash索引、Bitmap索引,根据所述列的数据信息确定索引类型,具体为:
若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引;
若所述列会发生Join,确定所述索引类型为所述Hash索引;
若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引;
若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引。
优选地,还包括:
当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式;
在缓存中查询是否存在与各所述子表达式对应的检索结果;
若存在与所述子表达式对应的检索结果,根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应;
若不存在与所述子表达式对应的检索结果,利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后,将检索结果存储与所述缓存。
优选地,在根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引之前,还包括:
当所述数据库初始化完成后,按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引。
相应地,本申请还提出了一种索引建立设备,包括:
确定模块,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引;
建立模块,在所述确定模块确定需要为所述列建立索引时根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引。
优选地,所述建立模块,还在所述确定模块确定无需为所述列建立索引时,在所述时间阈值后根据所述列在所述时间阈值内的索引使用状况信息确定是否需要为所述列建立索引。
优选地,所述确定模块具体用于:
获取所述列在所述时间阈值内的所述索引状态信息;
根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值;
若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;
若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
优选地,所述索引类型至少包括B-Tree索引、Hash索引、Bitmap索引,所述建立模块根据所述列的数据信息确定索引类型,具体为:
若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引;
若所述列会发生Join,确定所述索引类型为所述Hash索引;
若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引;
若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引。
优选地,还包括:
拆分模块,当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式;
查询模块,在缓存中查询是否存在与各所述子表达式对应的检索结果;
处理模块,在存在与所述子表达式对应的检索结果时根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应,以及在不存在与所述子表达式对应的检索结果时利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后将检索结果存储与所述缓存。
优选地,还包括:
初始化模块,当所述数据库初始化完成后,按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引。
由此可见,通过应用本申请的技术方案,首先根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为该列建立索引,并在确定需要为其建立索引时根据该列的数据信息确定索引类型,以及按照索引类型为该列建立索引。从而实现了数据库各列的动态索引建立,并且能够根据实际情况选择合适的索引类型,在减少资源消耗以及人力投入的前提下有效提高数据检索效率。
附图说明
图1为本申请提出的一种索引建立方法的流程示意图;
图2为本申请具体实施例中的一种数据结构示意图;
图3为本申请具体实施例提出的一种流式结果归并流程示意图;
图4为本申请具体实施例提出的一种索引结构示意图;
图5为本申请具体实施例提出的一种索引建立流程示意图;
图6为本申请提出的一种索引建立设备的结构示意图。
具体实施方式
有鉴于背景技术中的问题,本申请提出了一种索引建立方法。通过针对数据库中各个列的索引使用情况及时判断是否需要为其建立索引,以及在建立索引时结合该列的数据信息选择合适的索引类型。从而在节省硬件资源以及人力投入的前提下提高检索效率。
如图1所示,为本申请提出的一种索引建立方法的流程示意图,包括以下步骤:
S101,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引。
若确定需要为所述列建立索引,执行步骤S102;
若确定不需要为所述列建立索引,则返回步骤S101,继续在下一个预设的时间阈值所对应的时间区间内,确定是否需要为所述列建立索引。
在面对海量数据的情况下,针对数据库中的每一列都建立与其对应的索引是耗时耗力且不必要的,因为不是所有的列都会时常被用户检索或查询。因此本申请针对数据库中的每个列都引入了索引状态信息,并基于一段时间内的索引状态信息确定是否需要为该列建立索引。同时为了保证各个列的索引状态信息能够及时地根据用户的检索方式以及习惯进行调整,本申请每个时间阈值后针对各个列的索引状态信息进行更新以及判断,例如该时间阈值内该列是否使用过索引,以及使用索引是否达到一定的次数。在具体的应用场景中,该时间阈值具体为一个预设的时间区间值,表征统计相应的列的索引使用情况的统计时间范围,可根据数据库的容量以及使用用户的数量进行调整,一般情况下可设置为一天,在此基础上技术人员可以将其延长或是缩短,这些都属于本申请的保护范围。
在本申请的优选实施例中,针对该步骤提出了具体的判断方式,包括如下步骤:
步骤a)获取所述列在所述时间阈值内的所述索引状态信息。
步骤b)根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值。
基于上述判断步骤,若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
需要说明的是,尽管以上实施例以特定的步骤以及判断依据实现了是否需要为列建立索引的判断,然而本领域技术人员可以在此基础上采用其他类型的依据进行判断,这些改进都属于本申请的保护范围。
另外,当数据库初始化完毕时,此时数据库中的列都是没有建立索引的,此时本申请将按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引,在该过程中所统一建立的索引可以由技术人员预先设置。
S102,根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引。
在通过S101确定该列需要建立索引后,即可根据该列的数据信息确定索引类型,从而能够基于不同的情况为用户提供个性化的检索服务,大大地减少所有用户在查询当前数据库过程中所平均花费的时间。
相反地,如步骤S101中的说明,在确定无需为所述列建立索引的情况下,本申请的技术方案也将在当前的时间阈值所对应的时间区间结束后,重新根据所述列在下一个时间阈值所对应的时间区间内的索引使用状况信息确定是否需要为所述列建立索引,即重新执行步骤S101,从而能够根据实际情况灵活进行调整。
由于目前使用较多的索引类型包括倒排(Invert)索引、B-Tree索引、Hash索引、Bitmap索引,因此在本申请的优选实施例中,具体通过以下条件确定索引类型,:
(1)若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引。
(2)若所述列会发生Join,确定所述索引类型为所述Hash索引。
需要说明的是,Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join包括:内联接、外联接和交叉联接等。如果需要在两个或以上的表中,获取一个表中的行与另一个表中的行相匹配的数据,则需要考虑使用Join操作,因为Join具有联接表或函数进行查询的特性。
(3)若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引。
其中,所述列的词数具体为该列所包含的变量值的数量。
(4)若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引。
在本申请的具体实施例中,如果某一列数据是数值类型并且是连续型(例如金额),那么这种数值类型的字段一般只需要进行范围查询,而如图2所示的数据结构图,B-Tree这种数据结构中间节点天生具备范围属性,所以在面对连续型数值类型的列时,B-Tree索引的范围查找效率远高于倒排索引和位图索引。
此外,假设整个索引片中有n条记录,字段A有x个不同的term值,"delta+vint"原始压缩算法的压缩比为p,那么通过“x*n/32<n*4*p”的变换等式“x<128*p”以及“"delta+vint"压缩算法的最大压缩比为1/4”可以得到如下结果:
当p=1/4时,代入“x<128*p”可以得到x<128*1/4=32。
基于上述结果可以看出,只要词数小于32使用位图索引就比倒排索引节省空间,因此在上述优选实施例中词数阈值可具体设置为32。但同样需要指出的是,该词数阈值可以在后续基于其他的算法进行修改,这并不影响本申请的保护范围。
此外,现有技术中在执行完一次用户的查询之后,并不会保存与之相关的任何结果信息,而通常情况下用户的查询表达式一般都是由多个不同的子表达式所组成的,因此在传统数据库没有原子表达式缓存的情况下,有相同表达式的不同SQL无法复用子表达式的查询结果,从而导致了没有原子表达式缓存导致OLAP(Online Analytical Processing,联机分析处理)任意维度布尔运算性能差。为此本申请优选实施例提出了一种解决方案,在当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式,并在缓存中查询是否存在与各所述子表达式对应的检索结果,基于以下情况处理:
(1)若存在与所述子表达式对应的检索结果,根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应;
(2)若不存在与所述子表达式对应的检索结果,利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后,将检索结果存储于所述缓存。
以图3所示的流式结果归并流程示意图为例,查询索引解压出来的倒排链在内存是以bitmap(位图)结构存放的。这套流式归并框架就是在不产生任何中间对象的前提下将各个表达式之间的布尔运算一条一条归并出来。整个流式归并过程包括以下4部分:
(1)QueryBuilder(队列创建组件)根据where表达式生成EngineQuery(队列引擎)对象树。
(2)根据EngineQuery对象树构造RowidElector(列标识选举)选举树。
(3)从不同索引拿到RowidSet(列标识集合)挂在叶子节点上,中间节点是逻辑运算合并器。
(4)从根节点一条一条选举,并收集Rowid(列标识)。
该具体实施例是基于不同的SQL语句可能有相同的where子表达式的情况,因此通过将原子表达式进行缓存来加快索引的查询性能。
通过应用以上技术方案,基于列级别独立的索引结构,根据成本和代价自动选择最合适的索引类型,并利用历史统计(HBO)自动调整索引类型,同时进程原子表达式的缓存,从而在节省存储成本的同时加快了索引的查询性能。
为了进一步阐述本发明的技术思想,现结合图4所示的索引结构图对本发明的技术方案进行说明。该具体实施例基于倒排索引、位图索引、Hash索引、B-Tree索引等索引的原理、特性,自主实现了图4所示的列级别的索引架构,可同时支持4中索引类型。索引类型对用户透明,不需要用户外部指定,而是根据数据特征自动选择索引类型。同时多种索引类型采用同一套数据结构做布尔运算,对于引擎层可以不用感知where子表达式的结果从什么索引查出来的。另外,索引可根据历史统计信息自动优化,无需人工参与。
具体地,该索引结构图主要包含以下3部分:
(1)流式结果归并器(Streamed Merger):负责统一不同索引查询结果和计算层之间的交互。不同的索引查询出来的结果均以bitmap进行存储,然后根据where表达式的布尔运算生成流式归并树,再通过归并器逐条输出满足where条件的行号。
(2)索引管理器(Index Manager):负责管理索引,选择类型及自动优化索引流程。
(3)子表达式缓存(BitmapCache):负责缓存where子表达式,这样不同SQL有相同子表达式不再需要查询索引,可以直接在cache(缓存)中进行查询。
基于上述说明,在图5所示的索引建立流程示意图中,首先针对数据库中的每一列建立索引,并且每天都会重新建立索引并获取历史SQL统计数据,并基于该历史数据针对该列在当天是否使用索引以及使用索引的次数是否超过阈值进行判断。在确定需要为该列建立索引后,根据该列的数据的类型选择不同的索引类型。从而不仅能够支持不同列字段采用不同索引类型(同时支持倒排索引、B-Tree索引、Bitmap索引和Hash索引),而且索引类型的选择可以做到对用户无感知,大大节省存储成本以及提高查询速度。
为达到以上技术目的,本申请还提出了一种索引建立设备,如图6所示,包括:
确定模块610,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引;
建立模块620,在所述确定模块确定需要为所述列建立索引时根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引。
在具体的应用场景中,所述建立模块,还在所述确定模块确定无需为所述列建立索引时,在所述时间阈值后根据所述列在所述时间阈值内的索引使用状况信息确定是否需要为所述列建立索引。
在具体的应用场景中,所述确定模块具体用于:
获取所述列在所述时间阈值内的所述索引状态信息;
根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值;
若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;
若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
在具体的应用场景中,所述索引类型至少包括B-Tree索引、Hash索引、Bitmap索引,所述建立模块根据所述列的数据信息确定索引类型,具体为:
若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引;
若所述列会发生Join,确定所述索引类型为所述Hash索引;
若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引;
若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引。
在具体的应用场景中,还包括:
拆分模块,当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式;
查询模块,在缓存中查询是否存在与各所述子表达式对应的检索结果;
处理模块,在存在与所述子表达式对应的检索结果时根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应,以及在不存在与所述子表达式对应的检索结果时利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后将检索结果存储与所述缓存。
在具体的应用场景中,还包括:
初始化模块,当所述数据库初始化完成后,按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引。
通过应用本申请的技术方案,首先根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为该列建立索引,并在确定需要为建立索引时根据该列的数据信息确定索引类型,以及按照索引类型为该列建立索引。从而实现了数据库各列的动态索引建立,并且能够根据实际情况选择合适的索引类型,在减少资源消耗以及人力投入的前提下有效提高数据检索效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

Claims (10)

1.一种索引建立方法,其特征在于,该方法包括:
根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引;
若确定需要为所述列建立索引,根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引;
其中,所述索引类型至少包括B树B-Tree索引、哈希Hash索引、位图Bitmap索引,根据所述列的数据信息确定索引类型,具体为:
若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引;
若所述列会发生联接Join,确定所述索引类型为所述Hash索引;
若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引;
若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引;
其中,所述列的词数具体为所述列所包含的变量值的数量。
2.如权利要求1所述的方法,其特征在于,还包括:
若确定无需为所述列建立索引,在所述时间阈值后根据所述列在所述时间阈值内的索引使用状况信息确定是否需要为所述列建立索引。
3.如权利要求2所述的方法,其特征在于,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引,具体为:
获取所述列在所述时间阈值内的所述索引状态信息;
根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值;
若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;
若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
4.如权利要求1所述的方法,其特征在于,还包括:
当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式;
在缓存中查询是否存在与各所述子表达式对应的检索结果;
若存在与所述子表达式对应的检索结果,根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应;
若不存在与所述子表达式对应的检索结果,利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后,将检索结果存储与所述缓存。
5.如权利要求1所述的方法,其特征在于,在根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引之前,还包括:
当所述数据库初始化完成后,按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引。
6.一种索引建立设备,其特征在于,包括:
确定模块,根据数据库中的列在预设的时间阈值内的索引状态信息确定是否需要为所述列建立索引;
建立模块,在所述确定模块确定需要为所述列建立索引时根据所述列的数据信息确定索引类型,并按照所述索引类型为所述列建立索引;
其中,所述索引类型至少包括B-Tree索引、Hash索引、Bitmap索引,所述建立模块根据所述列的数据信息确定索引类型,具体为:
若所述列为连续型数值类型,确定所述索引类型为所述B-Tree索引;
若所述列会发生Join,确定所述索引类型为所述Hash索引;
若所述列的词数大于预设的词数阈值,确定所述索引类型为倒排索引;
若所述列词数不大于预设的词数阈值,且不会发生Join以及非连续型数值类型,确定所述索引类型为所述位图索引;
其中,所述列的词数具体为所述列所包含的变量值的数量。
7.如权利要求6所述的设备,其特征在于,
所述建立模块,还在所述确定模块确定无需为所述列建立索引时,在所述时间阈值后根据所述列在所述时间阈值内的索引使用状况信息确定是否需要为所述列建立索引。
8.如权利要求7所述的设备,其特征在于,所述确定模块具体用于:
获取所述列在所述时间阈值内的所述索引状态信息;
根据所述索引状态信息判断所述列在所述时间阈值内是否使用索引,并在判断结果为是时判断所述列在所述时间阈值内使用索引的次数是否不小于预设的次数阈值;
若所述列在所述时间阈值内未使用索引或所述列在在所述时间阈值内使用索引的次数小于所述次数阈值,确认无需为所述列建立索引;
若所述列在在所述时间阈值内使用索引的次数不小于所述次数阈值,确定需要为所述列建立索引。
9.如权利要求7所述的设备,其特征在于,还包括:
拆分模块,当接收到用户发送的检索表达式时,将所述检索表达式拆分为多个子表达式;
查询模块,在缓存中查询是否存在与各所述子表达式对应的检索结果;
处理模块,在存在与所述子表达式对应的检索结果时根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应,以及在不存在与所述子表达式对应的检索结果时利用所述列的索引对所述子表达式进行检索,并在根据所述检索结果以及其他子表达式的检索结果生成用于向所述用户返回的检索响应之后将检索结果存储与所述缓存。
10.如权利要求7所述的设备,其特征在于,还包括:
初始化模块,当所述数据库初始化完成后,按照默认的索引类型为所述数据库中的各个列构建索引,并在达到预设的时刻重新为各所述列构建索引。
CN201510868254.XA 2015-12-01 2015-12-01 一种索引建立方法及设备 Active CN106815260B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201510868254.XA CN106815260B (zh) 2015-12-01 2015-12-01 一种索引建立方法及设备
PCT/CN2016/106581 WO2017092583A1 (zh) 2015-12-01 2016-11-21 一种索引建立方法及设备
JP2018524442A JP6898320B2 (ja) 2015-12-01 2016-11-21 インデックス確立の方法およびデバイス
EP16869893.4A EP3385864B1 (en) 2015-12-01 2016-11-21 Method and device for establishing index
US15/996,237 US11003649B2 (en) 2015-12-01 2018-06-01 Index establishment method and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510868254.XA CN106815260B (zh) 2015-12-01 2015-12-01 一种索引建立方法及设备

Publications (2)

Publication Number Publication Date
CN106815260A CN106815260A (zh) 2017-06-09
CN106815260B true CN106815260B (zh) 2021-05-04

Family

ID=58796259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510868254.XA Active CN106815260B (zh) 2015-12-01 2015-12-01 一种索引建立方法及设备

Country Status (5)

Country Link
US (1) US11003649B2 (zh)
EP (1) EP3385864B1 (zh)
JP (1) JP6898320B2 (zh)
CN (1) CN106815260B (zh)
WO (1) WO2017092583A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106815260B (zh) 2015-12-01 2021-05-04 阿里巴巴集团控股有限公司 一种索引建立方法及设备
US11023439B2 (en) * 2016-09-01 2021-06-01 Morphick, Inc. Variable cardinality index and data retrieval
CN110874358B (zh) * 2018-08-30 2023-05-05 阿里巴巴集团控股有限公司 多属性列的存储、检索方法和装置以及电子设备
US10545960B1 (en) * 2019-03-12 2020-01-28 The Governing Council Of The University Of Toronto System and method for set overlap searching of data lakes
CN111046130B (zh) * 2019-11-08 2023-05-23 杭州安恒信息技术股份有限公司 结合ElasticSearch和FSM的关联检索方法
CN113535733A (zh) * 2021-07-26 2021-10-22 北京锐安科技有限公司 数据存储、查询方法、装置、计算机设备及存储介质
CN117573680B (zh) * 2024-01-17 2024-04-12 深圳市进择科技有限公司 一种基于大数据的定位数据传输管理系统及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102467572A (zh) * 2010-11-17 2012-05-23 英业达股份有限公司 支持重复数据删除程序的数据区块查询方法
CN102779180A (zh) * 2012-06-29 2012-11-14 华为技术有限公司 数据存储系统的操作处理方法,数据存储系统
CN104112011A (zh) * 2014-07-16 2014-10-22 深圳市国泰安信息技术有限公司 一种海量数据提取的方法及装置

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63201716A (ja) 1987-02-17 1988-08-19 Nec Corp インデツクス保守方式
US5404510A (en) 1992-05-21 1995-04-04 Oracle Corporation Database index design based upon request importance and the reuse and modification of similar existing indexes
JPH0785093A (ja) 1993-09-16 1995-03-31 Nissan Motor Co Ltd インデックス自動設定方法
US5907837A (en) * 1995-07-17 1999-05-25 Microsoft Corporation Information retrieval system in an on-line network including separate content and layout of published titles
US7640244B1 (en) * 2004-06-07 2009-12-29 Teredata Us, Inc. Dynamic partition enhanced joining using a value-count index
US7392266B2 (en) * 2005-03-17 2008-06-24 International Business Machines Corporation Apparatus and method for monitoring usage of components in a database index
JP2007122405A (ja) 2005-10-28 2007-05-17 Hitachi Ltd データベース管理システムの性能チューニングシステム
JP5162215B2 (ja) 2007-11-22 2013-03-13 株式会社エヌ・ティ・ティ・データ データ処理装置、データ処理方法、および、プログラム
JP4237813B2 (ja) 2008-05-26 2009-03-11 株式会社東芝 構造化文書管理システム
US8489565B2 (en) * 2009-03-24 2013-07-16 Microsoft Corporation Dynamic integrated database index management
CN101609460B (zh) * 2009-07-22 2011-12-14 中国科学院地理科学与资源研究所 一种支持异构地学数据资源的检索方法及检索系统
US8655867B2 (en) * 2010-05-13 2014-02-18 Salesforce.Com, Inc. Method and system for optimizing queries in a multi-tenant database environment
US8412701B2 (en) * 2010-09-27 2013-04-02 Computer Associates Think, Inc. Multi-dataset global index
US8396858B2 (en) * 2011-08-11 2013-03-12 International Business Machines Corporation Adding entries to an index based on use of the index
US8825664B2 (en) * 2012-08-17 2014-09-02 Splunk Inc. Indexing preview
CN103810212B (zh) * 2012-11-14 2017-05-24 阿里巴巴集团控股有限公司 一种数据库索引的自动创建方法及系统
US20140317093A1 (en) * 2013-04-22 2014-10-23 Salesforce.Com, Inc. Facilitating dynamic creation of multi-column index tables and management of customer queries in an on-demand services environment
US20150032720A1 (en) * 2013-07-23 2015-01-29 Yahoo! Inc. Optimizing database queries
CN103390066B (zh) * 2013-08-08 2016-02-17 上海新炬网络信息技术有限公司 一种数据库全局性自动化优化预警装置及其处理方法
CN104714984A (zh) 2013-12-17 2015-06-17 中国移动通信集团湖南有限公司 一种数据库优化的方法和装置
CN104182460B (zh) * 2014-07-18 2017-06-13 浙江大学 基于倒排索引的时间序列相似性查询方法
US9846746B2 (en) * 2014-11-20 2017-12-19 Facebook, Inc. Querying groups of users based on user attributes for social analytics
CN104834736A (zh) * 2015-05-19 2015-08-12 深圳证券信息有限公司 构建索引库的方法、装置及检索的方法、装置和系统
CN105045851A (zh) * 2015-07-07 2015-11-11 福建天晴数码有限公司 根据日志分析自动创建数据库索引的方法及系统
CN106815260B (zh) 2015-12-01 2021-05-04 阿里巴巴集团控股有限公司 一种索引建立方法及设备
US10601593B2 (en) * 2016-09-23 2020-03-24 Microsoft Technology Licensing, Llc Type-based database confidentiality using trusted computing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102467572A (zh) * 2010-11-17 2012-05-23 英业达股份有限公司 支持重复数据删除程序的数据区块查询方法
CN102779180A (zh) * 2012-06-29 2012-11-14 华为技术有限公司 数据存储系统的操作处理方法,数据存储系统
CN104112011A (zh) * 2014-07-16 2014-10-22 深圳市国泰安信息技术有限公司 一种海量数据提取的方法及装置

Also Published As

Publication number Publication date
EP3385864A1 (en) 2018-10-10
US11003649B2 (en) 2021-05-11
JP6898320B2 (ja) 2021-07-07
CN106815260A (zh) 2017-06-09
WO2017092583A1 (zh) 2017-06-08
JP2019502980A (ja) 2019-01-31
US20180276264A1 (en) 2018-09-27
EP3385864B1 (en) 2024-01-03
EP3385864A4 (en) 2018-10-10

Similar Documents

Publication Publication Date Title
CN106815260B (zh) 一种索引建立方法及设备
US9298774B2 (en) Changing the compression level of query plans
EP3014488B1 (en) Incremental maintenance of range-partitioned statistics for query optimization
EP2924594A1 (en) Data encoding and corresponding data structure in a column-store database
US7895171B2 (en) Compressibility estimation of non-unique indexes in a database management system
CN107291770B (zh) 一种分布式系统中海量数据的查询方法及装置
US20150356162A1 (en) Method and system for implementing analytic function based on mapreduce
US20160224579A1 (en) Workload aware data placement for join-based query processing in a cluster
CN109299101B (zh) 数据检索方法、装置、服务器和存储介质
CN115687304A (zh) 一种Flink状态存储优化方法及装置
CN111026709A (zh) 基于集群访问的数据处理方法及装置
CN112182031B (zh) 数据查询方法及装置、存储介质、电子装置
CN113297266B (zh) 数据处理方法、装置、设备及计算机存储介质
KR101955376B1 (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
Suganya et al. Efficient fragmentation and allocation in distributed databases
US20220215021A1 (en) Data Query Method and Apparatus, Computing Device, and Storage Medium
CN107291875B (zh) 一种基于元数据图的元数据组织管理方法和系统
CN115525603A (zh) 存储统计方法、装置、计算机可读存储介质与ai设备
CN115827663A (zh) 一种物化视图的方法以及相关设备
Jia et al. Research on real time data warehouse architecture
CN115203214B (zh) 一种报表数据的更新方法和系统
CN113032400B (zh) 海量数据的高性能TopN查询方法、系统及介质
CN115858699B (zh) 数据仓库的构建方法、装置、电子设备和可读存储介质
CN113986707B (zh) 一种基于大数据kudu分区监控和监控慢SQL的方法
CN109766254B (zh) It系统运维监控数据辅助预处理方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant