CN116257523A - 一种基于非易失存储器的列式存储索引方法及装置 - Google Patents
一种基于非易失存储器的列式存储索引方法及装置 Download PDFInfo
- Publication number
- CN116257523A CN116257523A CN202310096644.4A CN202310096644A CN116257523A CN 116257523 A CN116257523 A CN 116257523A CN 202310096644 A CN202310096644 A CN 202310096644A CN 116257523 A CN116257523 A CN 116257523A
- Authority
- CN
- China
- Prior art keywords
- data
- segment
- column
- delta
- file
- 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.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 90
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000003321 amplification Effects 0.000 description 11
- 238000003199 nucleic acid amplification method Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000005192 partition Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 239000008280 blood Substances 0.000 description 2
- 210000004369 blood Anatomy 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于非易失存储器的列式存储索引方法及装置,涉及计算机领域,本发明针对指标列实时更新,通过在NVM中建立缓存池,利用NVM的特点,通过两阶段批量更新,构建Main和Delta结构,Main包括多个Segment,每个Segment包含元数据信息和数据信息;Delta包括两个Delta文件,更新时进行交替;在内存中为Delta文件构建Bloom Filter进行更新数据的查询和判断。针对指标列在传统段合并时造成严重写放大的问题,本发明在创建索引时用元数据信息合并来替代传统的列存索引合并,从而在保证读写性能不下降的情况下,减少内存空间的占用以及读写放大。针对低基数维度列,对其创建倒排索引,大幅减少内存空间占用并提升等值查询性能。
Description
技术领域
本发明涉及计算机领域,具体涉及一种基于非易失存储器的列式存储索引方法及装置。
背景技术
随着互联网时代以及现代信息技术的高速发展,社交网络(微博、Facebook、Twitter)的逐渐成熟,移动网络、电商、各种智能工具、服务工具等将会产生比历史上任何时期都要多的数据,数据开始爆炸性增长,一个全新的时代---大数据时代已经到来。但大数据的战略意义并不仅在于掌握庞大的数据信息,在这个信息就是一切的时代,如何更快地掌握、查询到信息也成为了目前关注的重点。
数据的组织和存储形式是目前数据库关注的重点,传统的数据组织存储形式是利用行式存储,例如SQL Server、Oracal等,但目前的查询主要还是基于某些特定字段进行查询并基于某些特定字段进行输出,传统的存储方式查询性能仍不能满足要求,故列式存储应运而生,列式存储将属于同一字段的数据进行连续存储,列式存储只需要磁盘转动很少的次数就能命中数据,减少了磁盘I/O的开销。
SAP HANA是基于内存式分析数据库,其存储形式为列式。因为其将数据以及索引均放置在内存中,故可提供高性能的数据查询功能,用户可以直接对大量实时业务数据进行查询和分析,并在内存数据库里对列式存储进行压缩,从而使更多的数据装进内存。其作为内存数据库能够高效地提供数据插入、修改和删除功能。但当数据量过于庞大时,会造成内存容量受限,严重时会导致系统崩溃。故目前大多数的存储引擎均采用内存-硬盘的层级存储结构,以磁盘或硬盘为代表的块设备具有非易失以及存储容量大、价格较为低廉等优点,块设备顾名思义是按照块进行读写,无法进行字节寻址。块设备的随机读写和顺序读写都远远落后于内存,并且块设备中的随机读写和顺序读写性能差距大约于几十倍,这使得随机读写性能在块设备中是非常昂贵的性能开销。
目前大多数的列存引擎并不支持绝对的更新,更新主要分为异地更新(Out-PlaceUpdate)和原地更新(In-Place Update),原地更新操作是将数据的新值间接笼络旧值。例如MongoDB,原地更新尤其是大型文档的更新,某些工作负载的磁盘利用率可能会降低多达7倍,但是当面对大量的实时更新,会导致大量的随机I/O和读写放大,极大降低读写性能,并且多次更新和删除会严重导致磁盘页面碎片化问题,从而降低了空间利用率。并且原地更新会造成锁争用,从而影响读写效率。为了避免原地更新带来的锁争用问题,Lucene中Doc Values索引提供了RCU(Read-Copy-Update)思想,首先,找到需要更新的分区;然后,复制该分区的所有数据,最后,重建该分区,将需更新的数值写入新的分区,用新的分区替换旧的,当该方法在面对实时更新时,则会造成严重的写放大。
而异地更新主要是通过融合新老数据,然后批量导入列存,这就使得数据无法实时分析而需等待数小时甚至一天。例如Hadoop Database并不会定位到需要删除或更新的行进行操作,只能追加记录,通过记录插入新的数据时间戳或版本号。当读取的时候,判断时间戳或版本号就可以取出最新的数据了,将随机写转换为顺序写,但对于这样的更新机制,如果没有对过期数据处理的机制,会导致大量的过期数据。并且读取数据时,需要读取多个文件,并进行时间戳比较,在读性能和空间利用率上均不如原地更新,所以无法做到实时更新。
目前完整的列存索引包括元数据信息(Metadata)和数据信息(Data)等部分。列存索引在设计存储结构时,将元数据信息、数据信息等结构在磁盘(Disk)上以文件的形式保存。创建索引的过程中会多次地将列存索引保存到外存,一次保存的数据可以称为一个列存索引段(Segment),包括了完整的列存索引结构。通常在创建一个大规模的文档集时,会形成多个列存索引段。对于同一个列来说,其数据信息分布在多个段中,为避免这种情况,目前通用的做法是列存索引段合并,将所有的列存索引段重新加载到内存(Memory)中进行合并为更大的列存索引段。这一过程如图1所示。这种合并方法可以提升索引查询时的性能,但最后合并所有的列存索引段会耗费大量的时间,并且会对内存空间造成极大的压力。目前Doc Values等搜索引擎库在创建索引时会进行多轮的列存索引段合并,利用多线程的方法,在创建列存索引的过程中进行部分段合并,节省了创建列存索引的时间,但这会造成严重的血放大,并且在最后一轮段合并时仍会占据部分创建存索引时间。
排序是数据分析不可缺少的组成部分,对数据进行排序有助于快速直观地显示数据并更好地理解数据,有助于组织并查找所需数据,有助于最终做出更有效的决策。对于列式存储系统来说,传统的排序方法,例如Doc Values等相关存储引擎,则是利用外部排序,将大量的数据从磁盘读取到内存中进行排序以及对结果进行合并,需利用大量的数据加载时间并且对内存空间要求高,如果内存空间不足,则会造成频繁的I/O以及过多的CPU资源消耗,从而造成性能下降甚至出现系统崩溃。
列存根据每列的数据特点可以分为指标列和维度列,其中指标列为数值类型,适用于频繁更新,但无需构建排序索引的场景,而维度列一般为字符串类型,常常以该列做分组和排序操作,一般不会进行更新。但目前的存储引擎并没有按照每列的特性分别进行处理,这并不利于列式存储引擎的性能提升。
1、目前基于列式存储技术实现快速查询、更新、排序方案如下:
1)基于全内存数据库,在读写方面效率很高,但是其存储容量受到限制,对于高容量的内存价格都较为昂贵,故全内存数据库并不能被广泛应用。基于外存设备的列式存储数据库,这种设计能够满足庞大的数据量,当数据进行更新时,Doc Values索引则利用RCU思想进行更新,但在面对实时更新的场景下,频繁地更新会导致大量重复的数据写入,从而造成写放大。
2)Doc Values等搜索引擎框架在创建列存索引时是将列存信息按照Doc Number的顺序以索引段的结构保存在外存设备,创建过程中会形成多个索引段。在创建索引的过程中,会对已有的列存索引段进行段合并,形成更大的索引段,直到索引段的大小达到了设置的阈值,在段合并时会导致创建时间过长。多轮段合并利用创建列存索引时候用多线程的方式进行合并,虽然比单轮的段合并节约了时间,但也导致了同样的数据多次写入,造成了列存索引写放大。
3)Lucene等搜索引擎框架在进行等值排序查询时,往往需要将磁盘上所有的索引段加载到内存进行遍历排序查询,这对内存不足的场景非常不友好,造成了极大的压力,并且查询速度也非常慢。
2、非易失存储器无法直接提升列式组织的性能
Non Volatile Memory(NVM),一种新型的硬件存储介质,又被称为非易失存储器,具有类似内存的物理特性,如强大的读写性能(其随机读写性能可达到几GB/S)、耐磨损等,并且可以和磁盘一样数据掉电不丢失,被很多学者认为是存储设备的未来。目前已有商业化的NVM设备——Optane Memory,其既具有DRAM特性支持字节寻址;可以通过CPU指令直接进行操作;又具有磁盘特性非易失性,价格成本比DRAM低等优点。NVM这种介质,如果后续逐渐成熟,对整个数据库产品会有很大的意义,对一些IO存在瓶颈的应用来说,直接将其应用到NVM上可大大提升其性能。但是将NVM替换磁盘等块设备作为列存索引的存储设备,并不会加快列式存储的创建与查询。这一原因主要是目前的存储结构是针对磁盘等块设备而设计,并没有对NVM的物理特性进行优化。
发明内容
本发明的目的在于提出一种基于非易失存储器的列式存储索引方法及装置,通过利用NVM强大的随机访问性能以及支持字节寻址、非易失性、低成本等优势。重新设计列存结构,针对指标列实时更新的场景,通过利用两阶段批量更新,在创建索引时用元数据信息合并来替代传统的列存索引合并,从而在保证读写性能不下降的情况下,减少内存空间的占用以及读写放大。针对低基数维度列,对其创建倒排索引,从而使得在大幅减少内存空间占用的情况下,提升等值查询性能。
为实现上述目的,本发明采用以下技术方案:
一种基于非易失存储器的列式存储索引方法,包括以下步骤:
在非易失存储器NVM中建立缓存池NVMPOOL;
在NVMPOOL中构建Main结构和Delta结构;Main结构包括多个列存索引段Segment,每个Segment包含元数据信息和数据信息,数据信息保存在DVD文件的若干个数据段内,元数据信息记录各个数据段地址,并使各数据段逻辑连接,元数据信息保存在DVM文件;Delta结构包括两个Delta文件;
在内存中为Delta结构的两个Delta文件分别构建布隆过滤器Bloom Filter,通过Bloom Filter查询并判断指标列的数据是否有更新;
每次对指标列的数据进行更新时,在内存中对更新请求进行解析,判断更新请求所在的Segment,将更新数据写入Segment的Delta结构中的一个Delta文件中;当该Delta文件写满时,则切换到另一个Delta文件,同时通过加载DVM文件定位DVD文件中的相关列的数据信息,并将该数据信息加载到内存中,合并已写满的Delta文件以进行数据更新,再将更新后的数据写入NVM的DVD文件中,并释放该Delta文件对应的Bloom Filter;
数据在写入NVM的DVD文件时构建倒排索引,该倒排索引分包含词典和倒排链表,其中词典常驻在内存中,记录维度列去重并排序后的词项,每一个词项对应一个排序的倒排链表。
优选地,各个Segment用文档编号Doc Number划分。
优选地,在判断更新请求所在的Segment后,首先通过DVM文件计算更新请求的行偏移地址Row-offset以及在该Segment对应的Doc Number;将更新数据写入Segment的Delta结构中的一个Delta文件中后,标记该Delta文件对应的Bloom Filter中Doc Number的位置。
优选地,倒排链表记录该词项的所有Doc Number,并按照Doc Number排序。
优选地,Delta结构中的keys记录Row-offset。
优选地,数据段包括段标识、段编号、列存数据和段尾标识;其中,段标识用于记录版本号;段编号用于在整个NVMPOOL中区分数据段;列存数据根据字段的类型进行区分,若字段为整型数据,则利用固定字节进行记录;若字段为字符串类型数据,则在每一个域值之前设置数据长度;段尾标识用于判断数据段的结束。
优选地,同一字段的列存索引存放在所有的数据段中,将每一个Segment中存在相同的列名和类型作为key,对每一个Segment中同一个key的元数据信息进行合并,合并后每个NVMPOOL中仅有一个元数据信息。
优选地,DVM文件结构包括段标识、值Doc Values和段位标识,Doc Values包括列名称、列类型、列编号、段数和列索引,列索引包括位置信息和数据长度;其中,段标识用于记录段号和列数,段数用于表示合并的DVM的个数,合并后的列索引中的Doc Number数是将每一个合并的Segment的Doc Number进行累加;位置信息和数据长度用于记录相同key在每一个Segment的起始偏移量以及大小。
优选地,对多个词项进行同时查询时,只需依次找到对应词项的倒排链表,将每一数据段中该词项对应的倒排链表读到内存中。
一种基于非易失存储器的列式存储索引装置,包括:
非易失存储器NVM,采用列式存储数据,该NVM中建立有缓存池NVMPOOL;该NVMPOOL中存储Main结构和Delta结构;Main结构包括多个列存索引段Segment,每个Segment包含元数据信息和数据信息,数据信息保存在DVD文件的若干个数据段内,元数据信息记录各个数据段地址,并使各数据段逻辑连接,元数据信息保存在DVM文件;Delta结构包括两个Delta文件;
内存,该内存中为Delta结构的两个Delta文件分别构建有布隆过滤器BloomFilter,通过Bloom Filter查询并判断指标列的数据是否有更新;
其中,每次对指标列的数据进行更新时,在内存中对更新请求进行解析,判断更新请求所在的Segment,将更新数据写入Segment的Delta结构中的一个Delta文件中;当该Delta文件写满时,则切换到另一个Delta文件,同时通过加载DVM文件定位DVD文件中的相关列的数据信息,并将该数据信息加载到内存中来合并已写满的Delta文件以进行数据更新,再将更新后的数据写入NVM的DVD文件中,并释放该Delta文件对应的BloomFilter;数据在写入NVM的DVD文件时构建倒排索引,该倒排索引分包含词典和倒排链表,其中词典常驻在内存中,记录维度列去重并排序后的词项,每一个词项对应一个排序的倒排链表。
本发明的优点:
1)针对频繁更新的指标列,为了达到实时更新的目的,本发明通过在段内进行两阶段批量更新策略,在NVMPOOL中对更新请求再次进行缓存,并通过在内存中构建布隆过滤器来减少随机访问次数,从而保证查询性能。本发明在保证查询性能前提下,减少更新创建时间以及减少频繁更新带来的写放大,从而实现实时更新。
2)针对指标列,本发明针对段间重新设计了列式存储的元数据信息和数据结构,在创建索引时,利用NVM强大的随机读性能,用元数据信息合并代替完整的列存索引合并,数据段只进行逻辑合并。与现有的列存索引存储结构相比,本发明可以减少创建列存索引的时间,并且减少了创建列存索引多轮段合并过程中的写放大。这一发明会将同一列的数据信息分散的存储在NVMPOOL中,由于NVM强大的随机读写性能,从多个位置加载数据信息不会造成过大的性能损失。
3)针对低基数的维度列,为了实现等值查询,本发明利用倒排索引实现排序,在读取时只需遍历字典,读出该词项对应的倒排链表即可。在进行等值查询时,相比现有的排序索引结构,本发明会减少大量的内存空间占用以及提升等值查询性能。
附图说明
图1是Doc Values索引段合并示意图。
图2是NVMPOOL设计与数据段结构图。
图3是两阶段数据更新策略流程图。
图4是DVM元数据信息合并结构图。
图5是元数据信息合并流程图。
图6是倒排索引构建流程图。
图7是等值查询流程图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详细说明如下。
对于列式存储引擎,其指标列适用于频繁更新的场景,而维度列常常被用来进行分组和排序操作的场景。针对以上两种场景本发明利用NVM强大的随机读写性能与字节寻址等特性对传统的列式存储结构进行了改进。传统的列式存储引擎多为原地更新,并且为了避免锁争用,一般会采用RCU(读-复制-更新)思想,但这种更新策略会在频繁更新的场景下会造成严重的读写放大。本发明通过对段内采用两阶段批量更新以及布隆过滤器等思想,实现实时更新。传统的列存索引是利用不同的文件类型分别存储元数据信息、数据信息等列存信息,再将这些信息合并为列存索引段,从而造成了写放大,并且段合并也占据了很长的时间。本发明在NVM建立了缓存池NVMPOOL来存储完整的列存索引。对于段间索引创建时,只对存储的元数据信息进行合并,包含数据信息的数据段只进行逻辑合并。传统的排序方法为外部排序,但是外部排序会将所有的数据读入到内存中进行数据排序,若存在多个列存段,则还需在内存中进行结果合并,从而造成很大的内存空间占用,并且外部排序带来的频繁的I/O以及消耗过多的CPU资源,造成系统效率下降,本发明利用倒排索引,在进行等值查询时,减少了内存空间占用,提升了等值查询的效率。
本发明提出的基于非易失存储器的列存储索引方法,其处理过程详细说明如下:
(一)面向指标列的两阶段数据更新策略
为了更好地设计列存索引,避免一般文件系统带来的影响并利用NVM的字节寻址特性,本发明在NVM中创建缓存池(NVMPOOL),在缓存池中可以使用偏移量充当地址。图2中介绍了NVMPOOL设计与数据段结构,NVMPOOL中存储两种文件结构,元数据信息与包含数据信息的数据段,其中元数据信息主要为了负责找到数据段中的数据信息。本发明设计的元数据信息在保存各个数据段信息外还起到了连接各个数据段的作用,使各个数据段逻辑有序。数据段主要有四个模块组成,分别为段标识、Segment_ID(段编号)、列存数据、段尾标识,段标识主要记录版本号等信息,段编号用来在整个NVMPOOL中区分数据段。对于列存数据模块,根据该字段的类型进行区分,若为整型数据,则利用固定字节进行记录,也为利用NVM的字节寻址奠定了基础;若为字符串类型数据,为了避免空间过度浪费,则在每一个域值之前设置数据长度,来保证数值的正确性。段的结束可以通过段尾标识进行判断。
列式存储的更新一直是列式存储引擎的弱点所在,故本发明通过对指标列数据分阶段进行批量更新,将随机写转变为顺序写,从而减少随机I/O以及写放大。本发明采用二级架构,分别为Main结构和Delta结构,均存储在NVMPOOL中。本发明的Main结构主要包含多个列存索引段Segment,Segment之间通过文档编号Doc Number划分区域,每个Segment中存储的段编号仅在本Segment内唯一,每次更新时就只会对应一个分区(即Segment),避免重写所有区域的数据,从而使得性能成倍提升。本发明对每个Segment进行两阶段数据更新。每个Segment包含元数据信息和数据信息。Delta结构对应两个文件Delta1和Delta2,当其中一个Delta文件写满时,通过文件切换以及后台合并从而完成数据合并更新。对于Delta结构中的keys并不是主键,而是记录的被更新的行偏移地址Row-offset,这样在定位Delta内容的时候,不需要进行字符串比较工作,因此能大大加快定位速度。
本发明两阶段更新策略在进行查询时,因不确定查询请求所对应的值是否更新,故需要查询Delta结构和Main结构,从而造成三次随机访问,为了减少不必要的随机访问次数,本发明在内存中针对两个Delta文件分别构建布隆过滤器(Bloom Filter)。图3按照步骤展示了批量更新以及合并的流程,其中步骤(1)~(2)为两阶段批量更新流程,步骤(3)~(6)则为Delta结构与Main结构合并流程。(1)首先对更新的数据使用布隆过滤器,用于查询时判断该值是否更新以及更新所在的Delta文件;(2)通过元数据信息的DVM文件计算出更新的值所在的Row-offset,将Row-offset以及更新的值写入一个Delta文件,并将该Delta文件对应的Bloom Filter中Doc Number的位置标记为1(1代表位置占用,0代表位置未占用)。若当Delta达到阈值,进行Delta文件的切换,并将达到阈值的Delta文件与Main结构的文件进行合并:(3)加载DVM文件,通过DVM文件中的信息定位到DVD文件中的数据信息,其中DVD文件用于记录数据信息,本步骤旨在通过元数据信息定位数据信息;(4)根据DVM文件读取DVD文件中相关列的数据信息;(5)加载DVD文件中的相关列的数据信息到内存,在内存中进行数据更新;(6)将更新后的数据写回到DVD文件中。
(二)面向指标列的数据段逻辑合并方法
列存索引的Segment合并过程占据了大量的时间,并且在Segment合并过程中会对内存空间本就不足的系统造成较大的压力以及严重的写放大,故本发明利用NVM的特性针对指标列设计了新的列存索引结构,利用NVM的强大随机读写性能,减少创建列存索引过程中的列存索引段合并。
在未进行合并前,每个数据段之间彼此独立,对于同一字段的列存索引存放在所有的数据段中,本发明使用DVM元数据信息结构来维护每一列中所有的数据信息,利用每一个Segment中存在相同的列名和类型,将其作为key,对每一个Segment中同一个key的元数据信息进行合并,元数据信息合并后每个NVMPOOL中只有一个元数据信息。DVM元数据信息存储结构如图4所示,段标识中主要记录含有的段号、列数等,段数表示合并的DVM的个数,合并后的列索引中行数(即Doc Number数)则是将每一个合并的段Segment的行数(即DocNumber数)进行累加,位置信息和数据长度则记录了相同key在每一个索引段Segment的起始偏移量以及大小,通过元数据信息将NVMPOOL中所有的数据段连接成一个完整的列存索引。
考虑到数据的写入粒度过小会导致性能下降,本发明中设计的段也设计为MB量级的单位。NVM元数据信息结构中保存了各个数据段的地址,连接了各个数据段,因此每个数据段在元数据信息中都对应了一部分内容,当数据段满足一定数量时,对元数据信息进行更新。元数据信息合并示意图如图5,(1)当内存中的缓存满足一定大小时,将列存索引段保存为元数据信息(DVM文件)和数据信息(DVD文件),此时的元数据信息与数据信息一一对应,元数据信息保存了数据信息中的地址信息;(2)当写入的元数据信息满足一定数量时,使其重新加载到内存中;(3)重新生成新的元数据信息文件,使得数据段变为逻辑合并。
(三)基于倒排索引中维度列的索引优化
列式存储的一个重要应用场景是对低基数维度列进行等值排序,传统列式存储排序方法则是将所有数据读到内存中进行等值排序,不仅需要占用大量内存空间,而且需要利用外部排序频繁地进行I/O以及合并,消耗过多的CPU资源。故本发明在写入数据时构建倒排索引,从而达到在减少内存空间占用的情况下,提升等值查询性能的目的,并且在构建倒排索引时,同时记录该词项下的文档数量,当进行统计操作时,则无需将数据读到内存,在内存中进行数据统计,倒排索引构建流程图见图6。
本发明中的倒排索引主要分为词典和倒排链表两部分,词典记录着该维度列去重并排序后的词项,因为词典所占空间较小,将词典常驻在内存中,同时每一个词项对应一个排序的倒排链表,该倒排链表记录包含该词项的所有Doc Number,并按照Doc Number进行排序。
当同时对多个词项进行查询时,因为词典是有序的,则只需依次找到对应词项的倒排链表,并且由于每一个词项对应的倒排链表段内有序,只需将每一段中该词项对应的链表读到内存中,而无需再将全部数据从磁盘读取到内存中进行排序,图7展示了利用倒排索引后进行等值查询后的结果。
通过该发明,能够极大地降低内存的使用率,大大地降低了内存和磁盘的交互次数,提升了等值查询的性能。并且还能够通过利用NVM字节寻址特性和低延迟的loads和stores指令避免传输的消耗。
虽然本发明已以实施例公开如上,然其并非用以限定本发明,本领域的普通技术人员对本发明的技术方案进行的适当修改或者等同替换,均应涵盖于本发明的保护范围内,本发明的保护范围以权利要求所限定者为准。
Claims (10)
1.一种基于非易失存储器的列式存储索引方法,其特征在于,包括以下步骤:
在非易失存储器NVM中建立缓存池NVMPOOL;
在NVMPOOL中构建Main结构和Delta结构;Main结构包括多个列存索引段Segment,每个Segment包含元数据信息和数据信息,数据信息保存在DVD文件的若干个数据段内,元数据信息记录各个数据段地址,并使各数据段逻辑连接,元数据信息保存在DVM文件;Delta结构包括两个Delta文件;
在内存中为Delta结构的两个Delta文件分别构建布隆过滤器Bloom Filter,通过Bloom Filter查询并判断指标列的数据是否有更新;
每次对指标列的数据进行更新时,在内存中对更新请求进行解析,判断更新请求所在的Segment,将更新数据写入Segment的Delta结构中的一个Delta文件中;当该Delta文件写满时,则切换到另一个Delta文件,同时通过加载DVM文件定位DVD文件中的相关列的数据信息,并将该数据信息加载到内存中,合并已写满的Delta文件以进行数据更新,再将更新后的数据写入NVM的DVD文件中,并释放该Delta文件对应的Bloom Filter;
数据在写入NVM的DVD文件时构建倒排索引,该倒排索引分包含词典和倒排链表,其中词典常驻在内存中,记录维度列去重并排序后的词项,每一个词项对应一个排序的倒排链表。
2.如权利要求1所述的方法,其特征在于,各个Segment用文档编号Doc Number划分。
3.如权利要求2所述的方法,其特征在于,在判断更新请求所在的Segment后,首先通过DVM文件计算更新请求的行偏移地址Row-offset以及在该Segment对应的Doc Number;将更新数据写入Segment的Delta结构中的一个Delta文件中后,标记该Delta文件对应的BloomFilter中Doc Number的位置。
4.如权利要求1或2所述的方法,其特征在于,倒排链表记录该词项的所有Doc Number,并按照Doc Number排序。
5.如权利要求1所述的方法,其特征在于,Delta结构中的keys记录Row-offset。
6.如权利要求1所述的方法,其特征在于,数据段包括段标识、段编号、列存数据和段尾标识;其中,段标识用于记录版本号;段编号用于在整个NVMPOOL中区分数据段;列存数据根据字段的类型进行区分,若字段为整型数据,则利用固定字节进行记录;若字段为字符串类型数据,则在每一个域值之前设置数据长度;段尾标识用于判断数据段的结束。
7.如权利要求1所述的方法,其特征在于,同一字段的列存索引存放在所有的数据段中,将每一个Segment中存在相同的列名和类型作为key,对每一个Segment中同一个key的元数据信息进行合并,合并后每个NVMPOOL中仅有一个元数据信息。
8.如权利要求1所述的方法,其特征在于,DVM文件结构包括段标识、值Doc Values和段位标识,Doc Values包括列名称、列类型、列编号、段数和列索引,列索引包括位置信息和数据长度;其中,段标识用于记录段号和列数,段数用于表示合并的DVM的个数,合并后的列索引中的Doc Number数是将每一个合并的Segment的Doc Number进行累加;位置信息和数据长度用于记录相同key在每一个Segment的起始偏移量以及大小。
9.如权利要求1所述的方法,其特征在于,对多个词项进行同时查询时,只需依次找到对应词项的倒排链表,将每一数据段中该词项对应的倒排链表读到内存中。
10.一种基于非易失存储器的列式存储索引装置,其特征在于,包括:
非易失存储器NVM,采用列式存储数据,该NVM中建立有缓存池NVMPOOL;该NVMPOOL中存储Main结构和Delta结构;Main结构包括多个列存索引段Segment,每个Segment包含元数据信息和数据信息,数据信息保存在DVD文件的若干个数据段内,元数据信息记录各个数据段地址,并使各数据段逻辑连接,元数据信息保存在DVM文件;Delta结构包括两个Delta文件;
内存,该内存中为Delta结构的两个Delta文件分别构建有布隆过滤器Bloom Filter,通过Bloom Filter查询并判断指标列的数据是否有更新;
其中,每次对指标列的数据进行更新时,在内存中对更新请求进行解析,判断更新请求所在的Segment,将更新数据写入Segment的Delta结构中的一个Delta文件中;当该Delta文件写满时,则切换到另一个Delta文件,同时通过加载DVM文件定位DVD文件中的相关列的数据信息,并将该数据信息加载到内存中来合并已写满的Delta文件以进行数据更新,再将更新后的数据写入NVM的DVD文件中,并释放该Delta文件对应的BloomFilter;数据在写入NVM的DVD文件时构建倒排索引,该倒排索引分包含词典和倒排链表,其中词典常驻在内存中,记录维度列去重并排序后的词项,每一个词项对应一个排序的倒排链表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310096644.4A CN116257523A (zh) | 2023-02-10 | 2023-02-10 | 一种基于非易失存储器的列式存储索引方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310096644.4A CN116257523A (zh) | 2023-02-10 | 2023-02-10 | 一种基于非易失存储器的列式存储索引方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116257523A true CN116257523A (zh) | 2023-06-13 |
Family
ID=86685759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310096644.4A Pending CN116257523A (zh) | 2023-02-10 | 2023-02-10 | 一种基于非易失存储器的列式存储索引方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116257523A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821140A (zh) * | 2023-08-31 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
CN117311645A (zh) * | 2023-11-24 | 2023-12-29 | 武汉纺织大学 | 一种lsm存储元数据读放大的优化方法 |
CN117453707A (zh) * | 2023-12-09 | 2024-01-26 | 北京镜舟科技有限公司 | 数据更新方法、装置、电子设备及存储介质 |
-
2023
- 2023-02-10 CN CN202310096644.4A patent/CN116257523A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821140A (zh) * | 2023-08-31 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
CN116821140B (zh) * | 2023-08-31 | 2023-11-03 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
CN117311645A (zh) * | 2023-11-24 | 2023-12-29 | 武汉纺织大学 | 一种lsm存储元数据读放大的优化方法 |
CN117311645B (zh) * | 2023-11-24 | 2024-02-06 | 武汉纺织大学 | 一种lsm存储元数据读放大的优化方法 |
CN117453707A (zh) * | 2023-12-09 | 2024-01-26 | 北京镜舟科技有限公司 | 数据更新方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10303596B2 (en) | Read-write control method for memory, and corresponding memory and server | |
CN116257523A (zh) | 一种基于非易失存储器的列式存储索引方法及装置 | |
EP2735978B1 (en) | Storage system and management method used for metadata of cluster file system | |
WO2020041928A1 (zh) | 数据存储方法、系统及终端设备 | |
CN102129458B (zh) | 关系型数据库的存储方法及装置 | |
US7689574B2 (en) | Index and method for extending and querying index | |
CN105912687B (zh) | 海量分布式数据库存储单元 | |
CN107526550B (zh) | 一种基于日志结构合并树的两阶段合并方法 | |
CN110825748A (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN111399777A (zh) | 一种基于数据值分类的差异化键值数据存储方法 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
WO2014015828A1 (zh) | 数据存储空间的处理方法、处理系统及数据存储服务器 | |
KR20090026296A (ko) | 예측 데이터 로더 | |
CN104346357A (zh) | 一种嵌入式终端的文件存取方法及系统 | |
CN107766374B (zh) | 一种海量小文件存储读取的优化方法和系统 | |
CN103744913A (zh) | 一种基于搜索引擎技术的数据库检索方法 | |
WO2013075306A1 (zh) | 数据访问方法和装置 | |
CN102880615A (zh) | 一种数据存储方法和装置 | |
CN109299143B (zh) | 基于Redis缓存的数据互操作测试知识库的知识快速索引方法 | |
CN114996275A (zh) | 一种基于多树转换机制的键值存储方法 | |
CN106874329A (zh) | 数据库表索引的实现方法和装置 | |
CN110874360A (zh) | 一种基于固定容量的有序队列缓存方法及装置 | |
CN109213760B (zh) | 非关系数据存储的高负载业务存储及检索方法 | |
CN106909623A (zh) | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 | |
US20240220470A1 (en) | Data storage device and storage control method based on log-structured merge tree |
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 |