CN117311645A - 一种lsm存储元数据读放大的优化方法 - Google Patents
一种lsm存储元数据读放大的优化方法 Download PDFInfo
- Publication number
- CN117311645A CN117311645A CN202311588096.3A CN202311588096A CN117311645A CN 117311645 A CN117311645 A CN 117311645A CN 202311588096 A CN202311588096 A CN 202311588096A CN 117311645 A CN117311645 A CN 117311645A
- Authority
- CN
- China
- Prior art keywords
- metadata
- segment
- cache
- file
- sstable
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000003199 nucleic acid amplification method Methods 0.000 title claims abstract description 25
- 230000003321 amplification Effects 0.000 title claims abstract description 22
- 238000005457 optimization Methods 0.000 title claims abstract description 15
- 230000008569 process Effects 0.000 claims description 17
- 230000011218 segmentation Effects 0.000 claims description 6
- 238000003780 insertion Methods 0.000 claims description 3
- 230000037431 insertion Effects 0.000 claims description 3
- 230000009191 jumping Effects 0.000 claims description 3
- 239000002699 waste material Substances 0.000 abstract description 5
- 238000007726 management method Methods 0.000 description 13
- 238000013461 design Methods 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001680 brushing effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/164—File meta data generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种LSM存储元数据读放大的优化方法,方法包括以下步骤:S1:构建支持分段元数据访问的SSTable文件,包括数据区和元数据区,数据区存储有序键值对数据,以数据块的方式组织,每个数据块具有一个索引项;元数据区将索引项切分成多个索引分段,建立对应的布隆过滤器,形成一组分段元数据;S2:构建分离的文件缓存和分段元数据缓存,文件缓存用于缓存文件信息;分段元数据缓存用于缓存分段元数据;S3:若文件缓存与分段元数据缓存中均存在与SSTable文件对应的缓存记录,则SSTable元数据访问操作不会产生磁盘I/O。本申请通过构建支持分段元数据访问的SSTable文件、分离的文件缓存和分段元数据缓存,减轻元数据读放大及其带来的内存空间浪费和多余的磁盘I/O问题。
Description
技术领域
本申请涉及存储***领域,尤其涉及一种LSM存储元数据读放大的优化方法。
背景技术
持久键值存储在现代数据密集型存储***和应用中起着至关重要的作用,例如消息传递、电子商务、搜索索引和广告等。日志结构合并(Log-Structured Merge, LSM)树是面向磁盘上的写密集型应用提出的一种写优化的数据结构,通过实现数据的异地更新从而提供高写性能。主流的基于LSM树的键值存储***包括LevelDB、RocksDB以及各种优化***,如PebblesDB、bLSM、cLSM等。此外,LSM树因其良好的写性能也被广泛部署于数据库、文件***和对象存储***中,如RocksDB用作关系型数据库MyRocks的底层存储引擎、用于对象存储***ZippyDB的元数据管理等;TableFS、IndexFS和Tectonic等文件***使用LSM树优化元数据管理以提升性能。
LSM树的多层结构使得查找一个键值对数据可能需要搜索多个层,查询多个SSTable。为了减少磁盘I/O,基于LSM树的键值存储***通常将SSTable的元数据,包含布隆过滤器和索引数据,缓存在内存中,用于快速验证键是否存在和定位数据所在的数据块。因此,LSM树中一次单点查找通常包含多个SSTable的元数据读取和目标SSTable的数据块读取,具有明显的元数据读放大。在典型的基于LSM树的键值存储***用例中,负载具有偏斜性,即可能一个SSTable中只有部分数据区域是热数据。这使得元数据读放大加剧了内存空间浪费和多余的磁盘I/O开销。随着数据规模的增长,元数据规模也随之增长。当内存无法缓存全部元数据时,部分元数据会被放到磁盘上,查询过程中访问这些元数据就会产生额外的磁盘I/O,严重影响读性能。一些研究工作在布隆过滤器的内存开销和读性能之间进行了权衡,比如通过异构布隆过滤器设计,在同样的误报率下减少内存占用;通过构建更细粒度的布隆过滤器以缓存更多热数据的布隆过滤器。然而,这些研究工作没有考虑索引数据的内存开销。对于大规模存储***,内存是一种稀缺资源,这促使了对如何在内存受限的情况下优化基于LSM树的键值存储***的读性能的探索和研究。
公开号为CN 116382588A的中国专利公开了“一种基于学习索引的LSM-Tree存储引擎读放大问题优化方法”, 基于键值分离的数据组织方式,将学习索引应用于LSM树的层内检索和SSTable内的数据查找,降低SSTable文件访问次数并缩小元数据查询范围,从而优化LSM树的读放大问题,该发明需要保证LSM树内数据大小固定,仅适用于键值分离的场景,并且未考虑内存受限情况下元数据读放大会带来额外的磁盘I/O的问题。
发明内容
针对现有技术的以上缺陷或者改进需求,本发明提供了一种LSM存储元数据读放大的优化方法,通过构建支持分段元数据访问的SSTable文件、分离的文件缓存和分段元数据缓存,减轻元数据读放大及其带来的内存空间浪费和多余的磁盘I/O开销问题,从而提升存储***的读性能。
为实现上述目的,按照本发明的一个方面,提供了一种LSM存储元数据读放大的优化方法,所述方法包括以下步骤:
S1:构建支持分段元数据访问的SSTable文件,所述SSTable文件包括数据区和元数据区,所述数据区存储有序键值对数据,所述有序键值对数据以数据块的方式组织,每个数据块具有一个索引项;
所述元数据区包括布隆过滤器块、元数据索引块、索引块和页脚,将所有数据块的索引项切分成多个索引分段,并为每个索引分段中所有的键值对建立对应的布隆过滤器,形成一组分段元数据,将分段元数据的句柄写入元数据索引块;
在构建SSTable文件过程中采用弹性分段配置,基于所述索引分段和各索引分段的布隆过滤器的大小与文件***的页大小对齐的原则,进行元数据切分;
S2:构建元数据缓存,所述元数据缓存包括分离的文件缓存和分段元数据缓存;
所述文件缓存用于缓存SSTable文件信息,包含SSTable文件的可读文件指针、分段元数据句柄,以及一个单调递增的版本号,由文件号进行索引;
所述分段元数据缓存用于缓存所述分段元数据,由分段标识符进行索引,所述分段标识符是由分段号和文件缓存中相应条目的版本号组成的唯一标识符;
S3:访问一个目标SSTable时,若所述文件缓存与所述分段元数据缓存中均存在与所述SSTable文件中的元数据相对应的缓存记录时,则SSTable元数据访问操作不会产生磁盘I/O。
作为本申请一实施例,保持所有数据块的索引项顺序存储,不采用将各所述分段元数据相互分离存储的方式,以保留数据遍历操作中索引项的顺序访问性,避免在SSTable验证和合并操作中增加读取索引数据的开销。
作为本申请一实施例,所述文件缓存中各项记录的版本号是根据文件缓存的***操作单调递增的,所述版本号用于构建对应文件的分段元数据在分段元数据缓存中的分段标识符,保证分段元数据缓存中记录的有效性。
作为本申请一实施例,在LSM树中查找一个键时,先确定一个目标SSTable,然后在该SSTable内查找目标键,SSTable内的查询过程包括以下步骤:
SA1:验证目标键是否存在,若存在,则进行下一步操作并结束此次读请求操作,若不存在,则查找下一个目标SSTable;
SA2:读取值,结束此次SSTable查询操作。
作为本申请一实施例,所述步骤SA1具体包括:
SA11:查找包含目标键的正确分段;
SA12:查询元数据缓存判断分段元数据是否存在,若存在,直接跳转到查询段布隆过滤器判断目标键是否存在;
SA13:若不存在,则从磁盘加载分段元数据并***元数据缓存;
SA14:查询段布隆过滤器判断目标键是否存在,若布隆过滤器判断不存在,则结束此次SSTable查询操作,若布隆过滤器判断存在,则进行下一步的操作。
作为本申请一实施例,所述步骤SA2具体包括以下步骤:
SA21:查询索引分段获取包含目标键的数据块的偏移量和长度;
SA22:加载数据块;
SA23:查询数据块判断数据是否存在,若存在,则返回结果,此次SSTable查询操作结束,若不存在,直接结束此次SSTable查询操作。
作为本申请一实施例,步骤S3中访问一个SSTable文件时,元数据访问的缓存查询过程具体操作包括:
S31:先查看该SSTable文件在文件缓存中是否存在对应记录,若文件缓存缺失,则分段元数据缓存必然缺失,则从磁盘中加载文件信息和分段元数据;
S32:若文件缓存中存在对应的缓存记录,分段元数据缓存缺失,则从磁盘中加载分段元数据;
S33:若在文件缓存和分段元数据缓存中均存在对应的缓存记录,则SSTable元数据访问操作不会产生磁盘I/O。
作为本申请一实施例,所述S31中元数据缓存操作的具体步骤包括:
S311:在文件缓存中查询目标SSTable,未存在对应的缓存记录,打开SSTable文件,从该文件中读取分段元数据句柄,生成一个版本号,形成该SSTable的文件缓存记录<Fid,<RFP, SH, vID>>,***文件缓存中;
S312:根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度,将段号与文件缓存记录的版本号组成分段标识符,然后从文件中读取分段元数据,包含索引分段和布隆过滤器,形成目标分段元数据记录<Sid,<SI, SF>>,***分段元数据缓存中。
作为本申请一实施例,所述S32中元数据缓存操作具体步骤包括:
S321:在文件缓存中查询目标SSTable,获得对应的缓存记录,得到目标SSTable的版本号和分段元数据句柄,根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度;
S322:基于文件缓存记录的版本号和段号生成分段标识符,在分段元数据缓存查询目标分段元数据,未存在对应的缓存记录,则根据目标分段元数据索引分段和布隆过滤器的起始偏移量和长度,从文件中读取索引分段和布隆过滤器,形成目标分段元数据的元组信息<Sid,<SI, SF>>,***分段元数据缓存中。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明通过构建支持分段元数据访问的SSTable文件、分离的文件缓存和分段元数据缓存,将SSTable文件的文件信息和分段元数据分别缓存在文件缓存和分段元数据缓存中,访问一个目标SSTable文件时,所述文件缓存和段元数据缓存中均存在对应的缓存记录,则该SSTable元数据访问操作不会产生磁盘I/O,实现在LSM树中细粒度的元数据访问,能够降低元数据访问带来的内存空间浪费和磁盘I/O开销,从而减轻元数据读放大对存储***读性能的负面影响,在内存有限的场景下能够明显优化读性能。
(2)本发明根据负载特征和存储实例配置弹性计算索引分段和各索引分段的布隆过滤器的大小,保证索引分段和各索引分段的布隆过滤器的大小与文件***的页大小对齐,避免大量小I/O对存储***性能的影响。
(3)本发明在构建SSTable的过程中,将有序键值对数据依次写入数据块时,记录数据的键和数据块的索引项,进行索引项切分和分段布隆过滤器的生成,实现元数据分段管理的操作增加的开销可忽略不计,对LSM树的写性能没有负面影响。
(4)本发明保持所有数据块的索引项顺序存储,整体上沿用现有LSM树设计中SSTable的元数据布局,而非分离存储各分段元数据,并且不改变索引块的组织方式,能够保留数据遍历操作中索引项的顺序访问性,从而避免影响LSM树的后台操作,涉及SSTable的完整性验证和合并操作。
(5)本发明在构建分段元数据管理后,SSTable文件与分段元数据形成一对多的对应关系,将文件访问和元数据访问解耦,实现高效的分段元数据缓存管理。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明中LSM存储元数据读放大的优化方法架构图;
图2为本发明中SSTable内元数据区组织方式示意图;
图3为本发明中SSTable内查询过程流程图;
图4为本发明中文件缓存未命中时元数据缓存操作示意图;
图5为本发明中文件缓存命中而分段元数据缓存未命中时元数据缓存操作示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地描述。
本申请的说明书、权利要求书及附图中的术语“第一”和“第二”等仅用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备等,没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元等,或可选地还包括对于这些过程、方法、产品或设备等固有的其它步骤或单元。
在本申请中提及的“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员可以显式地和隐式地理解的是,本申请描述的实施例可以与其它实施例相结合。
在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上,“至少两个(项)”是指两个或三个及三个以上,“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”。
如图1-5所示,本申请提供了一种LSM存储元数据读放大的优化方法,所述方法包括以下步骤:
S1:构建支持分段元数据访问的SSTable文件,所述SSTable文件包括数据区和元数据区,所述数据区存储有序键值对数据,所述有序键值对数据以数据块的方式组织,每个数据块具有一个索引项,表示为<起始键,<起始偏移, 长度>>;
所述元数据区包括布隆过滤器块、元数据索引块、索引块和页脚,将所有数据块的索引项切分成多个索引分段,并为每个索引分段中所有的键值对建立对应的布隆过滤器,形成一组分段元数据,将分段元数据的句柄,表示为<分段起始键, 索引分段:<起始偏移,长度>, 布隆过滤器:<起始偏移, 长度>>写入元数据索引块;
在构建SSTable文件过程中采用弹性分段配置,基于所述索引分段与其对应的布隆过滤器的大小应与文件***页大小(如4 KB)对齐的原则,进行元数据切分,避免大量小I/O对存储***性能的影响。
具体地,对依次产生的数据块的索引项,统计索引项大小(即数据块的起始键、起始偏移量和长度的字符数之和),并统计各数据块内的键值对数量;基于布隆过滤器配置(即每个键所需位数),计算布隆过滤器大小,由键值对数量与每个键所需位数相乘得到。当索引项之和与布隆过滤器大小都大于4 KB时,截断索引项,形成索引分段并生成对应的布隆过滤器,记录该索引分段的起始键、起始偏移和长度以及布隆过滤器的起始偏移和长度,作为分段元数据的句柄,以实现分段元数据的获取,针对后续产生的索引项,重新开始索引项大小和键值对数量的统计。
S2:构建元数据缓存,所述元数据缓存包括分离的文件缓存和分段元数据缓存;
所述文件缓存用于缓存文件信息,包含SSTable文件的可读文件指针、分段元数据句柄,以及一个单调递增的版本号,由文件号进行索引;
所述分段元数据缓存用于缓存分段元数据,由分段标识符进行索引,所述分段标识符是由分段号和文件缓存中相应条目的版本号组成的唯一标识符;
S3:访问一个目标SSTable时,若所述文件缓存与所述分段元数据缓存中均存在与所述SSTable文件中的元数据相对应的缓存记录时,则SSTable元数据访问操作不会产生磁盘I/O。
本申请通过设计支持分段元数据访问的SSTable文件,并面向分段元数据设计高效的元数据缓存,在LSM树中实现高效的分段元数据访问,能够降低元数据访问带来的内存空间浪费和磁盘I/O开销,从而减轻元数据读放大对存储***读性能的负面影响。
在LSM树中,SSTable是在下刷或合并操作中产生的,在创建新的SSTable过程中,有序键值对逐个写入数据块,记录所有数据的键和数据块的索引项,当一个数据块写满时,将其写入SSTable文件,生成该数据块的索引项,并创建一个新的数据块以接收后续的有序键值对;在依次产生索引项的过程中切分索引项并生成对应的布隆过滤器,实现元数据的分段存储和管理对LSM树的写性能没有负面影响。
作为本申请一实施例,在SSTable构建过程中,将所有数据块写入SSTable文件后,开始向文件写入元数据,包括索引块、布隆过滤器块、元数据索引块和页脚。具体地,将各分段的布隆过滤器依次写入文件,如图2所示,示例中SSTable的元数据共切分成n个分段,则将n个分段的布隆过滤器依次写入文件;将各分段元数据的句柄写入文件,形成元数据索引块;将所有索引项写入文件,形成索引块;最后,写入文件页脚,至此,SSTable文件创建完成。
作为本申请一实施例,保持所有数据块的索引项顺序存储,不采用将各分段元数据相互分离存储的方式,以保留数据遍历操作中索引项的顺序访问性,直观的来看,将分段元数据相互分离存储能够保证分段元数据读取的顺序性,加快分段元数据的加载速度,本发明整体上沿用现有LSM树设计中SSTable的元数据布局,并且不改变索引块的组织方式,是为了保持索引项遍历操作的顺序性,从而避免影响LSM树的后台操作,涉及SSTable的完整性验证和合并操作。
构建分段元数据管理后,SSTable文件与分段元数据形成一对多的关系,现有的LSM存储***中元数据缓存设计将文件的可读指针和元数据耦合管理,是一对一的关系,不适用于分段元数据的缓存管理,本发明将文件访问和元数据访问解耦,创建分离的文件缓存和分段元数据缓存,实现高效的分段元数据缓存管理。
作为本申请一实施例,在LSM树中查找一个键时,读操作会从L0层开始逐层查找,先确定一个目标SSTable,然后在该SSTable内查找目标键,如图3所示,SSTable内的查询过程包括以下步骤:
SA1:验证目标键是否存在,若存在,则进行下一步操作并结束此次读请求操作,若不存在,则查找下一个目标SSTable;
SA2:读取值,结束此次SSTable查询操作。
作为本申请一实施例,所述步骤SA1验证目标键是否存在具体包括以下步骤:
SA11:首先使用二分查找在所有段句柄中找到可能包含目标键的正确分段;
SA12:查询元数据缓存判断分段元数据是否存在,若存在,直接跳转到查询段布隆过滤器判断目标建是否存在;
SA13:若不存在,则从磁盘加载分段元数据并将其***元数据缓存;
SA14:查询段布隆过滤器判断目标建是否存在,若布隆过滤器判断不存在,则结束此次SSTable查询操作,若布隆过滤器判断存在,则进行下一步的操作。
作为本申请一实施例,所述步骤SA2具体包括以下步骤:
SA21:在索引分段中进行二分查找,确定可能包含目标键的数据块的起始偏移量和长度;
SA22:从磁盘加载数据块;
SA23:查询数据块判断数据是否存在,若存在,则返回结果,此次SSTable查询操作结束,若不存在,直接结束此次SSTable查询操作。
作为本申请一实施例,所述文件缓存中各项记录的版本号是根据文件缓存的***操作单调递增的,所述版本号用于构建对应文件的分段元数据在分段元数据缓存中的分段标识符,保证分段元数据缓存中记录的有效性。具体的,在文件缓存中,每条记录包含一个SSTable文件的可读文件指针(RFP)和分段元数据的句柄(SH),以及一个单调递增的版本号(vID),由文件号进行索引(Fid),即文件缓存中一条记录的数据组织形式为<Fid,<RFP,SH, vID>>。在分段元数据缓存中,每条记录都是一组分段元数据,包括索引分段(SI)和该分段的布隆过滤器(SF),由唯一的段标识符(Sid)进行索引,该标识符由段号和文件缓存中所属SSTable文件记录的版本号组成,即在分段元数据缓存中,一条记录的数据组织形式为<Sid,<SI, SF>>。
本申请在分离的文件缓存与分段元数据缓存设计下,需要优先考虑文件缓存的命中率,能够减轻分段元数据缓存的缓存记录失效问题。所述缓存记录失效问题是指缓存记录数据本身是有效的,但是该记录的索引失效,导致该记录找不到。缓存记录失效后仍占用缓存空间,降低缓存空间率并影响缓存命中率。
作为本申请一实施例,步骤S3中访问一个目标SSTable时,元数据访问的缓存查询过程具体操作包括:
S31:先查看该SSTable文件在文件缓存中是否存在对应的缓存记录,若文件缓存缺失,则分段元数据缓存必然缺失,从磁盘加载文件信息和分段元数据;
S32:若文件缓存中存在对应的缓存记录,分段元数据缓存缺失,则从磁盘中加载分段元数据。
S33:若在文件缓存和段元数据缓存中均存在对应的缓存记录,则SSTable元数据访问操作不会产生磁盘I/O。
作为本申请一实施例,如图4所示,所述S31中元数据缓存操作的具体步骤包括:
S311:在文件缓存中查询目标SSTable未命中,打开SSTable文件,从该文件中读取分段元数据句柄,生成一个版本号,形成该SSTable的文件缓存记录<Fid,<RFP, SH, vID>>,***文件缓存中;
S312:根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度,将段号与文件缓存记录的版本号组成分段标识符,然后从文件中读取分段元数据,包含索引分段和布隆过滤器,形成目标分段元数据记录<Sid,<SI, SF>>,***分段元数据缓存中。
作为本申请一实施例,如图5所示,所述S32中元数据缓存操作的具体步骤包括:
S321:在文件缓存中查询目标SSTable命中,获得对应的缓存记录,得到目标SSTable的版本号和分段元数据句柄,根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度;
S322:基于文件缓存记录的版本号和段号生成分段标识符,在分段元数据缓存查询目标分段元数据未命中,则根据目标分段元数据索引分段和布隆过滤器的起始偏移量和长度,从文件中读取索引分段和布隆过滤器,形成目标分段元数据的元组信息<Sid,<SI,SF>>,***分段元数据缓存中。
本发明通过构建一个支持细粒度元数据访问的键值存储***,实现分段元数据存储和访问以及高效的分段元数据缓存管理,降低元数据读放大的问题,从而减轻读取元数据的磁盘I/O开销并提升缓存空间利用率,在内存受限的情况下能明显优化读性能。分段元数据管理方法与现有的专注于LSM树结构优化的工作是正交的,它可以与这些设计相结合,进一步提升单点查询性能。
本实施例所使用服务器硬件配置为:CPU为20 核Intel (R) Xeon(R) CPU E5-2603 v4 @2.20 GHz,内存大小为64GB,SSD为480 GB Intel D3-S4510;操作***为64位Ubuntu 20.04与Linux 5.4.0内核,文件***为xfs。在LevelDB(1.23版本)上实现了分段元数据管理方法,使用YCSB基准进行测试。键值对数据的键的大小为16 B,值的大小为232 B。SSTable的数据块大小为4 KB,布隆过滤器配置为每个键10比特,SSTable大小为32 MB。元数据缓存空间大小配置为存储实例中所有SSTable的元数据大小的30%、60%、90%、100%。对于其他参数,在实验中使用默认值。实验结果表明,在读写混合的负载下,在不同的缓存大小配置下,使用分段元数据管理方法将请求的平均延迟降低了 14% ~83%。在缓存大小比例配置为30%和60%时,使用分段元数据管理方法将第99百分位的时延分别降低了52%和71%。
最后应说明的是,以上实施例仅用以说明本申请的技术方案而非限制,尽管参照较佳实施例对本申请进行了详细说明,本领域的普通技术人员应当理解,可以对本申请的技术方案进行修改或等同替换,而不脱离本申请技术方案的精神和范围。
Claims (10)
1.一种LSM存储元数据读放大的优化方法,其特征在于,所述方法包括以下步骤:
S1:构建支持分段元数据访问的SSTable文件,所述SSTable文件包括数据区和元数据区,所述数据区存储有序键值对数据,所述有序键值对数据以数据块的方式组织,每个数据块具有一个索引项;
所述元数据区包括布隆过滤器块、元数据索引块、索引块和页脚,将所有数据块的索引项切分成多个索引分段,并为每个索引分段中所有的键值对建立对应的布隆过滤器,形成一组分段元数据,将分段元数据的句柄写入元数据索引块;
在构建SSTable文件过程中采用弹性分段配置,基于所述索引分段和各索引分段的布隆过滤器的大小与文件***的页大小对齐的原则,进行元数据切分;
S2:构建元数据缓存,所述元数据缓存包括分离的文件缓存和分段元数据缓存;
所述文件缓存用于缓存SSTable文件信息,包含SSTable文件的可读文件指针、分段元数据句柄,以及一个单调递增的版本号,由文件号进行索引;
所述分段元数据缓存用于缓存所述分段元数据,由分段标识符进行索引,所述分段标识符是由分段号和文件缓存中相应条目的版本号组成的唯一标识符;
S3:访问一个目标SSTable时,若所述文件缓存与所述分段元数据缓存中均存在与所述SSTable文件中的元数据相对应的缓存记录时,则SSTable元数据访问操作不会产生磁盘I/O。
2.如权利要求1所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述弹性分段配置具体包括:对依次产生的数据块的索引项,统计索引项大小,并统计各数据块内的有序键值对数量;基于布隆过滤器配置,计算布隆过滤器大小,由有序键值对数量与每个键所需位数相乘得到。
3.如权利要求1所述的一种LSM存储元数据读放大的优化方法,其特征在于,保持所有数据块的索引项顺序存储,不采用将各所述分段元数据相互分离存储的方式,以保留数据遍历操作中索引项的顺序访问性。
4.如权利要求1所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述文件缓存中各项记录的版本号是根据文件缓存的***操作单调递增的,所述版本号用于构建对应文件的分段元数据在分段元数据缓存中的分段标识符,保证分段元数据缓存中记录的有效性。
5.如权利要求1所述的一种LSM存储元数据读放大的优化方法,其特征在于,在LSM树中查找一个键时,先确定一个目标SSTable,然后在该SSTable内查找目标键,SSTable内的查询过程包括:
SA1:验证目标键是否存在,若存在,则进行下一步操作并结束此次读请求操作,若不存在,则查找下一个目标SSTable;
SA2:读取值,结束此次SSTable查询操作。
6.如权利要求5所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述步骤SA1具体包括:
SA11:查找包含目标键的正确分段;
SA12:查询元数据缓存判断分段元数据是否存在,若存在,直接跳转到查询段布隆过滤器判断目标键是否存在;
SA13:若不存在,则从磁盘加载分段元数据并将其***元数据缓存;
SA14:查询段布隆过滤器判断目标键是否存在,若布隆过滤器判断不存在,则结束此次SSTable查询操作,若布隆过滤器判断存在,则进行下一步的操作。
7.如权利要求5所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述步骤SA2具体包括:
SA21:查询索引分段获取包含目标键的数据块的偏移量和长度;
SA22:加载数据块;
SA23:查询数据块判断数据是否存在,若存在,则返回结果,此次SSTable查询操作结束,若不存在,直接结束此次SSTable查询操作。
8.如权利要求1所述的一种LSM存储元数据读放大的优化方法,其特征在于,步骤S3中访问一个目标SSTable时,元数据访问的缓存查询过程具体操作包括:
S31:先查看该SSTable文件在文件缓存中是否存在对应的缓存记录,若文件缓存缺失,则分段元数据缓存必然缺失,从磁盘加载文件信息和分段元数据;
S32:若文件缓存中存在对应的缓存记录,分段元数据缓存缺失,则从磁盘中加载分段元数据;
S33:若在文件缓存和分段元数据缓存中均存在对应的缓存记录,则SSTable元数据访问操作不会产生磁盘I/O。
9.如权利要求8所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述S31中元数据缓存操作的具体步骤包括:
S311:在文件缓存中查询目标SSTable,未存在对应的缓存记录,打开SSTable文件,从该文件中读取分段元数据句柄,生成一个版本号,形成该SSTable的文件缓存记录<Fid, <RFP, SH, vID>>,***文件缓存中;
S312:根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度,将段号与文件缓存记录的版本号组成分段标识符,然后从文件中读取分段元数据,包含索引分段和布隆过滤器,形成目标分段元数据记录<Sid, <SI, SF>>,***分段元数据缓存。
10.如权利要求8所述的一种LSM存储元数据读放大的优化方法,其特征在于,所述S32中元数据缓存操作的具体步骤包括:
S321:在文件缓存中查询目标SSTable,获得对应的缓存记录,得到目标SSTable的版本号和分段元数据句柄,根据目标键在段句柄中通过二分查找包含该目标键的分段,得到目标分段元数据的段号、索引分段和布隆过滤器的起始偏移量和长度;
S322:基于文件缓存记录的版本号和段号生成分段标识符,在分段元数据缓存查询目标分段元数据,未存在对应的缓存记录,则根据目标分段元数据索引分段和布隆过滤器的起始偏移量和长度,从文件中读取索引分段和布隆过滤器,形成目标分段元数据的元组信息<Sid, <SI, SF>>,***分段元数据缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311588096.3A CN117311645B (zh) | 2023-11-24 | 2023-11-24 | 一种lsm存储元数据读放大的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311588096.3A CN117311645B (zh) | 2023-11-24 | 2023-11-24 | 一种lsm存储元数据读放大的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117311645A true CN117311645A (zh) | 2023-12-29 |
CN117311645B CN117311645B (zh) | 2024-02-06 |
Family
ID=89273886
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311588096.3A Active CN117311645B (zh) | 2023-11-24 | 2023-11-24 | 一种lsm存储元数据读放大的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117311645B (zh) |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145199A1 (en) * | 2002-01-31 | 2003-07-31 | Miller Layne B. | Data pool with validity detection |
CN104915145A (zh) * | 2014-03-11 | 2015-09-16 | 华为技术有限公司 | 一种降低LSM Tree写放大的方法和装置 |
US20160063021A1 (en) * | 2014-08-28 | 2016-03-03 | Futurewei Technologies, Inc. | Metadata Index Search in a File System |
CN106021381A (zh) * | 2016-05-11 | 2016-10-12 | 北京搜狐新媒体信息技术有限公司 | 一种云存储服务***的数据访问/存储方法及装置 |
CN106708427A (zh) * | 2016-11-17 | 2017-05-24 | 华中科技大学 | 一种适用于键值对数据的存储方法 |
US20200134100A1 (en) * | 2018-10-31 | 2020-04-30 | EMC IP Holding Company LLC | Storing metadata in a cuckoo tree |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
KR20210058118A (ko) * | 2019-11-13 | 2021-05-24 | 인하대학교 산학협력단 | CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치 |
CN114356877A (zh) * | 2021-12-30 | 2022-04-15 | 山东浪潮科学研究院有限公司 | 一种基于持久内存的日志结构合并树分级存储方法及*** |
US11550479B1 (en) * | 2021-10-27 | 2023-01-10 | Dell Products L.P. | Metadata management in storage systems |
CN116257523A (zh) * | 2023-02-10 | 2023-06-13 | 中国科学院信息工程研究所 | 一种基于非易失存储器的列式存储索引方法及装置 |
CN116382588A (zh) * | 2023-04-13 | 2023-07-04 | 电子科技大学 | 一种基于学习索引的LSM-Tree存储引擎读放大问题优化方法 |
CN116414304A (zh) * | 2022-12-30 | 2023-07-11 | 蜂巢科技(南通)有限公司 | 基于日志结构化合并树的数据存储装置和存储控制方法 |
US20230350850A1 (en) * | 2022-04-28 | 2023-11-02 | Netapp Inc. | Defragmentation for log structured merge tree to improve read and write amplification |
-
2023
- 2023-11-24 CN CN202311588096.3A patent/CN117311645B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145199A1 (en) * | 2002-01-31 | 2003-07-31 | Miller Layne B. | Data pool with validity detection |
CN104915145A (zh) * | 2014-03-11 | 2015-09-16 | 华为技术有限公司 | 一种降低LSM Tree写放大的方法和装置 |
US20160063021A1 (en) * | 2014-08-28 | 2016-03-03 | Futurewei Technologies, Inc. | Metadata Index Search in a File System |
CN106663056A (zh) * | 2014-08-28 | 2017-05-10 | 华为技术有限公司 | 文件***中的元数据索引搜索 |
CN106021381A (zh) * | 2016-05-11 | 2016-10-12 | 北京搜狐新媒体信息技术有限公司 | 一种云存储服务***的数据访问/存储方法及装置 |
CN106708427A (zh) * | 2016-11-17 | 2017-05-24 | 华中科技大学 | 一种适用于键值对数据的存储方法 |
US20200134100A1 (en) * | 2018-10-31 | 2020-04-30 | EMC IP Holding Company LLC | Storing metadata in a cuckoo tree |
KR20210058118A (ko) * | 2019-11-13 | 2021-05-24 | 인하대학교 산학협력단 | CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치 |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
US11550479B1 (en) * | 2021-10-27 | 2023-01-10 | Dell Products L.P. | Metadata management in storage systems |
CN114356877A (zh) * | 2021-12-30 | 2022-04-15 | 山东浪潮科学研究院有限公司 | 一种基于持久内存的日志结构合并树分级存储方法及*** |
US20230350850A1 (en) * | 2022-04-28 | 2023-11-02 | Netapp Inc. | Defragmentation for log structured merge tree to improve read and write amplification |
CN116414304A (zh) * | 2022-12-30 | 2023-07-11 | 蜂巢科技(南通)有限公司 | 基于日志结构化合并树的数据存储装置和存储控制方法 |
CN116257523A (zh) * | 2023-02-10 | 2023-06-13 | 中国科学院信息工程研究所 | 一种基于非易失存储器的列式存储索引方法及装置 |
CN116382588A (zh) * | 2023-04-13 | 2023-07-04 | 电子科技大学 | 一种基于学习索引的LSM-Tree存储引擎读放大问题优化方法 |
Non-Patent Citations (5)
Title |
---|
HUGO: "一文带你看透基于LSM-tree的NoSQL***优化方向", Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/351241814> * |
JU HYOUNG MUN: "LSM-Trees Under (Memory) Pressure", SEMANTIC SCHOLAR * |
LIU, L: "PTierDB: Building Better Read-Write Cost Balanced Key-Value Stores for Small Data on SSD", IEEE * |
PENG XU: "Building a Fast and Efficient LSM-tree Store by Integrating Local Storage with Cloud Storag", ACM * |
王坤;杨杨;邱雪松;: "天地一体化网络中基于HDFS的元数据优化策略", 无线电通信技术, no. 01 * |
Also Published As
Publication number | Publication date |
---|---|
CN117311645B (zh) | 2024-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109213772B (zh) | 数据存储方法及NVMe存储*** | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US6546394B1 (en) | Database system having logical row identifiers | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
CN107526550B (zh) | 一种基于日志结构合并树的两阶段合并方法 | |
US20040205044A1 (en) | Method for storing inverted index, method for on-line updating the same and inverted index mechanism | |
US7499927B2 (en) | Techniques for improving memory access patterns in tree-based data index structures | |
US20150261783A1 (en) | Method and apparatus for storing and reading files | |
Amur et al. | Design of a write-optimized data store | |
CN116257523A (zh) | 一种基于非易失存储器的列式存储索引方法及装置 | |
CN109299143B (zh) | 基于Redis缓存的数据互操作测试知识库的知识快速索引方法 | |
KR101806394B1 (ko) | 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법 | |
CN109213760A (zh) | 非关系数据存储的高负载业务存储及检索方法 | |
CN114297145A (zh) | 一种ipfs节点本地基于关键词搜索文件的方法、介质及*** | |
CN106776702B (zh) | 一种处理主从式数据库***中的索引的方法和装置 | |
CN117311645B (zh) | 一种lsm存储元数据读放大的优化方法 | |
CN115934583B (zh) | 分级缓存方法、装置及*** | |
WO2022068289A1 (zh) | 一种数据访问方法、装置、设备及计算机可读存储介质 | |
US20190087440A1 (en) | Hierarchical virtual file systems for accessing data sets | |
CN111538465B (zh) | 一种基于Linux高性能数据重删方法 | |
CN113760171A (zh) | 一种元数据存储方法及装置 | |
KR100921683B1 (ko) | 키-값 데이터 모델을 위한 메모리 페이지 내 데이터저장방법 | |
US20240160617A1 (en) | Garbage collection based on metadata indicating unmodified objects | |
CN114969069B (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 |