CN110704433A - 列式存储数据的brin索引构建方法、数据检索方法及装置 - Google Patents

列式存储数据的brin索引构建方法、数据检索方法及装置 Download PDF

Info

Publication number
CN110704433A
CN110704433A CN201910899678.0A CN201910899678A CN110704433A CN 110704433 A CN110704433 A CN 110704433A CN 201910899678 A CN201910899678 A CN 201910899678A CN 110704433 A CN110704433 A CN 110704433A
Authority
CN
China
Prior art keywords
data
block
index
information
blocks
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.)
Granted
Application number
CN201910899678.0A
Other languages
English (en)
Other versions
CN110704433B (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.)
BEIJING UXSINO SOFTWARE Co Ltd
Original Assignee
BEIJING UXSINO SOFTWARE Co 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 BEIJING UXSINO SOFTWARE Co Ltd filed Critical BEIJING UXSINO SOFTWARE Co Ltd
Priority to CN201910899678.0A priority Critical patent/CN110704433B/zh
Publication of CN110704433A publication Critical patent/CN110704433A/zh
Application granted granted Critical
Publication of CN110704433B publication Critical patent/CN110704433B/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/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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供一种列式存储数据的brin索引构建方法、数据检索方法及装置,该brin索引构建方法包括:按照存储顺序扫描列存表中列的数据,根据预先设定的块大小依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;若块数未达到预设数量,则更新已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;若达到预设数量或列中所有的数据已全部扫描,则根据第一最值信息、块信息及表内位置信息构建索引数据。本发明实施例通过设置块的大小,并根据预设数量的块构建索引数据,并在索引数据中包括块的最值信息,实现了有助于列式存储数据的高效检索的索引数据的构建,有利于提高检索效率。

Description

列式存储数据的brin索引构建方法、数据检索方法及装置
技术领域
本发明涉及数据库技术领域,具体涉及一种列式存储数据的brin索引构建方法、数据检索方法及装置。
背景技术
Brin(block range index,块范围索引)是一种粗粒度索引技术。相对于btree、bitmap、hash等索引针对单个数据行进行索引,粗粒度索引是针对多个数据块的,所以称为粗粒度索引。
数据的存储分为行式存储和列式存储两种。由于行存的brin索引设计中和计算机内存页面存储管理类似,一个页面大小固定,一个页面中存储了固定的块数,每个块中根据表结构中一个元组的大小(固定的)存储的元组数也是固定的,因此只需数据一个range中的blkno(块号),根据blkno就能快速按照顺序找到该块内的所有数据。
但是列存的存储是表按照列进行分段存储的,当一个元组(表中一行数据)中某个列是空时,实际是不占内存,只是记录标记位的,且列存中的blockDirecty(数据块目录)表中的block(块)是按照创建表时参数blocksize的大小进行将每列划分的,当一个列属性的类型占的内存比较大时,一个block中占的记录数就少,当列属性占的内存小时,一个block中占的记录就比较多,这样一个表中每列的块数是不一样的,当按照条件查询出符合条件的列时,在对符合条件的块进行扫描时,需要获取每个块中的数据量,然后才能进行扫描,因此,使得检索结果的获取比较耗时,无法实现高效索引。
发明内容
为解决现有技术中的问题,本发明实施例提供一种列式存储数据的brin索引构建方法、数据检索方法及装置。
第一方面,本发明实施例提供一种列式存储数据的brin索引构建方法,包括:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
进一步地,所述统计已扫描尚未建立索引的数据所构成的块的数量,具体包括:设置初始块号为1;并重复下述过程:根据扫描顺序,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到所述预设个数,则块号加1,并将计数信息清零;所述判断所述已扫描尚未建立索引的数据中的块数是否达到所述预设数量,具体包括:获取当前块号,并判断所述当前块号是否达到所述预设数量;若所述当前块号达到所述预设数量,则进一步判断所述当前块号对应的块中的数据量是否达到所述预设个数,若是,则表示所述已扫描尚未建立索引的数据中的块数已达到所述预设数量;若否,则表示所述已扫描尚未建立索引的数据中的块数未达到所述预设数量。
进一步地,所述预设数量及所述预设个数为128。
第二方面,本发明实施例提供一种基于所述列式存储数据的brin索引构建方法的数据检索方法,包括:根据预设的查询条件在各个所述索引数据中进行检索;若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
进一步地,所述基于所述表内位置信息,获取所述目标块中的数据在表中的存储位置信息,具体包括:根据所述目标块的块号及所述预设个数,计算所述目标块相对于所述目标索引数据对应的所述第一条数据的偏移量;根据所述偏移量及所述预设个数,获取所述目标块中的数据在表中的所述存储位置信息。
进一步地,所述根据所述存储位置信息扫描所述目标块中的数据,具体包括:将所述存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描所述存储位置信息中的记录。
第三方面,本发明实施例提供一种列式存储数据的brin索引构建装置,包括:统计计数模块,用于:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;判断模块,用于:判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;更新模块,用于:若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;索引构建模块,用于:若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
第四方面,本发明实施例提供一种基于所述列式存储数据的brin索引构建装置的数据检索装置,包括:索引数据查询模块,用于:根据预设的查询条件在各个所述索引数据中进行检索;目标块位置获取模块,用于:若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;检索结果获取模块,用于:基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
第五方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或第二方面所提供的方法的步骤。
第六方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面或第二方面所提供的方法的步骤。
本发明实施例提供的列式存储数据的brin索引构建方法、数据检索方法及装置,通过设置块的大小,并根据预设数量的块构建索引数据,以及在索引数据中包括块的最值信息,实现了有助于列式存储数据的高效检索的索引数据的构建,有利于提高检索效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的列式存储数据的索引构建方法流程图;
图2是本发明另一实施例提供的列式存储数据的brin索引构建方法流程图;
图3是本发明实施例提供的数据检索方法的流程图;
图4是本发明另一实施例提供的数据检索方法流程图;
图5是本发明实施例提供的列式存储数据的brin索引构建装置的结构示意图;
图6是本发明实施例提供的数据检索装置的结构示意图;
图7是本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的列式存储数据的索引构建方法流程图。如图1所示,所述方法包括:
步骤101、以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;
列式存储数据的索引构建装置可以在接收到客户端创建索引的sql命令后,利用后台服务进程顺序扫描待创建索引的列存表中的数据,列存表是按照列进行顺序存储的表,扫描时按照列存表中数据的存储顺序进行扫描。
由于不同列的数据可能具有不同的数据属性,因此,为方便后续统计最值信息,需要针对单列的数据进行扫描及处理。各列之间可以根据进程数顺次进行处理或并行处理。
对于每个列,按照存储顺序扫描列存表中的数据,并对已扫描尚未建立索引的数据进行计数,根据预设的块的大小,即每个所述块包含预设个数的数据依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量。其中,顺序编号的规则可以预先设定,可以从任一起始编号开始,编号可以依次递增或递减。
步骤102、判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;
步骤103、若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;
若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息。所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值。所述块信息包括已扫描尚未建立索引的数据中各个块的块号及各块的最大值和最小值(第二最值信息)。所述第一条数据和最后一条数据的表内位置信息即所述已扫描尚未建立索引的数据中第一条数据和最后一条数据的表内位置信息,所述表内位置信息包括段文件号和行号。所述列存表按列进行分段存储,在列式存储数据(列存表)中,基于段文件号和行号可以获取到实际数据。
步骤104、若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据;
若达到所述预设数量,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据,则相应的数据成为已扫描且已建立索引的数据。
若按照存储顺序扫描到列尾,虽然未达到所述预设数量,由于相应列中的数据已全部扫描完成,则也根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据,相应的数据也成为已扫描且已建立索引的数据。
根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。实际检索时是根据数据区间范围在各个索引数据中进行检索,这样索引数据中需要记录其构建索引的数据中的最值信息,以进行检索。由于在列存表中,基于段文件号和行号可以获取到实际数据,且基于任意两个数据的段文件号和行号,可以得知这两个数据之间的数据的段文件号和行号,也就可以获取这两个数据之间的所有数据。因此,索引数据中需要包括相应数据中的第一条数据和最后一条数据的表内位置信息,即包括相应数据中的第一条数据和最后一条数据的段文件号和行号,从而可以获取第一条数据至最后一条数据中所有数据的位置信息,从而可以进行扫描,实现检索结果的获取。
虽然可以从所述目标索引数据对应的实际数据的第一条数据至最后一条数据进行扫描,实现检索结果的获取。但是这样检索工作量巨大,非常耗时。因此,为节约检索时间,通常是分块检索。因此,所述索引数据中还需要包括所述块信息,所述块信息包括块号及各个块的最大值和最小值的信息。块号应按预设规则排列。这样,在实际检索时若发现某个索引数据满足查询条件,则进一步从索引数据中查找满足查询条件的块,进而在满足查询条件的块中进行检索,这样可以极大提高检索效率。
由于本发明实施例中块是按照预设个数进行分配的,因此,查找到符合要求的块,只需按照所述预设个数进行扫描即可,无需再获取满足要求的块中数据的个数,因此极大地提高了数据检索效率。若所述块对应的数据位于列的末尾,在建立索引数据时数据量未达到所述预设个数,则也只需按照所述预设个数进行扫描,直至扫描至列尾即可。
因此,本发明实施例可以实现按照一个大的数据范围,即根据所述预设数量的块(所述数据范围,可以用range表示)所建立的索引数据进行检索,实现了粗粒度的块范围检索(brin,block range index,块范围)检索,有利于提高检索效率。并且,通过设置所述块包含预设个数的数据,可以在检索时根据预设个数扫描块中数据,进一步提高了检索效率。
本发明实施例通过设置块的大小,并根据预设数量的块构建索引数据,以及在索引数据中包括块的最值信息,实现了有助于列式存储数据的高效检索的索引数据的构建,有利于提高检索效率。
进一步地,基于上述实施例,所述统计已扫描尚未建立索引的数据所构成的块的数量,具体包括:设置初始块号为1;并重复下述过程:根据扫描顺序,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到所述预设个数,则块号加1,并将计数信息清零;所述判断所述已扫描尚未建立索引的数据中的块数是否达到所述预设数量,具体包括:获取当前块号,并判断所述当前块号是否达到所述预设数量;若所述当前块号达到所述预设数量,则进一步判断所述当前块号对应的块中的数据量是否达到所述预设个数,若是,则表示所述已扫描尚未建立索引的数据中的块数已达到所述预设数量;若否,则表示所述已扫描尚未建立索引的数据中的块数未达到所述预设数量。
所述统计所述已扫描尚未建立索引的数据所构成的块的数量,具体包括:设置初始块号为1;并重复下述过程:根据扫描顺序,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到所述预设个数,则块号加1,并将计数信息清零。所述预设个数和所述预设数量可以预先设定,比如均可以设置为128;也可设置为其他数值,二者的数值不要求完全相同。以所述预设个数和所述预设数量为128为例,设置初始块号为1,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到128个,则块号加1变为2,并根据扫描过程重新计数,再次计数达到128个时,块号由2便为3,以此类推。
在判断所述已扫描尚未建立索引的数据中的块数是否达到所述预设数量(以128为例)时,获取当前块号,并判断所述当前块号是否达到128;若所述当前块号达到128,则进一步判断当前块是否已满,即所述当前块号对应的块中的数据量是否达到128个,若是,则表示所述已扫描尚未建立索引的数据中的块数已达到所述预设数量;若否,则表示所述已扫描尚未建立索引的数据中的块数未达到所述预设数量。
在上述实施例的基础上,本发明实施例通过设置初始块号为1开始计数,便利了块是否满以及块数是否达到预设数量的判定,有利于进一步提高检索效率。
图2是本发明另一实施例提供的列式存储数据的brin索引构建方法流程图。如图2所示,所述方法包括:
顺序扫描列存表记录,根据数据返回情况判断记录是否存在,若存在,则获取列存的块号;获取列存块号时,判断当前块是否已经满了,若满了,则块号加1,并且将当前块的计数等信息进行重置。没满时,返回当前块号。
判断是否达到预设块数(一个range是否满了),若未满,则更新最值信息和列存表brin索引的ctid(包括第一个数据及最后一个数据的段文件号segmentFileNo和行号rowNo),并继续扫描;若满了或记录扫描完成,则根据所述最值信息和ctid信息生成索引数据。将brin索引记录插入到文件中,并将最新记录的ctid记录到新的range中的firstrowid(第一个数据的ctid)中。未满时,更新列存表当前range的lastrowid(最后一个数据的ctid)及其最值信息。
图3是本发明实施例提供的数据检索方法的流程图。如图3所示,所述方法包括:
步骤301、根据预设的查询条件在各个所述索引数据中进行检索;
根据预设的查询条件在各个所述索引数据中进行检索,所述查询条件包括需要获取的数据范围。
步骤302、若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;
在有多个索引数据时(通常为多个),根据构建索引数据时数据的不同,不同索引数据与不同的数据区间相对应。通过比较第一最值信息与所述数据范围,是否存在与所述查询条件匹配的目标索引数据。若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,即获取所述第一条数据和所述最后一条数据的段文件号和行号;并查询所述第二最值信息满足所述查询条件的目标块,记录所述目标块的块号。
步骤303、基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果;
由于块是顺序编号的,且一个索引数据对应预设数量的块,因此,基于所述索引数据对应的实际数据中第一个数据或最后一个数据的表内位置信息和所述块号,可以获取所述目标块中的数据在表中的存储位置信息。根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
不满足所述查询条件的索引数据对应的数据则不进行扫描。满足所述查询条件的目标索引数据中不满足所述查询条件的块也不进行扫描。
可以理解的,若扫描所述目标索引数据对应的全部数据,即所述第一条数据至所述最后一条数据,也可实现检索结果的获取,不过查询速度较慢。
本发明实施例通过匹配查询条件获取满足查询条件的目标索引数据中的目标块,进而在目标块中进行扫描查询,提高了数据检索的效率。
进一步地,基于上述实施例,所述基于所述表内位置信息,获取所述目标块中的数据在表中的存储位置信息,具体包括:根据所述目标块的块号及所述预设个数,计算所述目标块相对于所述目标索引数据对应的所述第一条数据的偏移量;根据所述偏移量及所述预设个数,获取所述目标块中的数据在表中的所述存储位置信息。
块号是顺序编号的,编号规则预先设定。则根据所述目标块的块号及每个块的大小(所述预设个数),可以获取目标块相对于所述目标索引数据对应的所述第一条数据的偏移量。根据所述偏移量可以获取所述目标块中第一个数据的存储位置信息,根据所述预设个数及所述目标块中第一个数据的存储位置信息,可以获取所述目标块中的所有数据在表中的存储位置信息。
当然,还可以利用索引数据对应的最后一条数据来计算目标块中的数据在表中的所述存储位置信息。
在上述实施例的基础上,本发明实施例通过根据索引数据对应的第一条数据来计算目标块中的数据在表中的存储位置信息,提高了目标块中数据的存储位置信息的获取速度,进一步提高了数据检索效率。
进一步地,基于上述实施例,所述根据所述存储位置信息扫描所述目标块中的数据,具体包括:将所述存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描所述存储位置信息中的记录。
在获取到目标块中数据的存储位置信息后,将所述存储位置信息记录在元组标识位图(tidbitmap)中,并利用函数BitmapAppendOnlyNext逐条扫描相应存储位置中的记录。
在上述实施例的基础上,本发明实施例通过将存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描存储位置信息中的记录,进一步提高了数据检索效率。
图4是本发明另一实施例提供的数据检索方法流程图。如图4所示,所述方法包括:
获取列存表的总块数,其中,列存表的总块数为各个段文件中包含的块数之和;其中,每个段文件中包含的块数为段文件中总的记录数除以预设数量,若有余数,则再加1。
判断brin索引表中的记录是否符合查询条件;若存在符合查询条件的记录,则获取brin索引表中相应的brin索引记录对应的首尾数据(第一条数据和最后一条数据)在列存表的ctid,根据ctid计算出所述brin索引记录中满足查询条件的块中数据的存储位置并记录到tidbitmap中,逐条扫描该块中的记录,将符合查询条件的检索结果返回。
列存在brin表的存储形式上和行存是一样的,如表1所示,一个brin索引元组(brin索引数据)包含了128个块,记录了这么多块中最值的信息。
表1
0 ... 127
128 ... 255
256 ... 383
图5是本发明实施例提供的列式存储数据的brin索引构建装置的结构示意图。如图5所示,所述装置包括统计计数模块1、判断模块2、更新模块3及索引构建模块4,其中:统计计数模块1用于:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;判断模块2用于:判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;更新模块3用于:若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;索引构建模块4用于:若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
本发明实施例通过设置块的大小,并根据预设数量的块构建索引数据,以及在索引数据中包括块的最值信息,实现了有助于列式存储数据的高效检索的索引数据的构建,有利于提高检索效率。
进一步地,基于上述实施例,统计计数模块1在用于统计已扫描尚未建立索引的数据所构成的块的数量时,具体用于:设置初始块号为1;并重复下述过程:根据扫描顺序,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到所述预设个数,则块号加1,并将计数信息清零;判断模块2具体用于:获取当前块号,并判断所述当前块号是否达到所述预设数量;若所述当前块号达到所述预设数量,则进一步判断所述当前块号对应的块中的数据量是否达到所述预设个数,若是,则表示所述已扫描尚未建立索引的数据中的块数已达到所述预设数量;若否,则表示所述已扫描尚未建立索引的数据中的块数未达到所述预设数量。
在上述实施例的基础上,本发明实施例通过设置初始块号为1开始计数,便利了块是否满以及块数是否达到预设数量的判定,有利于进一步提高检索效率。
图6是本发明实施例提供的数据检索装置的结构示意图。如图6所示,所述装置包括索引数据查询模块10、目标块位置获取模块20、检索结果获取模块30,其中:索引数据查询模块10用于:根据预设的查询条件在各个所述索引数据中进行检索;目标块位置获取模块20用于:若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;检索结果获取模块30用于:基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
本发明实施例通过匹配查询条件获取满足查询条件的目标索引数据中的目标块,进而在目标块中进行扫描查询,提高了数据检索的效率。
进一步地,基于上述实施例,检索结果获取模块30在用于基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息时,具体用于:根据所述目标块的块号及所述预设个数,计算所述目标块相对于所述目标索引数据对应的所述第一条数据的偏移量;根据所述偏移量及所述预设个数,获取所述目标块中的数据在表中的所述存储位置信息。
在上述实施例的基础上,本发明实施例通过根据索引数据对应的第一条数据来计算目标块中的数据在表中的存储位置信息,提高了目标块中数据的存储位置信息的获取速度,进一步提高了数据检索效率。
进一步地,基于上述实施例,检索结果获取模块30在用于根据所述存储位置信息扫描所述目标块中的数据时,具体用于:将所述存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描所述存储位置信息中的记录。
在上述实施例的基础上,本发明实施例通过将存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描存储位置信息中的记录,进一步提高了数据检索效率。
本发明实施例提供的装置是用于上述方法的,具体功能可参照上述方法流程,此处不再赘述。
图7是本发明实施例提供的电子设备的实体结构示意图。如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行如下方法:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种列式存储数据的brin索引构建方法,其特征在于,包括:
以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;
判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;
若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;
若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
2.根据权利要求1所述的列式存储数据的brin索引构建方法,其特征在于,所述统计已扫描尚未建立索引的数据所构成的块的数量,具体包括:设置初始块号为1;并重复下述过程:根据扫描顺序,对已扫描尚未建立索引的数据进行计数,若当前块中的数据已达到所述预设个数,则块号加1,并将计数信息清零;
所述判断所述已扫描尚未建立索引的数据中的块数是否达到所述预设数量,具体包括:获取当前块号,并判断所述当前块号是否达到所述预设数量;若所述当前块号达到所述预设数量,则进一步判断所述当前块号对应的块中的数据量是否达到所述预设个数,若是,则表示所述已扫描尚未建立索引的数据中的块数已达到所述预设数量;若否,则表示所述已扫描尚未建立索引的数据中的块数未达到所述预设数量。
3.根据权利要求1或2所述的列式存储数据的brin索引构建方法,其特征在于,所述预设数量及所述预设个数为128。
4.一种基于权利要求1~3任一所述列式存储数据的brin索引构建方法的数据检索方法,其特征在于,包括:
根据预设的查询条件在各个所述索引数据中进行检索;
若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;
基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
5.根据权利要求4所述的数据检索方法,其特征在于,所述基于所述表内位置信息,获取所述目标块中的数据在表中的存储位置信息,具体包括:
根据所述目标块的块号及所述预设个数,计算所述目标块相对于所述目标索引数据对应的所述第一条数据的偏移量;
根据所述偏移量及所述预设个数,获取所述目标块中的数据在表中的所述存储位置信息。
6.根据权利要求4所述的数据检索方法,其特征在于,所述根据所述存储位置信息扫描所述目标块中的数据,具体包括:
将所述存储位置信息记录在元组标识位图中,并利用函数BitmapAppendOnlyNext逐条扫描所述存储位置信息中的记录。
7.一种列式存储数据的brin索引构建装置,其特征在于,包括:
统计计数模块,用于:以列为单位,按照存储顺序扫描列存表中的数据,根据块中数据的预设个数依次生成块且顺序编号,并统计已扫描尚未建立索引的数据所构成的块的数量;
判断模块,用于:判断所述已扫描尚未建立索引的数据中的块数是否达到预设数量;
更新模块,用于:若未达到所述预设数量,则更新所述已扫描尚未建立索引的数据中的第一最值信息、块信息及第一条数据和最后一条数据的表内位置信息;所述第一最值信息为所述已扫描尚未建立索引的数据的最大值和最小值;所述块信息包括块号和第二最值信息,所述第二最值信息为所述已扫描尚未建立索引的数据中所述块的最大值和最小值;所述表内位置信息包括段文件号和行号;
索引构建模块,用于:若达到所述预设数量或列中所有的数据已全部扫描,则根据所述第一最值信息、所述块信息及所述表内位置信息构建索引数据。
8.一种基于权利要求7所述列式存储数据的brin索引构建装置的数据检索装置,其特征在于,包括:
索引数据查询模块,用于:根据预设的查询条件在各个所述索引数据中进行检索;
目标块位置获取模块,用于:若存在所述第一最值信息与所述查询条件匹配的目标索引数据,则获取所述目标索引数据中的所述第一条数据和所述最后一条数据的所述表内位置信息,并获取所述目标索引数据中所述第二最值信息满足所述查询条件的目标块的块号;
检索结果获取模块,用于:基于所述表内位置信息和所述块号,获取所述目标块中的数据在表中的存储位置信息,并根据所述存储位置信息扫描所述目标块中的数据,获取满足所述查询条件的检索结果。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述列式存储数据的索引构建方法和/或如权利要求4至6任一项所述数据检索方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至3任一项所述列式存储数据的索引构建方法和/或如权利要求4至6任一项所述数据检索方法的步骤。
CN201910899678.0A 2019-09-23 2019-09-23 列式存储数据的brin索引构建方法、数据检索方法及装置 Active CN110704433B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910899678.0A CN110704433B (zh) 2019-09-23 2019-09-23 列式存储数据的brin索引构建方法、数据检索方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910899678.0A CN110704433B (zh) 2019-09-23 2019-09-23 列式存储数据的brin索引构建方法、数据检索方法及装置

Publications (2)

Publication Number Publication Date
CN110704433A true CN110704433A (zh) 2020-01-17
CN110704433B CN110704433B (zh) 2023-03-28

Family

ID=69195012

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910899678.0A Active CN110704433B (zh) 2019-09-23 2019-09-23 列式存储数据的brin索引构建方法、数据检索方法及装置

Country Status (1)

Country Link
CN (1) CN110704433B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113704240A (zh) * 2021-09-23 2021-11-26 世纪龙信息网络有限责任公司 一种数据去重的方法
CN117743388A (zh) * 2023-12-26 2024-03-22 广州海量数据库技术有限公司 一种基于smp的索引并行扫描方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4553206A (en) * 1983-10-03 1985-11-12 Wang Laboratories, Inc. Image storage and retrieval
CN103020305A (zh) * 2012-12-29 2013-04-03 天津南大通用数据技术有限公司 一种针对二维数据表的高效索引及创建和查询方法
CN104408151A (zh) * 2014-12-03 2015-03-11 天津南大通用数据技术股份有限公司 支持用户自定义的列存数据库函数索引创建方法及装置
CN107577436A (zh) * 2017-09-18 2018-01-12 杭州时趣信息技术有限公司 一种数据存储方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4553206A (en) * 1983-10-03 1985-11-12 Wang Laboratories, Inc. Image storage and retrieval
CN103020305A (zh) * 2012-12-29 2013-04-03 天津南大通用数据技术有限公司 一种针对二维数据表的高效索引及创建和查询方法
CN104408151A (zh) * 2014-12-03 2015-03-11 天津南大通用数据技术股份有限公司 支持用户自定义的列存数据库函数索引创建方法及装置
CN107577436A (zh) * 2017-09-18 2018-01-12 杭州时趣信息技术有限公司 一种数据存储方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
匿名: "PgSQL • 社区动态 9.5 新功能BRIN索引", 《博客园URL》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113704240A (zh) * 2021-09-23 2021-11-26 世纪龙信息网络有限责任公司 一种数据去重的方法
CN117743388A (zh) * 2023-12-26 2024-03-22 广州海量数据库技术有限公司 一种基于smp的索引并行扫描方法和系统

Also Published As

Publication number Publication date
CN110704433B (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
CN111046034B (zh) 管理内存数据及在内存中维护数据的方法和系统
WO2018036549A1 (zh) 分布式数据库查询方法、装置及管理系统
EP3117347A2 (en) Systems and methods for rapid data analysis
CN110704433B (zh) 列式存储数据的brin索引构建方法、数据检索方法及装置
CN112328842B (zh) 一种数据处理方法、装置、电子设备及存储介质
US20150169669A1 (en) Method and a Consistency Checker for Finding Data Inconsistencies in a Data Repository
CN110543495A (zh) 游标遍历存储方法及装置
CN110825742B (zh) 一种数据分页检索的方法、装置、电子设备及存储介质
CN110162540B (zh) 区块链账本数据的查询方法、电子装置及存储介质
CN107562762B (zh) 数据索引构建方法及装置
CN110083731B (zh) 图像检索方法、装置、计算机设备及存储介质
CN108549688B (zh) 一种数据操作的优化方法、装置、设备和存储介质
CN103559272A (zh) 向维度表里导入数据的方法和装置
CN113297266B (zh) 数据处理方法、装置、设备及计算机存储介质
CN111125158B (zh) 数据表处理方法、装置、介质及电子设备
CN106776702B (zh) 一种处理主从式数据库系统中的索引的方法和装置
CN113010539A (zh) 一种数据处理方法及装置
CN108376054B (zh) 一种对标识数据进行索引的处理方法及装置
CN106446080B (zh) 数据查询的方法、查询服务设备、客户端设备和数据系统
CN114969036A (zh) 数据检索方法及装置
CN114564501A (zh) 一种数据库数据存储、查询方法、装置、设备及介质
CN115328917A (zh) 一种查询方法、装置、设备及存储介质
CN113297204B (zh) 索引生成方法及装置
CN112506953A (zh) 基于结构化查询语言sql的查询方法、装置及存储介质
CN113742344A (zh) 电力系统数据的索引方法及装置

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