System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于数据库,具体的说是一种基于多日志结构合并树的键值存储方法。
技术介绍
1、lsm-tree(logstructuredmergetrees)数据组织方式被应用于多种数据库,如leveldb,cassandra等,lsm-tree相较b+树或其他索引存储实现方式,提供了更好的写性能,将键值对数据(key-value)的随机读写实现为内存随机读写、顺序刷盘,利用磁盘顺序写高于随机写的特点,提升数据写入的性能。利用磁盘数据的分层有序结构、层与层之间的归并排序(compaction)改善读性能。
2、lsm-tree在磁盘上采用分层有序的结构,确实可以改善文件随机存储在一层的数据读取性能。但是,磁盘数据分层有序的结构也会带来相应的读写放大问题,数据在写入时,会先写入内存的缓冲区中,然后再追加写入到磁盘上低层,旧的数据会被compaction重新写入更高层的文件中;当读取某个键值数据时,会从内存中的缓冲区中查找,没有找到则在磁盘上按照层数由低到高循环查找,如果在某层找到,直接返回数据,否则,说明数据不存在;
3、由上述读写流程可知,写入的数据会经历大量的重复写入,读取数据也会因为数据在磁盘高层导致很多无效的磁盘io,且没有充分利用系统硬件资源,当数据层数很深时,则上述读写放大情况更为严重。
技术实现思路
1、本专利技术是为了解决上述现有技术存在的不足之处,提出一种基于多日志结构合并树的键值存储方法,以期能克服现有技术的上述缺陷,充分利用现有硬件资源,实现
2、本专利技术为达到上述专利技术目的,采用如下技术方案:
3、本专利技术一种基于多日志结构合并树的键值存储方法的特点应用于设置有mlsmt结构的单个存储节点中,所述mlsmt结构包括:compaction调度器、lsmt信息监控器、n个日志结构合并树{lsmt1,lsmt2,…,lsmti,…,lsmtn},其中,lsmti表示第i个日志结构合并树;1≤i≤n;
4、所述第i个日志结构合并树lsmti包含一个磁盘组件和内存组件;
5、lsmti中的磁盘组件包含p个层结构{li1,li2,…,lij,…,lip},其中,lij表示第i个日志结构合并树的第j层结构,1≤j≤p;第j层结构lij包括qij个sst文件
6、{sstij1,sstij2,…,sstijk,…,sstijqij},其中,sstijk表示第i个日志结构合并树lsmti的第j层结构lij的第k个sst文件,1≤k≤qij;
7、第k个sst文件sstijk包含若干键值数据<key,value>,根据第k个sst文件sstijk中所有键数据key的取值,得到第k个sst文件sstijk的键范围(keyminijk,keymaxijk),其中,keyminijk表示第k个sst文件sstijk的键的最小值,keymaxijk表示第k个sst文件sstijk的键的最大值,除第1层结构li1的各文件之间键范围有重叠外,其他层结构的各文件之间的键范围无重叠且有序排列;
8、令第k个sst文件sstijk中所有键值数据所占磁盘空间大小记为第k个sst文件sstijk的大小sizeijk,第j层结构lij所有sst文件的总大小sizeij的阈值记为limitsizeij,j>1,第1层结构的sst文件个数具有阈值limitnumi;
9、除第1层结构li1外,第j+1层结构li(j+1)中所有sst文件的阈值limitsizei(j+1)是第j层结构lij中所有sst文件的阈值limitsizeij的q倍,即limitsizei(j+1)=q×limitsizeij;
10、所述第i个日志结构合并树lsmti的内存组件包括内存缓冲区mti、内容不可变的缓冲区imti,二维元数据管理数组fmi,且fmi中包含p×qij个元素,每个元素是由sst文件的编号、sst文件的大小、sst文件的引用计数、键的最小值、键的最大值,是否垃圾回收的标志字段gc组成的结构体;
11、所述第i个日志结构合并树lsmti包含的操作为:fhi操作、compactioni操作;其中,compactioni操作分为minci操作、maxci操作;
12、fhi操作是指内存缓冲区mti中的键值数据以sst文件的形式写入磁盘组件的第1层结构li1中;
13、minci是指第1层结构li1和第2层结构li2所选取的sst文件按键排序、合并后划分成新的sst文件后写入li2;
14、maxci是指第j层结构lij和第j+1层结构lij+1所选取的sst文件按键排序、合并后划分成新的sst文件后写入lij+1;j>1;
15、所述lsmt监控器用于获取n个日志结构合并树的监控信息并计算分裂指标,令fi为第i个日志结构合并树lsmti的分裂指标,fit为第i个分裂指标的阈值;第i个日志结构合并树lsmti的监控信息包括:lsmti所有sst文件所占磁盘空间大小总和si、磁盘空间大小阈值sit、读写请求次数rwi,以及所有日志结构合并树的读写请求总数rw;
16、所述键值存储方法是按如下步骤进行:
17、步骤1、当前线程利用所述mlsmt结构接收外部的读写数据的请求req,并判断请求req的种类:
18、若请求req是写请求write,则执行步骤2,其中,所述写请求write中的参数包括若干要写入的键值数据<key,value>;
19、若请求req是读请求get,则执行步骤2;其中,所述读请求get中的参数包括若干键数据key;
20、若请求req是扫描请求scan,则执行步骤5;其中,所述扫描请求scan中的参数包括键数据范围(key1,key2);
21、步骤2、后台线程执行日志结构合并树的分裂指标的计算和分裂;
22、步骤3、当前线程对请求req中的键key进行哈希运算得到相应的哈希值,所述哈希值对阈值mod进行取模运算后得到中间值hv,其中,mod表示日志结构合并树数量的阈值;
23、步骤4、当前线程计算用于表示n所需的二进制位数的最小值n,并根据n计算hv的二进制尾部的n位值,再根据n位值计算日志结构合并树的序号i,从而令请求req中的键key属于lsmti;
24、若请求req为写请求write,则执行步骤a1和步骤b1:
25、a1、将写请求write中参数对应的键值数据写入mti,并按照步骤a1.1-a1.5执行;
26、a1.1、判断第i个日志结构合并树lsmti的内存缓冲区mti的大小msizei是否大于阈值mmax,若大于,则执行步骤a1.2;否则,将参数<key本文档来自技高网...
【技术保护点】
1.一种基于多日志结构合并树的键值存储方法,其特征是应用于设置有MLSMT结构的单个存储节点中,所述MLSMT结构包括:Compaction调度器、LSMT信息监控器、N个日志结构合并树{LSMT1,LSMT2,…,LSMTi,…,LSMTN},其中,LSMTi表示第i个日志结构合并树;1≤i≤N;
2.根据权利要求1所述的多日志结构合并树的键值存储方法,其特征是,所述步骤2包括:
3.根据权利要求2所述的多日志结构合并树的键值存储方法,其特征是,所述步骤D2中是按如下步骤查找读请求Get中的键key:
4.根据权利要求3所述的多日志结构合并树的键值存储方法,其特征是,所述步骤A3包括:
5.根据权利要求4所述的多日志结构合并树的键值存储方法,其特征是,所述A1.2中的Compaction调度器是按如下步骤执行FHi操作的调度请求;
6.根据权利要求5所述的多日志结构合并树的键值存储方法,其特征是,所述A1.5中的Compaction调度器是按如下步骤执行Compactioni操作的调度请求;
7.一种电子设
8.一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1-6中任一所述键值存储方法的步骤。
...【技术特征摘要】
1.一种基于多日志结构合并树的键值存储方法,其特征是应用于设置有mlsmt结构的单个存储节点中,所述mlsmt结构包括:compaction调度器、lsmt信息监控器、n个日志结构合并树{lsmt1,lsmt2,…,lsmti,…,lsmtn},其中,lsmti表示第i个日志结构合并树;1≤i≤n;
2.根据权利要求1所述的多日志结构合并树的键值存储方法,其特征是,所述步骤2包括:
3.根据权利要求2所述的多日志结构合并树的键值存储方法,其特征是,所述步骤d2中是按如下步骤查找读请求get中的键key:
4.根据权利要求3所述的多日志结构合并树的键值存储方法,其特征是,所述步骤a3包括:
5.根据权利要求4所...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。