CN115563109A - 一种LSM-tree存储的L0层数据处理方法及装置 - Google Patents
一种LSM-tree存储的L0层数据处理方法及装置 Download PDFInfo
- Publication number
- CN115563109A CN115563109A CN202211176950.0A CN202211176950A CN115563109A CN 115563109 A CN115563109 A CN 115563109A CN 202211176950 A CN202211176950 A CN 202211176950A CN 115563109 A CN115563109 A CN 115563109A
- Authority
- CN
- China
- Prior art keywords
- layer
- load
- partition
- memory
- key value
- 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
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/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- 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
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文提供了涉及存储领域,提供了一种LSM‑tree存储的L0层数据处理方法及装置,根据L0层原容量在持久内存中预留部分区域作为L0层,所述方法包括:确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入L0层中各键值的次数;根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中待写入L0层的负载相关的统计信息及其之后的步骤。本文能够提高SM‑tree结构中L0层数据的查询及合并效率。
Description
技术领域
本文涉及数据存储领域,尤其涉及一种基于持久化内存的LSM-tree存储的L0层数据处理方法及装置。
背景技术
LSM-tree为HDD/SSD中的数据存储结构,其通过将随机写转化为顺序写保证了较高的读性能,使其在部分数据库存储引擎中替代了B+Tree成为了主要数据结构。但同时LSM-tree的多层次结构也牺牲了部分读性能,并增加了LSM-tree特有的合并开销。在LSM-tree进行合并操作时,会影响部分读操作的响应并占据CPU计算资源,所以如何缩短合并耗时成为了重中之重。同时LSM-tree通过保证L1之后层级中的SSTable键值范围不相交来减少访问数据量,但考虑到L0层数据较少且HDD/SSD不支持字节寻址以及随机写性能较差等问题,L0层中数据并未分区,存在SSTable键值范围相交的问题,因此在数据查询及合并时,无法利用线程并行能力提高查询及合并效率。
发明内容
本文用于解决现有技术中,HDD/SSD中LSM-tree结构中L0层数据存在查询及合并效率低的问题。
为了解决上述技术问题,本文第一方面提供一种LSM-tree存储的L0层数据处理方法,根据L0层原有容量在持久内存中预留部分区域作为L0层,所述方法包括:
确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入各键值的次数;
根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中负载相关的统计信息及其之后的步骤。
作为本文进一步实施例中,确定内存中待写入L0层的负载的相关统计信息包括:
接收前端发送的内存中待写入L0层的负载的相关统计信息;或利用count-min算法估计内存中待写入L0层的负载的相关统计信息。
作为本文进一步实施例中,利用count-min算法估计内存中待写入L0层的负载的相关统计信息包括:
获取用户指定的d个值域完全相同哈希函数,初始化d行w列数组C[d][w],其中,w为哈希函数值域中不同元素的个数;
对内存中每个键值j遍历所有d个哈希函数,执行C[i][hi(j)],其中,hi(j)为键值j在第i个哈希函数中的值;
对于任一键值a的出现次数,将数组C的第hi(a)列的最小值作为负载写入L0中键值a的次数。
作为本文进一步实施例中,根据负载的相关统计信息及用户设定的并发程度,对所述L0层数据进行垂直分区包括:
根据负载的相关统计信息计算负载写入键值的总量;
按照负载写入各键值从小到大的顺序对负载写入键值进行排序;
根据用户设定的并发程度、负载写入键值总量及排序结果,确定各分区键并将分区键的物理地址写入元数据文件中;根据各分区键及排序结果,确定分区结果。
作为本文进一步实施例中,根据用户设定的并发程度、负载写入键值总量及排序结果,确定各分区键包括:
利用负载写入键值总量除以用户设定的并发程度,计算得到分区的平均数据量;
将排序结果中满足如下公式对应位置的键值作为分区键:n×X+1,其中,n为1至N-1的正整数,N为并发程度,X为分区的平均数据量。
作为本文进一步实施例中,根据各分区键及排序结果,确定分区结果之后还包括:
判断相邻分区间是否存在相同的键值,若存在,则将该键值划分至该相邻分区中数据量较小的一分区中或相同键值量多的分区中。
作为本文进一步实施例中,根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区之后还包括:
监测各分区数据量差异是否大于预定阈值,若是,则利用count-min算法重新估计内存中待写入L0层的负载的相关统计信息。
作为本文进一步实施例中,LSM-tree存储的L0层数据处理还包括:
接收查询操作请求,其中,所述查询操作请求至少包括请求键值;
从元数据文件中查询所述请求键值,以确定请求键值落入的分区;
根据落入的分区确定该分区下的键值信息;
根据请求键值采用二分查找的方式在该分区下的键值信息中进行查询操作。
作为本文进一步实施例中,根据L0层原有容量在持久内存预留部分区域作为L0层包括:
利用如下公式计算部分区域:X=Y+a,X为部分区域,Y为L0层原有容量,a为大于0的数值;
在持久内存中预留所述部分区域的空间作为L0层。
作为本文进一步实施例中,LSM-tree存储的L0层数据处理还包括:
当所述L0层数据满载时,按照如下流程执行合并操作:
将L0层及L1层数据读入内存;
创建与L0的分区数量相等的线程,每一线程为内存中每一L0的分区挑选L1层中具有重合的部分,并对这部分数据进行合并处理,将合并后的数据写入L1层并更新元数据文件。
本文第二方面提供一种LSM-tree存储的L0层数据处理装置,根据L0层原有容量在持久内存中预留部分区域作为L0层,包括:
统计单元,用于确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入各键值的次数;
分区单元,用于根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
写入响应单元,用于根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中负载相关的统计信息及其之后的步骤。
本文第三方面提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现前述任一实施例所述方法。
本文第四方面提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被计算机设备的处理器运行时,执行根据前述任一实例所述方法的指令。
本文第五方面提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现前述任一实施例所述方法。
本文利用持久内存中的部分空间替代LSM-tree中L0层,能够借助持久内存的性能优势以及寻址能力,实现对L0层数据进行垂直分区(分区内键值存在重叠,而分区间不重叠,或相邻分区间存在键值重叠)同时保证各分区间数据均匀分布,分区是合并和查询操作的最小粒度,不同分区间可由不同线程并行操作,从而提高LSM-tree在L0层的查询效率并缩短L0至L1层合并所需的时间。
为让本文的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本文实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本文的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本文实施例LSM-tree存储的L0层数据处理方法的一种流程图;
图2示出了本文实施例利用count-min算法估计内存中负载的相关统计信息的流程图;
图3示出了本文实施例垂直分区过程的流程图;
图4示出了本文实施例LSM-tree存储的L0层数据处理方法的另一种流程图;
图5示出了本文实施例合并操作执行过程的流程图;
图6示出了本文实施例LSM-tree存储的L0层数据处理装置的结构图;
图7示出了本文实施例计算机设备的结构图。
附图符号说明:
601、统计单元;
602、分区单元;
603、写入响应单元;
702、计算机设备;
704、处理器;
706、存储器;
708、驱动机构;
710、输入/输出模块;
712、输入设备;
714、输出设备;
716、呈现设备;
718、图形用户接口;
720、网络接口;
722、通信链路;
724、通信总线。
具体实施方式
下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。
需要说明的是,本文的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本文的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或装置产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。
需要说明的是,本文的LSM-tree存储的L0层数据处理方法及装置可用于金融领域的数据存储,也可用于除金融领域之外的任意领域,本文的LSM-tree存储的L0层数据处理方法及装置的应用领域不做限定。
首先对本文中相关技术术语进行解释:
LSM-tree存储:LSM-tree是键值数据库存储引擎常用的结构,一般将数据分为多个层级(L0、L1、L2…),容量由小到大,时间由近及远,上层通过合并(compaction)的方式将数据整体移至下一层。其设计初衷在于使得写操作以追加写的形式写入磁盘,避免随机写以提高写入性能,但多层结构的形式,使得读性能受到了一定程度的牺牲。LSM-tree中各层的数据存储于HDD/SSD中,L0层数据用于存储从内存中淘汰的数据,L1及之后的层中SSTable键值范围不相交。
L0层:LSM-tree中的最上层,由内存直接刷新下来,L0层具有数据量最小,数据最新的特点。同时传统L0层与其他层次不同,不进行分组操作,SSTable包含所有的键值范围。
SSTable:LSM-tree中数据均以SSTable文件的形式存储在二级存储中,每一层都由数量不等的SSTable组成。SSTable均有不可变的特性,内部由排列有序的多个数据块和元数据组成。
合并:将上层(L0是L1的上层)所有SSTable和下层(L2是L1的下层)范围重叠部分的SSTable读入内存进行排序,保证其有序后作为新SSTable写入下层并删除参与合并的上下层SSTable。
现有LSM-tree的L0层存在SSTable键值范围相交的问题,因此在数据查询及合并时,无法利用线程并行能力提高查询及合并效率。基于现有技术存在的上述技术问题,本文一实施例中,提供一种LSM-tree存储的L0层数据处理方法,预先根据L0层原有容量在持久内存中预留部分区域作为L0层,如图1所示,LSM-tree存储的L0层数据处理方法包括:
步骤101,确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入各键值的次数;
步骤102,根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
步骤103,根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回步骤101重复上述确定内存中待写入L0层的负载相关的统计信息及其之后的步骤。
详细的说,本文所述的方法应用于具有存储设备的终端设备,包括但不限于台式计算机、笔记本、服务器等。
本文所述的负载可由业务设定,例如某软件、某公司的库存量,还可由人工确定,本文对负载不做具体限定。负载写入的各键值表示具体负载类型,例如键值1表示某一产品的库存量,可根据需求预先配置。
步骤101实施时,可由前端统计确定内存中负载的相关统计信息,还可利用count-min算法估计内存中负载的相关统计信息。具体的,如图2所示,利用count-min算法估计内存中负载的相关统计信息包括:
步骤201,获取用户指定的d个值域完全相同哈希函数,初始化d行w列数组C[d][w],其中,w为哈希函数值域中不同元素的个数;
步骤202,对内存中每个键值j遍历所有哈希函数,执行C[i][hi(j)],其中,hi(j)为键值j在第i个哈希函数中的值;
步骤203,对于任一键值a的出现次数,将数组C的第hi(a)列的最小值作为负载写入L0中键值a的次数。
在实现上,考虑到多次写入同一键值以及count-min算法不准确的可能性,可在持久内存中预留比原L0层大小稍大的空间作为新的L0层。
步骤102中的垂直分区使得分区内键值存在重叠,而分区间不重叠,或相邻分区间存在键值重叠。鉴于分区间不重叠或相邻分区间重叠,因此,在数据查询时,仅需先确定相关键值所在分区,从相关分区重查询键值即可,从而避免对L0层的全部检索,提高数据查询效率。另,在L0层与L1层数据合并时,也可以针对分区启动多个线程,由各线程对各分区进行合并操作,从而提高数据合并效率。
各分区的起始物理地址指的是各分区第一个键值所在物理地址,具体实施时,元数据文件中除了包括各分区起始物理地址外,元数据文件中还记录有个分区中数据块中最大键值和偏移,在数据访问时,可利用元数据文件进行二分查找定位至相关数据。其中,二分查找是将有序的数据从正中间分为数量相等的前后两部分,将要查找的数据与正中间的数据进行比较,若相等则查找成功,若小于正中间的数据继续递归查找前半段数据;反之后半段(假设数据升序)直至查找成功。
步骤103实施时,按照分区顺序,依次根据分区结果中的键值,将相应<键值,数据>写入L0层。
举例来说,假设某负载的相关统计信息为:负载写入键值1及键值6两次,负载写入键值3、键值5、键值9、键值12各一次,用户指定的并发程度为4,则可确定L0层数据可分划分为{1,1}、{3,5}、{6,6}、{9,12}四个分区,本实施例中的键值仅为示例,具体实施时,可设置其它具体值。
本实施例利用持久内存中的部分空间替代LSM-tree中L0层,能够借助持久内存的性能优势以及寻址能力,实现对L0层数据进行垂直分区同时保证各分区间数据均匀分布,分区是合并和查询操作的最小粒度,不同分区间可由不同线程并行操作,从而提高LSM-tree在L0层的查询效率并缩短L0至L1层合并所需的时间。同时本文通过重复确定分区结果,能够实现分区结果的动态维护,保证分区结果的均衡性,进而保证数据合并及查询的效率。
本文一实施例中,如图3所示,上述步骤102根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区包括:
步骤301,根据负载的相关统计信息计算负载写入键值的总量;
步骤302,按照负载写入各键值从小到大的顺序对负载写入键值进行排序;
步骤303,根据用户设定的并发程度、负载写入键值总量及排序结果,确定各分区键并将分区键的物理地址写入元数据文件中;根据各分区键及排序结果,确定分区结果。
步骤301实施时,对负载的相关统计信息中各键值的写入次数进行加和计算得到负载写入键值的总量,举例来说,负载的相关统计信息为:负载写入键值1及键值6两次,负载写入键值3、键值5、键值9、键值12各一次,则负载写入键值总量为2+2+1+1+1+1+1=8。
步骤302实施时,仍以上一统计信息为例,排序结果为键值1、键值1、键值3、键值5、键值6、键值6、键值9、键值12。
步骤303实施时,先利用负载写入键值总量除以用户设定的并发程度,计算得到分区的平均数据量;然后将排序结果中满足如下公式对应位置的键值作为分区键:n×X+1,其中,n为1至N-1的正整数,N为并发程度,X为分区的平均数据量。继续上一步骤实例,分区键为:键值3、键值6及键值9。
在计算平均数据量时,若存在除不尽的情况,则进行向上取整或向下取整操作。例如用户设定的并发程度为4,负载的相关统计信息为:负载写入键值1两次,负载写入键值6三次,负载写入键值3、键值5、键值9、键值12各一次,排序结果为键值1、键值1、键值3、键值5、键值6、键值6、键值6、键值9、键值12。则负载写入键值总量为9,9/4向下取整为2,则分区键为键值3、键值6、键值6、键值12,分区划分结果为:{1,1}、{3,5}、{6,6}、{6,9}、{12}本文一实施例中,为了避免相邻分区键存在相同的键值,进而影响数据查询效率,根据各分区键及排序结果,确定分区结果之后对分区内键值进行微调,具体包括:
判断相邻分区间是否存在相同的键值,若存在,则将该键值划分至该相邻分区中数据量较小的一分区中或相同键值量多的分区中。继续上一段实例,会将{6,9}中的键值6划分至前一分区{6,6}中,最终的分区结果为{1,1}、{3,5}、{6,6,6}、{9}、{12}。
本文一实施例中,对分区内键值微调后会导致各分区间差异较大,从而影响合并及查询效率,为了解决该问题,上述步骤102根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区之后还包括:
监测各分区数据量差异是否大于预定阈值,若是,则利用count-min算法重新估计内存中待写入L0层的负载的相关统计信息。
本文一实施例中,根据L0层原有容量在持久内存预留部分区域作为L0层包括:
利用如下公式计算部分区域:X=Y+a,X为部分区域,Y为L0层原有容量,a为大于0的数值,a可根据实际情况进行设定;在持久内存中预留所述部分区域的空间作为L0层。
本实施例通过在持久内存预留比原L0区域稍大的空间作为更新后L0,能够避免count-min算法计算不准确而导致数据无法存储的问题。
本文一实施例中,如图4所示,LSM-tree存储的L0层数据处理方法还包括:
步骤401,接收查询操作请求,其中,所述查询操作请求至少包括请求键值;
步骤402,从元数据文件中查询所述请求键值,以确定请求键值落入的分区;
步骤403,根据落入的分区确定该分区下的键值信息;
步骤404,根据请求键值采用二分查找的方式在该分区下的键值信息中进行查询操作。
步骤401实施时,查询操作请求由用户发起。
步骤402实施时,假设分区结果为{1,1}、{3,5}、{6,6}、{9,12},则请求键值4落在第二分区{3,5},请求键值12落在第四分区{9,12}。
考虑到分区键仍含有多次写入的重叠的键值,还可设置键值版本号,即每次写入数据时除了记录(键值,数据)外,还记录(键值,版本号)。根据(键值,版本号)进行并发二分查找,优先比较键值,例如(键值,版本号)分别为(3,10)、(4,1)、(4,10),则按照如下顺序进行查找(3,10)<(4,1)<(4,10)。
本文使得查询操作(读操作)不再需要访问L0层的所有数据,同时持久内存的寻址能力也使得二分查找可以更细的粒度进行(如元组粒度)。
本文一实施例中,当L0层数据满载时,还需执行L0与L1的合并操作,具体的,如图5所示,合并操作包括:
步骤501,将L0层及L1层数据读入内存;
步骤502,创建与L0的分区数量相等的线程,每一线程为内存中每一L0的分区挑选L1层中具有重合的部分,并对这部分数据进行合并处理,将合并后的数据写入L1层并更新元数据文件。
本实施例的设计能够大大提高合并操作的并行度,有效缩短了合并所需的时间。
此外,需要注意到因为L0层和L1层的分区不一定完全吻合,所以可能存在多个L0层在合并时需要的L1层分区部分重合,此时只需简单地将这多个L0层分区放一起进行合并操作即可,极端情况下,即所有L0层分区所需的分区均存在重合,此时退化为原始合并操作。
基于同一发明构思,本文还提供一种LSM-tree存储的L0层数据处理装置,如下面的实施例所述。由于LSM-tree存储的L0层数据处理装置解决问题的原理与LSM-tree存储的L0层数据处理方法相似,因此LSM-tree存储的L0层数据处理装置的实施可以参见LSM-tree存储的L0层数据处理方法,重复之处不再赘述。
具体的,本实施例实施之前先根据L0层原有容量在持久内存中预留部分区域作为L0层,如图6所示,LSM-tree存储的L0层数据处理装置包括:
统计单元601,用于确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入L0层中各键值的次数;
分区单元602,用于根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
写入响应单元603,用于根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中待写入L0层的负载相关的统计信息及其之后的步骤。
本实施例利用持久内存中的部分空间替代LSM-tree中L0层,能够借助持久内存的性能优势以及寻址能力,实现对L0层数据进行垂直分区(分区内键值存在重叠,而分区间不重叠,或相邻分区间存在键值重叠)同时保证各分区间数据均匀分布,分区是合并和查询操作的最小粒度,不同分区间可由不同线程并行操作,从而提高LSM-tree在L0层的查询效率并缩短L0至L1层合并所需的时间。
进一步实施例中,LSM-tree存储的L0层数据处理装置还包括:查询响应单元,用于接收查询操作请求,其中,所述查询操作请求至少包括请求键值;从元数据文件中查询所述请求键值,以确定请求键值落入的分区;根据落入的分区确定该分区下的键值信息;根据请求键值采用二分查找的方式在该分区下的键值信息中进行查询操作。
进一步实施例中,LSM-tree存储的L0层数据处理装置还包括:合并响应单元,用于当所述L0层数据满载时,按照如下流程执行合并操作:将L0层及L1层数据读入内存;创建与L0的分区数量相等的线程,每一线程为内存中每一L0的分区挑选L1层中具有重合的部分,并对这部分数据进行合并处理,将合并后的数据写入L1层并更新元数据文件。
总结而言,本文利用持久内存特性,对Lsm-tree中L0层的数据放置策略进行重新设计,能够达到如下两个目标:
1)通过分区缩小每次查询需要访问的数据量,以提高Lsm-tree在L0层的查询效率。
2)通过分区间执行并行合并操作,缩短L0至L1层合并所需的时间。
本文一实施例中,还提供一种计算机设备,如图7所示,计算机设备702可以包括一个或多个处理器704,诸如一个或多个中央处理单元(CPU),每个处理单元可以实现一个或多个硬件线程。计算机设备702还可以包括任何存储器706,其用于存储诸如代码、设置、数据等之类的任何种类的信息。非限制性的,比如,存储器706可以包括以下任一项或多种组合:任何类型的RAM,任何类型的ROM,闪存设备,硬盘,光盘等。更一般地,任何存储器都可以使用任何技术来存储信息。进一步地,任何存储器可以提供信息的易失性或非易失性保留。进一步地,任何存储器可以表示计算机设备702的固定或可移除部件。在一种情况下,当处理器704执行被存储在任何存储器或存储器的组合中的相关联的指令时,计算机设备702可以执行相关联指令的任一操作。计算机设备702还包括用于与任何存储器交互的一个或多个驱动机构708,诸如硬盘驱动机构、光盘驱动机构等。
计算机设备702还可以包括输入/输出模块710(I/O),其用于接收各种输入(经由输入设备712)和用于提供各种输出(经由输出设备714)。一个具体输出机构可以包括呈现设备716和相关联的图形用户接口718(GUI)。在其他实施例中,还可以不包括输入/输出模块710(I/O)、输入设备712以及输出设备714,仅作为网络中的一台计算机设备。计算机设备702还可以包括一个或多个网络接口720,其用于经由一个或多个通信链路722与其他设备交换数据。一个或多个通信总线724将上文所描述的部件耦合在一起。
通信链路722可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等、或其任何组合。通信链路722可以包括由任何协议或协议组合支配的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。
对应于图1-图5中的方法,本文实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法的步骤。
本文实施例还提供一种计算机可读指令,其中当处理器执行所述指令时,其中的程序使得处理器执行如图1至图5所示的方法。
应理解,在本文的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本文实施例的实施过程构成任何限定。
还应理解,在本文实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本文的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本文所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本文实施例方案的目的。
另外,在本文各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本文的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本文各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本文中应用了具体实施例对本文的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本文的方法及其核心思想;同时,对于本领域的一般技术人员,依据本文的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本文的限制。
Claims (14)
1.一种LSM-tree存储的L0层数据处理方法,其特征在于,根据L0层原有容量在持久内存中预留部分区域作为L0层,所述方法包括:
确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入各键值的次数;
根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中负载相关的统计信息及其之后的步骤。
2.如权利要求1所述的方法,其特征在于,确定内存中待写入L0层的负载的相关统计信息包括:
接收前端发送的内存中负载的相关统计信息;或利用count-min算法估计内存中负载的相关统计信息。
3.如权利要求2所述的方法,其特征在于,利用count-min算法估计内存中负载的相关统计信息包括:
获取用户指定的d个值域完全相同哈希函数,初始化d行w列数组C[d][w],其中,w为哈希函数值域中不同元素的个数;
对内存中每个键值j遍历所有d个哈希函数,执行C[i][hi(j)],其中,hi(j)为键值j在第i个哈希函数中的值;
对于任一键值a的出现次数,将数组C的第hi(a)列的最小值作为负载写入L0中键值a的次数。
4.如权利要求2所述的方法,其特征在于,根据负载的相关统计信息及用户设定的并发程度,对所述L0层数据进行垂直分区包括:
根据负载的相关统计信息计算负载写入键值的总量;
按照负载写入各键值从小到大的顺序对负载写入键值进行排序;
根据用户设定的并发程度、负载写入键值总量及排序结果,确定各分区键并将分区键的物理地址写入元数据文件中;根据各分区键及排序结果,确定分区结果。
5.如权利要求4所述的方法,其特征在于,根据用户设定的并发程度、负载写入键值总量及排序结果,确定各分区键包括:
利用负载写入键值总量除以用户设定的并发程度,计算得到分区的平均数据量;
将排序结果中满足如下公式对应位置的键值作为分区键:n×X+1,其中,n为1至N-1的正整数,N为并发程度,X为分区的平均数据量。
6.如权利要求5所述的方法,其特征在于,根据各分区键及排序结果,确定分区结果之后还包括:
判断相邻分区间是否存在相同的键值,若存在,则将该键值划分至该相邻分区中数据量较小的一分区中或相同键值量多的分区中。
7.如权利要求6所述的方法,其特征在于,根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区之后还包括:
监测各分区数据量差异是否大于预定阈值,若是,则利用count-min算法重新估计内存中待写入L0层的负载的相关统计信息。
8.如权利要求1所述的方法,其特征在于,还包括:
接收查询操作请求,其中,所述查询操作请求至少包括请求键值;
从元数据文件中查询所述请求键值,以确定请求键值落入的分区;
根据落入的分区确定该分区下的键值信息;
根据请求键值采用二分查找的方式在该分区下的键值信息中进行查询操作。
9.如权利要求1所述的方法,其特征在于,根据L0层原有容量在持久内存预留部分区域作为L0层包括:
利用如下公式计算部分区域:X=Y+a,X为部分区域,Y为L0层原有容量,a为大于0的数值;
在持久内存中预留所述部分区域的空间作为L0层。
10.如权利要求1所述的方法,其特征在于,还包括:
当所述L0层数据满载时,按照如下流程执行合并操作:
将L0层及L1层数据读入内存;
创建与L0的分区数量相等的线程,每一线程为内存中每一L0的分区挑选L1层中具有重合的部分,并对这部分数据进行合并处理,将合并后的数据写入L1层并更新元数据文件。
11.一种LSM-tree存储的L0层数据处理装置,其特征在于,根据L0层原有容量在持久内存中预留部分区域作为L0层,包括:
统计单元,用于确定内存中负载的相关统计信息,其中,所述负载的相关统计信息包括负载写入各键值的次数;
分区单元,用于根据负载的相关统计信息及用户设定的并发程度,对L0层数据进行垂直分区,将各分区的起始物理地址写入元数据文件中;
写入响应单元,用于根据分区结果及元数据文件,将负载对应数据写入所述L0层,返回重复上述确定内存中负载相关的统计信息及其之后的步骤。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10任意一项所述方法。
13.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机设备的处理器运行时,执行根据权利要求1至10任意一项所述方法的指令。
14.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任意一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211176950.0A CN115563109A (zh) | 2022-09-26 | 2022-09-26 | 一种LSM-tree存储的L0层数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211176950.0A CN115563109A (zh) | 2022-09-26 | 2022-09-26 | 一种LSM-tree存储的L0层数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115563109A true CN115563109A (zh) | 2023-01-03 |
Family
ID=84743147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211176950.0A Pending CN115563109A (zh) | 2022-09-26 | 2022-09-26 | 一种LSM-tree存储的L0层数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115563109A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235185A (zh) * | 2023-11-09 | 2023-12-15 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
-
2022
- 2022-09-26 CN CN202211176950.0A patent/CN115563109A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235185A (zh) * | 2023-11-09 | 2023-12-15 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
CN117235185B (zh) * | 2023-11-09 | 2024-01-16 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3238106B1 (en) | Compaction policy | |
US6477535B1 (en) | Method and apparatus for concurrent DBMS table operations | |
WO2021027956A1 (zh) | 一种基于区块链系统的交易处理方法及装置 | |
US10552378B2 (en) | Dividing a dataset into sub-datasets having a subset of values of an attribute of the dataset | |
US11100047B2 (en) | Method, device and computer program product for deleting snapshots | |
CN111159140B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US20190163795A1 (en) | Data allocating system and data allocating method | |
US6687798B1 (en) | Methods for intra-partition parallelism for inserts | |
CN115563109A (zh) | 一种LSM-tree存储的L0层数据处理方法及装置 | |
CN112306682A (zh) | 一种模型参数的存储方法和系统以及一种参数服务器集群 | |
US11429311B1 (en) | Method and system for managing requests in a distributed system | |
WO2022099441A1 (zh) | 一种存储介质的读取方法以及相关设备 | |
CN112181732A (zh) | 参数服务器节点的恢复方法和恢复系统 | |
CN116774937A (zh) | 数据存储方法、装置、处理设备、存储介质 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN103970671B (zh) | 用于在存储器中分配管理数据集的系统和方法 | |
CN115658683A (zh) | 元数据处理方法、装置、设备、介质和程序产品 | |
WO2022002128A1 (zh) | 一种读数据的方法、写数据的方法、设备和系统 | |
CN112988696B (zh) | 文件整理方法、装置及相关设备 | |
CN113625967A (zh) | 数据存储方法、数据查询方法及服务器 | |
CN113590032A (zh) | 固态硬盘名称空间的创建方法、装置、设备及可读存储介质 | |
Noon et al. | Optimization query processing for multi-tiered persistent storage | |
CN113495896A (zh) | 事务处理系统的管理方法、装置、设备及介质 | |
US20240220473A1 (en) | Optimal reorganization of a database | |
CN114661249B (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 |