日志归并树键值存储系统及相关方法和相关设备与流程

文档序号:30970212发布日期:2022-08-02 20:32阅读:89来源:国知局
1.本技术的实施例涉及存储
技术领域
:,尤其涉及一种基于混合存储架构的日志归并树键值存储系统及相关方法和相关设备。
背景技术
::2.在信息处理量激增的时代背景下,通过键值存储系统可以应对数据密集型应用的需求。通常,磁盘读写是键值存储系统的性能瓶颈,同时键值存储系统还存在较严重的读放大和写放大的问题。技术实现要素:3.本技术实施例公开了一种基于混合存储架构的日志归并树键值存储系统优化方法及相关设备,能够优化存储系统的读放大问题,提升存储系统读性能。4.本技术第一方面公开了一种日志归并树键值存储系统,基于混合存储架构,应用于电子设备中,混合存储架构包括主机、持久化存储介质和非易失存储介质,主机与非易失存储介质和持久化存储介质连接,其中,持久化存储介质存储多个有序字符串表层,每个有序字符串表层包括多个有序字符串表组,每个有序字符串表组包括多个有序字符串表;日志归并树键值存储系统采用分组压缩机制,并包括与有序字符串表组对应的两级过滤器,两级过滤器包括与有序字符串表组对应的组过滤器和与有序字符串表对应的表过滤器。5.本技术的实施例能够解决因日志归并树的分组压缩策略导致读操作可能需要对多个组内有序字符串表进行无效访问、并造成额外读开销和读放大问题,从而优化存储系统的读放大问题和写放大问题,并通过两级过滤器避免无效读操作。本技术的实施例能够提升存储系统读性能。6.在一些可选的实施方式中,两级过滤器存储于非易失存储介质。7.非易失存储介质同时具备内存和持久化存储介质的优秀存储特性,能够提升存储系统读性能和写性能。将过滤器等元数据信息存储在非易失存储介质上,通过原地更新操作减少写操作,降低写开销。利用高性能、可持久化的非易失存储介质存储过滤器等元数据,通过减少无效持久化存储介质的访问优化存储系统读性能,降低长尾延迟。8.在一些可选的实施方式中,组过滤器包括布隆过滤器或布谷过滤器,表过滤器包括布隆过滤器、商过滤器或布谷过滤器。9.本技术的实施例能够实现组过滤器。10.在一些可选的实施方式中,混合存储架构还包括易失存储介质或内存。11.本技术第二方面公开了一种数据查找方法,基于上述日志归并树键值存储系统,数据查找方法包括:获取待查找数据的目标键;根据两级过滤器从持久化存储介质中查找目标键。12.本技术的实施例能够通过两级过滤器避免无效查找和降低读延迟。13.在一些可选的实施方式中,根据两级过滤器从持久化存储介质中查找目标键包括:从电子设备的内存中查找目标键;若没有从电子设备的内存中查找到目标键,根据两级过滤器从持久化存储介质中查找目标键。14.本技术的实施例能够从电子设备的内存和持久化存储介质中查找目标键。15.在一些可选的实施方式中,在获取待查找数据的目标键之后,数据查找方法还包括:从电子设备的内存中查找目标键;若没有从电子设备的内存中查找到目标键,根据两级过滤器从持久化存储介质中查找目标键。16.本技术的实施例能够从电子设备的内存和持久化存储介质中查找目标键。17.在一些可选的实施方式中,根据两级过滤器从持久化存储介质中查找目标键包括:按照层顺序,对于多个有序字符串表层中的任意一个当前有序字符串表层,根据当前有序字符串表层中的多个有序字符串表组的组键范围,判断当前有序字符串表层中是否存在存储目标键的目标有序字符串表组;若当前有序字符串表层中存在存储目标键的目标有序字符串表组,根据两级过滤器从目标有序字符串表组中查找目标键。18.本技术的实施例能够在根据两级过滤器从当前有序字符串表层中的目标有序字符串表组中查找目标键前,判断当前有序字符串表层中是否存在存储目标键的目标有序字符串表组,提升查找效率。19.在一些可选的实施方式中,若当前有序字符串表层中不存在存储目标键的目标有序字符串表组,从当前有序字符串表层的下一个有序字符串表层中查找目标键。20.本技术的实施例能够以层序号的顺序或随机顺序从当前有序字符串表层的下一个有序字符串表层中查找目标键。21.在一些可选的实施方式中,根据两级过滤器从目标有序字符串表组中查找目标键包括:根据两级过滤器中的组过滤器判断目标有序字符串表组是否具备包括目标键的可能性;若根据两级过滤器中的组过滤器确定目标有序字符串表组具备包括目标键的可能性,根据当前有序字符串表组中的多个有序字符串表的表键范围,判断目标有序字符串表组中是否存在存储目标键的目标有序字符串表;若根据当前有序字符串表组中的多个有序字符串表的表键范围确定目标有序字符串表组中存在存储目标键的目标有序字符串表,根据两级过滤器中的表过滤器判断目标有序字符串表是否具备包括目标键的可能性;若根据两级过滤器中的表过滤器确定目标有序字符串表具备包括目标键的可能性,根据目标键在目标有序字符串表中查找待查找数据。22.本技术的实施例能够实现根据两级过滤器从目标有序字符串表组中查找目标键,可先对目标有序字符串表组中包括目标键的可能性进行判断,若目标有序字符串表组具备包括目标键的可能性,表明目标有序字符串表组有较大概率包括目标键,然后对目标有序字符串表组中的有序字符串表进一步判断,从而实现最终对目标有序字符串表组中是否包括目标键的准确判断。利用两级过滤器,可以避免无效的查找,从而提升目标键查找效率。23.在一些可选的实施方式中,若根据两级过滤器中的组过滤器确定目标有序字符串表组不具备包括目标键的可能性,或根据两级过滤器中的表过滤器确定目标有序字符串表不具备包括目标键的可能性,从当前有序字符串表层的下一个有序字符串表层中查找目标键。24.本技术的实施例能够在当前有序字符串表层不存在目标键的情况下,从当前有序字符串表层的下一个有序字符串表层中查找目标键。完成对全部有序字符串表层的查找。25.在一些可选的实施方式中,根据两级过滤器从持久化存储介质中查找目标键包括:按照层顺序,利用两级过滤器从持久化存储介质中的多个有序字符串表层中查找目标键。26.本技术的实施例能够实现按照层序号的顺序从多个有序字符串表层中查找目标键。从而查找到较新存储的目标键。27.在一些可选的实施方式中,对于多个有序字符串表层中的任意一个当前有序字符串表层,根据两级过滤器从当前有序字符串表层中查找目标键包括:根据两级过滤器判断当前有序字符串表层中是否存在目标键;若根据两级过滤器确定当前有序字符串表层中存在目标键,根据目标键查找待查找数据;若根据两级过滤器确定当前有序字符串表层中不存在目标键,从当前有序字符串表层的下一个有序字符串表层中查找目标键。28.本技术的实施例能够实现从当前有序字符串表层中查找目标键。29.在一些可选的实施方式中,根据两级过滤器判断当前有序字符串表层中是否存在目标键包括:根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性;若当前有序字符串表层中不存在目标有序字符串表组,确定当前有序字符串表层中不存在目标键;若当前有序字符串表层中存在目标有序字符串表组,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表具备包括目标键的可能性;若目标有序字符串表组中不存在目标有序字符串表,确定当前有序字符串表层中不存在目标键;若目标有序字符串表组中存在目标有序字符串表,判断在目标有序字符串表中是否存在目标键;若在目标有序字符串表中存在目标键,确定当前有序字符串表层中存在目标键。30.本技术的实施例能够实现基于当前有序字符串表层中的有序字符串表组根据两级过滤器判断当前有序字符串表层中是否存在目标键。31.在一些可选的实施方式中,根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性包括:获取当前有序字符串表层中的多个有序字符串表组的组键范围;从当前有序字符串表层中的多个有序字符串表组中确定组键范围包括目标键的一个或多个有序字符串表组,得到确定的有序字符串表组;通过确定的有序字符串表组的组过滤器判断确定的有序字符串表组是否具备包括目标键的可能性;若确定的有序字符串表组具备包括目标键的可能性,确定当前有序字符串表层中存在具备包括目标键的可能性的有序字符串表组,将确定的有序字符串表组作为目标有序字符串表组;若确定的有序字符串表组不具备包括目标键的可能性,确定当前有序字符串表层中不存在具备包括目标键的可能性的目标有序字符串表组。32.本技术的实施例能够实现基于组键范围根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在具备目标键存在可能性的目标有序字符串表组。33.在一些可选的实施方式中,根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性包括:逐个获取当前有序字符串表层中的有序字符串表组,通过有序字符串表组的组过滤器判断有序字符串表组是否具备包括目标键的可能性;若当前有序字符串表层中的任意一个有序字符串表组具备包括目标键的可能性,确定当前有序字符串表层中存在具备包括目标键的可能性的目标有序字符串表组;若当前有序字符串表层中的全部有序字符串表组不具备包括目标键的可能性,确定当前有序字符串表层中不存在具备包括目标键的可能性的目标有序字符串表组。34.本技术的实施例能够实现逐个地获取当前有序字符串表层中的每个有序字符串表组,根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在具备目标键存在可能性的目标有序字符串表组。可选地,可以顺序获取当前有序字符串表层中的有序字符串表组,或随机遍历当前有序字符串表层中的有序字符串表组。35.在一些可选的实施方式中,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表具备包括目标键的可能性包括:获取目标有序字符串表组中的多个有序字符串表的表键范围;从目标有序字符串表组中的多个有序字符串表中确定表键范围包括目标键的一个或多个有序字符串表,得到确定的有序字符串表;通过确定的有序字符串表的表过滤器判断确定的有序字符串表是否具备包括目标键的可能性;若确定的有序字符串表具备包括目标键的可能性,确定目标有序字符串表组中存在具备目标键存在可能性的有序字符串表,将确定的有序字符串表作为目标有序字符串表;若确定的有序字符串表不具备包括目标键的可能性,确定目标有序字符串表组中不存在具备包括目标键的可能性的目标有序字符串表。36.本技术的实施例能够实现基于表键范围根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在具备包括目标键的可能性的目标有序字符串表。37.在一些可选的实施方式中,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表组具备包括目标键的可能性包括:逐个获取目标有序字符串表组中的有序字符串表,通过有序字符串表的表过滤器判断有序字符串表是否具备包括目标键的可能性;若目标有序字符串表组中的任意一个有序字符串表具备包括目标键的可能性,确定目标有序字符串表组中存在具备包括目标键的可能性的目标有序字符串表;若目标有序字符串表组中的全部有序字符串表不具备包括目标键的可能性,确定目标有序字符串表组中不存在具备包括目标键的可能性的目标有序字符串表。38.本技术的实施例能够实现逐个获取目标有序字符串表组中的有序字符串表,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在具备包括目标键的可能性的目标有序字符串表。可选地,可以从目标有序字符串表组中获取最新生成的有序字符串表,或随机遍历目标有序字符串表组中的有序字符串表。39.本技术第三方面公开了一种过滤器更新方法,基于上述日志归并树键值存储系统,过滤器更新方法,包括:将多个有序字符串表层中的任意一个有序字符串表层确定为当前有序字符串表层,其中,多个有序字符串表层按预设顺序进行存储;获取当前有序字符串表层中的有序字符串表数量和预设表上限数量;若当前有序字符串表层中的有序字符串表数量大于或等于预设表上限数量,从当前有序字符串表层中选择有序字符串表组;根据选择的有序字符串表组生成待合并有序字符串表;将待合并有序字符串表合并至当前有序字符串表层的下一个有序字符串表层,得到合并后的有序字符串表层;根据合并后的有序字符串表层更新当前有序字符串表层的下一个有序字符串表层的两级过滤器。40.在压缩操作过程中,日志归并树分层结构导致存储系统需要更新持久化存储介质的元数据块和过滤器块,从而产生额外写开销和写放大问题,本技术的实施例能够将过滤器等元数据存储在非易失存储介质上,通过原地更新减少写操作、降低写开销。41.在一些可选的实施方式中,从当前有序字符串表层中选择有序字符串表组包括:根据有序字符串表的数量和生成时间从当前有序字符串表层中选择有序字符串表组。42.本技术的实施例能够实现有序字符串表的选择。43.在一些可选的实施方式中,根据选择的有序字符串表组生成待合并有序字符串表包括:对选择的有序字符串表组中的有序字符串表进行合并排序,得到第一有序字符串表;根据当前有序字符串表层的下一个有序字符串表层的键范围将第一有序字符串表划分为至少一个第二有序字符串表,得到包括至少一个第二有序字符串表的待合并有序字符串表。44.本技术的实施例能够实现根据选择的有序字符串表组生成待合并有序字符串表。45.在一些可选的实施方式中,根据当前有序字符串表层的下一个有序字符串表层的键范围将第一有序字符串表划分为至少一个第二有序字符串表包括:若第一有序字符串表的表键范围包含于当前有序字符串表层的下一个有序字符串表层的任意一个组键范围,不对第一有序字符串表进行划分;若第一有序字符串表的表键范围包含于当前有序字符串表层的下一个有序字符串表层的任意多个组键范围,按照任意多个组键范围对第一有序字符串表进行划分;若第一有序字符串表的表键范围不包含于当前有序字符串表层的下一个有序字符串表层的任意一个组键范围,对第一有序字符串表进行均匀划分。46.本技术的实施例能够实现根据当前有序字符串表层的下一个有序字符串表层的键范围将第一有序字符串表划分为至少一个第二有序字符串表。47.在一些可选的实施方式中,将待合并有序字符串表合并至当前有序字符串表层的下一个有序字符串表层包括:在当前有序字符串表层的下一个有序字符串表层中,通过多线程将待合并有序字符串表中的每个第二有序字符串表,合并至组键范围包含第二有序字符串表的表键范围的有序字符串表组。48.本技术的实施例能够实现将待合并有序字符串表合并至当前有序字符串表层的下一个有序字符串表层。49.在一些可选的实施方式中,根据合并后的有序字符串表层更新当前有序字符串表层的下一个有序字符串表层的两级过滤器包括:根据合并后的有序字符串表层中生成的有序字符串表组生成对应的组元数据,在非易失存储介质创建对应的组过滤器;根据合并后的有序字符串表层中修改的有序字符串表组,在非易失存储介质更新对应的组过滤器。50.本技术的实施例能够根据合并后的有序字符串表层更新当前有序字符串表层的下一个有序字符串表层的两级过滤器。通过原地更新减少写操作、降低写开销。51.本技术第四方面公开了一种非易失存储介质管理方法,基于上述日志归并树键值存储系统,非易失存储介质管理方法,包括:接收对表过滤器或组过滤器的创建请求;将创建请求转换为对非易失存储介质的空间分配请求;获取非易失存储介质的空闲链表的锁,空闲链表包括非易失存储介质的空闲页面的页面编号;从空闲链表中摘取多个页面编号;根据多个页面编号在非易失存储介质创建存储管理对象;返回存储管理对象;释放空闲链表的锁。52.本技术的实施例能够解决非易失存储介质的空间分配问题。对非易失存储介质的存储空间进行分页管理,封装了底层分页,高效地进行非易失存储介质的内存分配。可以基于多线程实现非易失存储介质的内存分配。53.本技术第六方面公开了一种非易失存储介质管理方法,基于上述日志归并树键值存储系统,非易失存储介质管理方法,包括:响应于表过滤器或组过滤器的数据失效,触发非易失存储介质存储的空间的回收请求;将回收请求加入回收队列,将回收请求通知调度线程;通过调度线程根据回收队列中的回收请求创建多个回收线程,以通过多个回收线程回收失效页面;根据失效页面更新空闲链表,空闲链表包括非易失存储介质的空闲页面的页面编号;等待回收线程结束。54.本技术的实施例能够基于多线程进行页面回收。实现轻量级非易失存储介质空间管理。55.在一些可选的实施方式中,根据失效页面更新空闲链表包括:获取空闲链表的表头页面编号;将表头页面编号赋值给失效页面的下一页面编号;将失效页面的页面编号重新确定为表头页面编号。56.本技术的实施例能够实现根据失效页面更新空闲链表。57.本技术第七方面公开了一种计算机设备,包括处理器和存储器;存储器,用于存储指令;处理器,用于调用存储器中的指令,使得计算机设备执行日志归并树键值存储系统的相关方法。58.本技术第八方面公开了一种计算机可读存储介质,计算机可读存储介质存储有至少一个指令,至少一个指令被处理器执行时实现日志归并树键值存储系统的相关方法。59.第七方面至第八方面所带来的技术效果可参见上述方法部分各涉及的方法相关的描述,此处不再赘述。附图说明60.图1是lsm-tree组织结构。61.图2是rocksdb结构。62.图3是键值存储系统的压缩机制。63.图4是slm-db。64.图5是本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的架构。65.图6是本技术实施例提供的两级过滤器的结构示意图。66.图7是本技术实施例提供的两级过滤器的访问示意图。67.图8是本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的数据查找方法流程图。68.图9是本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的数据查找示意图。69.图10是本技术实施例提供的过滤器更新流程图。70.图11是本技术实施例提供的过滤器更新示意图。71.图12是本技术实施例提供的互斥的申请方法流程图。72.图13是本技术实施例提供的并发的回收方法流程图。73.图14是本技术实施例提供的非易失存储介质管理方法的数据结构逻辑关系图。74.图15是本技术实施例提供的过滤器创建示意图。75.图16是本技术实施例提供的计算机设备的示意图。具体实施方式76.为了便于理解,示例性的给出了部分与本技术实施例相关概念的说明以供参考。77.需要说明的是,本技术实施例中“至少一个”是指一个或者多个,“多个”是指两个或多于两个。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。本技术的说明书和权利要求书及附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不是用于描述特定的顺序或先后次序。78.键值(keyvalue,kv)存储系统可以基于日志归并树(logstructuredmergetree,lsm-tree)来实现。基于动态随机存取存储器(dynamicrandomaccessmemory,dram)的键值存储系统通常存在磁盘读写的性能瓶颈,同时lsm-tree存在较严重的读放大和写放大问题,其中,读或写放大表明存储系统实际读取或写入的数据量与用户期望写入数据量之比。读放大会影响键值存储系统的读性能,写放大会因为反复写入导致磨损而降低键值存储系统的寿命。非易失存储介质(non-volatilememory,nvm)具备内存(memory)和外存的优秀存储特性。本技术的实施例中的键值存储系统,基于持久化存储介质和nvm的混合存储架构以及日志归并树,能够提升数据读写性能。其中,持久化存储介质可以是固态驱动器(solidstatedrive,ssd),也称固态硬盘,具有容量大和稳定性好的特点。79.为了便于理解,以下分别对lsm-tree、lsm-tree键值存储系统架构、键值存储系统的压缩机制、非易失存储介质进行简要说明。80.如图1所示,为lsm-tree组织结构。lsm-tree将对持久化存储介质的随机写转化为顺序写,从而提高了写速度,其中,持久化存储介质可以是磁盘(disk)。lsm-tree中的索引树结构包括一颗小树(c0)和一颗大树(c1、c2...ck),小树存储于内存,大树可存储至持久化存储介质,两棵树共同维护一个有序的键(key)空间。接收到的写入操作会首先操作内存中的小树c0,随着内存中的小树不断变大,当小树的大小达到预设条件时,会触发与持久化存储介质中大树(c1、c2...ck)的归并操作(mergesort),而归并操作产生的写操作是顺序写。81.lsm-tree键值存储系统架构可以包括rocksdb结构或leveldb结构等。如图2所示,为rocksdb结构。lsm-tree可以包括内存结构(memtable、immutablememtable)和盘上结构(例如,有序字符串表(sortedstringtable,sstable或sst))。内存结构的作用与图1中lsm-tree中的c0的作用相类似,盘上结构的作用与图1中lsm-tree的大树的作用相类似。其中,memtable是一个在内存中进行数据组织与维护的结构;immutablememtable是一个不可修改的memtable,也简称为immutable。在将数据写入内存缓冲前,进行写前日志,也称为预写式日志(writeaheadlogging,wal)。flush是指将memtable的数据导入到sstable中,变成持久化存储。82.rocksdb结构写操作数据流动路径为:“memtable-》immutablememtable-》l0sstables-》l1sstables-》...lnsstables”。因此,层数更小的sstable中拥有较新的数据,内存中拥有最新的数据。83.rocksdb结构读操作流程:读操作依次访问内存的memtable、immutablememtable之后,通过内存中维护的sstableinfocache定位目标sstable,同时使用目标sstable对应的sstable过滤器来判断目标sstable中是否存在目标数据的key,若目标sstable中存在目标数据的key,从目标sstable中获取目标数据。可以依次在磁盘上的l0、l1直到ln层中获取目标数据;若查找至最高层的ln层,仍然没有命中目标数据的key,则表示查找的目标数据不存在于rocksdb结构中。lsm-tree与键值存储系统的查找机制可以实现,若rocksdb结构中存储有多个目标数据,读过程中先读取到的目标数据的key是时序上最新的目标数据的key。其中,sstable过滤器(sstablefilter)是一种用于判定某个对象是否存在于sstable中的哈希结构,例如布隆过滤器(bloomfilter)、商过滤器(quotientfilters)等。84.如图3所示,为键值存储系统的压缩机制。基于lsm-tree的键值存储系统(如leveldb、rocksdb),需要定期将低层次的sstable合并到更高层次的sstable中,不同层次中sstable的组织形式和合并方式被称为压缩机制(compaction)。键值存储系统的压缩机制可以包括分级压缩机制(levelcompaction)、分层压缩机制(tiercompaction)、分组压缩机制(groupcompaction)。其中,分级压缩机制是leveldb、rocksdb等基于lsm-tree的键值存储系统的默认压缩机制,是可以将每层文件按照key值进行划分的压缩机制。分层压缩机制是将sstable按照文件大小进行管理和合并的压缩机制。分组压缩机制是在分层压缩机制的基础上,将每一层sstable按照组(group)进行组织。85.压缩机制,在基于lsm-tree的键值存储系统中,若li层的sstable的数据量等于或大于上限,将li层的一个或多个sstable与li+1层的sstable进行合并,删除原li+1层中的sstable,将合并生成的sstable插入li+1层。86.如图3a所示,为键值存储系统的分级压缩机制。在分级压缩机制中,每层的sstable按顺序排列,且每两个sstable的表键范围互不相交。若li层的sstable的数据量等于或大于上限,选择li层的一个或多个sstable与li+1层的表键范围重叠的sstable进行合并,删除原li+1层中的sstable,将合并生成的sstable插入li+1层。若li+1层的sstable的数据量也等于或大于上限,则迭代进行li+1层与li+2层的合并。如图3a所示,横线上方表示内存空间,横线下方表示持久化存储介质。在内存中写入13时,将内存中的7和13写入l0层,将7和13写入l0层后,l0层的sstable的数据量等于上限,将l0层中的1、3、7、10、13、19与l1层的2、4、8、12、15、18进行合并,删除原l1层中的sstable,将合并生成的sstable插入l1层。87.分级压缩机制维护的有序性会造成严重的尾延问题,阻塞前台的请求响应,同时造成严重的写放大。88.如图3b所示,为键值存储系统的分层压缩机制。分层合并机制将sstable按照文件大小分布在不同的层次中。每层的sstable可以不按顺序排列,同一层的每两个sstable之间可以存在交叉的表键范围。若li层的sstable的数据量等于或大于上限,选择li层的一个或多个sstable与li+1层的表键范围重叠的sstable在内存中进行合并,删除原li+1层中的sstable,将合并生成的sstable插入li+1层。若li+1层的sstable的数据量也等于或大于上限,则迭代进行li+1层的合并。89.分层压缩机制的键值存储系统中的sstable处于无序状态,sstable间的表键范围也处于无序状态。导致分层压缩机制的键值存储系统的数据读取速度低于分级压缩机制的键值存储系统的数据读取速度。虽然单个sstable中的键值处于有序状态,但是基于日志归并树的存储系统的数据读取速度低于基于b+树的存储系统的数据读取速度。特别地,在大数据情境下,数据量激增,不能完全放弃sstable间的有序性。90.如图3c所示,为键值存储系统的分组压缩机制。分组压缩机制在分层压缩机制的基础上,将每层sstable按照表键范围进行组划分,同一组内的sstable之间可以存在交叉的表键范围。通过维持组间有序,可提升读性能。如图3c所示,在内存中写入13时,将内存中的7和13写入l0层,将7和13写入l0层后,l0层的sstable的数据量等于上限(sstable需要写入组键范围包括sstable的表键的sstable组中,即7和13写入组键范围为1-100的sstable组中,不能写入组键范围为101-200的sstable组中),将l0层中的1、3、55、69、7、13与l1层中的sstable进行合并(图3c中l1层无sstable),删除原l1层中的sstable,将合并生成的sstable插入l1层。91.非易失存储介质可以包括相变存储器(phasechangememory,pcm)、电阻式/阻变存储器(resistiveram,reram)、忆阻器(memristor)等。非易失存储介质拥有内存和持久化存储介质的优秀特性,具备良好的存储特性。非易失存储介质具备与dram接近的存储延迟,同时提供和dram一样的访存单位(即缓存行),可以按字节为单位进行寻址,使主机(host)可以像访问dram一样直接通过内存总线(memorybus)访问非易失存储介质,避免通过硬件块设备接口进行访问,从而避免通过硬件块设备接口对应的访问墙。同时非易失存储介质还具备持久化存储介质的非易失性,切断电源后,非易失存储介质保存的数据不会丢失。非易失存储介质的存储密度大于dram,非易失存储介质的容量可以达到tb级别,是补充dram和用以构建大容量存储系统的存储介质。92.以下是提升日志归并树键值存储系统的性能的一种实现方式。93.通常,通过slm-db(single-levelmergedb)利用nvm来提升日志归并树键值存储系统的性能,使用nvm存储memtable、immutable来提高一致性,同时减少一致性开销。slm-db将磁盘上的多级数据结构转为单级数据结构,并在nvm中引入b+-tree作为单级数据结构(singlelevel)的索引,建立了对磁盘上所有key和value位置的b+-tree索引,查询数据时利用nvm上的索引减少对磁盘的访问。如图4所示,为slm-db。其中,persistentmemory表示持久性内存,compactionlog表示压缩日志。94.在nvm上存储对所有key的b+-tree索引,需要大量的nvm空间,并且在nvm的索引中会存储变长的key字段,需要复杂的nvm管理机制。slm-db维护的nvm上的b+-tree索引带来过高的nvm成本,同时由于nvm管理机制的复杂性,nvm的空间利用率低。95.为了更好地理解本技术实施例公开的基于混合存储架构的日志归并树键值存储系统、优化方法及相关设备,下面对本技术的实施例解决的技术问题进行说明。96.对于如何解决日志归并树键值存储系统的读写放大问题,基于lsm-tree的键值存储系统通过内存中的结构将写请求转换成对持久化存储介质的顺序写,数据按照冷热程度分层分布在持久化存储介质的不同层次上。但是相应的引入了维护的开销,每次压缩操作将多次更新持久化存储介质上的数据索引和过滤器,从而增加了写放大。同时读取数据时需要访问不同层次的数据,需要读取key对应的数据所在的数据块,还需要读取key对应的索引块和过滤器块,增加了额外的读开销。97.如何解决nvm的空间管理问题。使用nvm对键值存储系统的读写进行加速,但是现有nvm空间管理方法存在性能不足的问题,与基于lsm-tree的键值存储系统对数据持久化的需求不匹配。98.为了更好地理解本技术实施例公开的基于混合存储架构的日志归并树键值存储系统、优化方法及相关设备,下面首先对本技术的基于混合存储架构的日志归并树键值存储系统的架构进行描述。下文为了便于描述,将“基于混合存储架构的日志归并树键值存储系统”简称为“日志归并树键值存储系统”。99.如图5所示,为本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的架构。100.如图5所示的基于混合存储架构的日志归并树键值存储系统的硬件架构,混合存储架构包括主机、持久化存储介质和非易失存储介质。主机与非易失存储介质连接,主机与持久化存储介质连接。其中,主机可以通过内存总线与非易失存储介质连接,主机可以通过pcie(peripheralcomponentinterconnectexpress)与持久化存储介质连接。其中,非易失存储介质可以是基于3dxpoint的optane盘,主机的中央处理单元(centralprocessingunit,cpu)通过内存总线和x86指令集的clfush质量、mefence指令进行数据访问和数据持久化。101.混合存储架构还包括易失存储介质(内存),主机与易失存储介质(内存)连接。102.如图5所示的基于混合存储架构的日志归并树键值存储系统的软件架构,在持久化存储系统(如单机文件系统、分布式文件系统、提供数据持久化方法的存储系统等)的基础上,日志归并树键值存储系统(key-valuestore)通过键值(kv)的方式存取持久存储系统中的kv数据(即sstable),应用程序(application)通过kv接口访问日志归并树键值存储系统,调用需要的存储服务,日志归并树键值存储系统通过nvm轻量化空间管理机制使用nvm。其中,持久化存储系统运行于持久化存储介质(storage)。103.在本技术的一个实施例中,基于混合存储架构的日志归并树键值存储系统应用于电子设备中,混合存储架构包括主机、持久化存储介质和非易失存储介质,主机与非易失存储介质连接,主机与持久化存储介质连接;日志归并树键值存储系统的压缩机制可以包括分组压缩机制;日志归并树键值存储系统包括两级过滤器,其中,持久化存储介质存储多个有序字符串表层,每个有序字符串表层包括多个有序字符串表组,每个有序字符串表组包括多个有序字符串表,每个有序字符串表组对应的两级过滤器包括所述有序字符串表组对应的组过滤器和所述有序字符串表组中的有序字符串表对应的表过滤器。104.在本技术的一个实施例中,两级过滤器存储于电子设备的内存、非易失存储介质和/或持久化存储介质。其中,两级过滤器可以存储于非易失存储介质,可选地存储于电子设备的持久化存储介质。105.在本技术的一个实施例中,组过滤器(groupfilter)可以包括布隆过滤器或布谷过滤器,表过滤器可以包括布隆过滤器、商过滤器或布谷过滤器。持久化存储介质中的每个有序字符串表组对应一个组过滤器,组过滤器是一种用于判定某个对象是否存在于对应的有序字符串表组中的哈希结构。106.如图6所示,为本技术实施例提供的两级过滤器的结构示意图。如图6所示,nvm中存储两个两级过滤器,分别为:有序字符串表组1(group1)对应的一个两级过滤器,有序字符串表组2(group2)对应的另一个两级过滤器。虚线代表选择性存储。storage中存储的两个过滤器可以进行选择性存储,即storage可以存储虚线表示的两个两级过滤器,storage也可以不存储虚线表示的两个两级过滤器。一个有序字符串表组对应的两级过滤器包括与该有序字符串表组对应的组元数据、与该有序字符串表组中的有序字符串表对应的表元数据(sstable元数据)。可选地,元数据可以包括键范围,或元数据可以包括键范围和过滤器。例如,有序字符串表组的元数据为组元数据,有序字符串表的元数据为表元数据,一个有序字符串表组的组元数据可以包括该有序字符串表组的组键范围,一个有序字符串表的表元数据可以包括该有序字符串表的表键范围。再如,一个有序字符串表组的组元数据可以包括该有序字符串表组的组键范围和组过滤器,一个有序字符串表的表元数据可以包括该有序字符串表的表键范围和表过滤器。107.分组压缩机制虽然保留了部分sstable的有序性,但是在判断待查找数据的目标键是否存在于有序字符串表组中时,需要访问有序字符串表组中的全部sstable。为了减少分组压缩机制的读放大,本技术的实施例通过在nvm上建立有序字符串表组的组过滤器,从而构建包括组过滤器和表过滤器的两级过滤器结构,通过组过滤器来减少对有序字符串表组的无效读取,通过将两级过滤器存储在nvm中,减少读操作对持久化存储介质的访问。108.在本技术的一个实施例中,基于混合存储架构的日志归并树键值存储系统为每个有序字符串表创建一个与表内全部键对应的过滤器(即表过滤器),为每个有序字符串表组创建一个与组内全部键对应的过滤器(即组过滤器);由一个有序字符串表组的组过滤器和该有序字符串表组中的有序字符串表对应的表过滤器构成一个两级过滤器,其中一个两级过滤器可以包括一个或多个表过滤器。109.可理解地,有序字符串表组的组过滤器和有序字符串表组中的有序字符串表对应的表过滤器构成两级过滤器结构。110.如图7所示,为本技术实施例提供的两级过滤器的访问示意图。如图7所示,两级过滤器中的组过滤器为4插槽的布谷过滤器,两级过滤器中的表过滤器为以3个哈希函数定位的布隆过滤器。布谷过滤器与布隆过滤器仅为举例以说明对两级过滤器的访问,实际应用中不局限于此。111.本实施例只描述两级过滤器的访问流程,不考虑有序字符串表组中的sstable的选择过程。已知待查找数据的目标键45在组过滤器将命中索引2第2个插槽,并在表过滤器中访问到索引1、2、16的位置。查找目标键45的具体过程可包括:112.通过组过滤器给定的第一个哈希函数计算出一个哈希值2,通过组过滤器给定的第二个哈希函数计算出另一个哈希值3,遍历组过滤器索引2的4个插槽,通过插槽内的哈希值判断第二个插槽为对应项,因此判断目标键45可能在该有序字符串表组中(即该有序字符串表组具备目标键45存在的可能性)。如果遍历结束没有任何插槽为对应项,则表明目标键45不在该有序字符串表组中,从而省去对有序字符串表组中sstable文件的查找过程,减少了无效读操作。113.通过sstable给定的三个哈希函数分别算出三个哈希值为1、2、16,访问对应索引位置,其中索引2对应值为0,因此判断目标键45不在该有序字符串表组中。若多个索引中,有任意一个索引对应的值为0,则可以确定目标键不存在于有序字符串表组中。114.本技术实施例提供一种基于混合存储架构的日志归并树键值存储系统的数据查找方法,应用于电子设备中,具体地,数据查找方法包括:115.101,获取待查找数据的目标键。116.待查找数据可以是键值数据,包括目标键和目标键对应的值。117.102,从电子设备的内存中查找目标键。118.日志归并树键值存储系统可以采用blockcache、tablecache等缓存机制。119.可以先从memtable、immutbalememtable等内存缓存查找目标键。120.103,若没有从电子设备的内存中查找到目标键,根据两级过滤器从持久化存储介质中查找目标键。121.持久化存储介质可以包括ssd,若没有从内存中查找到目标键,根据两级过滤器从ssd中查找目标键。进一步地,可以响应于查询请求,返回查找到的目标键或查找结果。122.(一)在本技术的一个实施例中,根据两级过滤器从持久化存储介质中查找目标键包括:按照层顺序,对于多个有序字符串表层中的任意一个当前有序字符串表层,根据当前有序字符串表层中的多个有序字符串表组的组键范围,判断当前有序字符串表层中是否存在存储目标键的目标有序字符串表组;若当前有序字符串表层中存在存储目标键的目标有序字符串表组,根据两级过滤器从目标有序字符串表组中查找目标键。123.其中,层顺序可以包括层序号的顺序等。例如,可以按照从日志归并树的第0层到第n层的顺序进行目标键查找。在对当前有序字符串表层进行查找目标键前,可以采用查找方法根据当前有序字符串表层中的多个有序字符串表组的组键范围判断当前有序字符串表层中是否存在存储目标键的目标有序字符串表组。查找方法可以包括二分查找方法或顺序查找方法等。124.在本技术的一个实施例中,若当前有序字符串表层中不存在存储目标键的目标有序字符串表组,从当前有序字符串表层的下一个有序字符串表层中查找目标键。125.在本技术的一个实施例中,根据两级过滤器从目标有序字符串表组中查找目标键包括:根据两级过滤器中的组过滤器判断目标有序字符串表组是否具备包括目标键的可能性(即判断目标有序字符串表组是否可能存储目标键);若根据两级过滤器中的组过滤器确定目标有序字符串表组具备包括目标键的可能性(即确定目标有序字符串表组可能存储目标键),根据当前有序字符串表组中的多个有序字符串表的表键范围,(基于查找方法)判断目标有序字符串表组中是否存在存储目标键的目标有序字符串表;若根据当前有序字符串表组中的多个有序字符串表的表键范围确定目标有序字符串表组中存在存储目标键的目标有序字符串表,根据两级过滤器中的表过滤器判断目标有序字符串表是否具备包括目标键的可能性(即判断目标有序字符串表是否可能存储目标键);若根据两级过滤器中的表过滤器确定目标有序字符串表具备包括目标键的可能性(即确定目标有序字符串表可能存储目标键),根据目标键在目标有序字符串表中查找待查找数据。126.其中,若根据组过滤器判断目标有序字符串表组可能存储目标键,则目标有序字符串表组真实地存储了目标键或没有存储目标键;若根据组过滤器判断目标有序字符串表组不可能存储目标键,则目标有序字符串表组真实地没有存储目标键。127.本技术的实施例能够实现根据两级过滤器从目标有序字符串表组中查找目标键,可先对目标有序字符串表组中包括目标键的可能性进行判断,若目标有序字符串表组具备包括目标键的可能性,表明目标有序字符串表组有较大概率包括目标键,然后对目标有序字符串表组中的有序字符串表进一步判断,从而实现最终对目标有序字符串表组中是否包括目标键的准确判断。利用两级过滤器,可以避免无效的查找,从而提升目标键查找效率。128.在本技术的一个实施例中,若根据两级过滤器中的组过滤器确定目标有序字符串表组不具备包括目标键的可能性,或根据两级过滤器中的表过滤器确定目标有序字符串表不具备包括目标键的可能性,从当前有序字符串表层的下一个有序字符串表层中查找目标键。129.(二)在本技术的一个实施例中,按照层序号的顺序根据两级过滤器从持久化存储介质中的多个有序字符串表层中查找目标键。例如,可以按照从日志归并树的第0层到第n层的顺序进行目标键查找。130.在本技术的一个实施例中,对于多个有序字符串表层中的任意一个当前有序字符串表层,根据两级过滤器从当前有序字符串表层中查找目标键。131.具体地,根据两级过滤器判断当前有序字符串表层中是否存在目标键;若根据两级过滤器确定当前有序字符串表层中存在目标键,根据目标键查找待查找数据;若根据两级过滤器确定当前有序字符串表层中不存在目标键,从当前有序字符串表层的下一个有序字符串表层中查找目标键。132.在本技术的一个实施例中,根据两级过滤器判断当前有序字符串表层中是否存在目标键可以包括:根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性(即目标有序字符串表组中可能存储了目标键)。若当前有序字符串表层中不存在目标有序字符串表组,确定当前有序字符串表层中不存在目标键。若当前有序字符串表层中存在目标有序字符串表组,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表具备包括目标键的可能性;若目标有序字符串表组中不存在目标有序字符串表,确定当前有序字符串表层中不存在目标键。若目标有序字符串表组中存在目标有序字符串表,判断在目标有序字符串表中是否存在目标键;若在目标有序字符串表中存在目标键,确定当前有序字符串表层中存在目标键。133.可选地,根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性包括:获取当前有序字符串表层中的多个有序字符串表组的组键范围;从当前有序字符串表层中的多个有序字符串表组中确定组键范围包括目标键的一个或多个有序字符串表组,得到确定的有序字符串表组;通过确定的有序字符串表组的组过滤器判断确定的有序字符串表组是否具备包括目标键的可能性;若确定的有序字符串表组具备包括目标键的可能性(即有序字符串表组中可能存储目标键),确定当前有序字符串表层中存在目标有序字符串表组,将确定的有序字符串表组作为目标有序字符串表组;若确定的有序字符串表组不具备包括目标键的可能性(即有序字符串表组中不可能存储目标键),确定当前有序字符串表层中不存在具备包括目标键的可能性的目标有序字符串表组。134.具体地,可以基于二分查找法从当前有序字符串表层中的多个有序字符串表组中确定组键范围包括目标键的一个或多个有序字符串表组。其中,有序字符串表组的组键范围包括有序字符串表组中的最小键和最大键,有序字符串表组间的组键范围不重叠,从而可以基于二分查找法找到可能包括目标键的一个或多个有序字符串表组。135.可理解地,在查找过程中,对于当前有序字符串表层中的当前有序字符串表组,可以根据当前有序字符串表组的过滤器判断目标键是否可能存在于当前有序字符串表组中;若判断不可能存在,可以跳过对当前有序字符串表组的查找,进行后续查找;若判断可能存在,为确保目标键真实存在于当前有序字符串表组中,需要进一步通过当前有序字符串表组中的有序字符串表的表过滤器作出进一步判断,从而降低误判率,减小持久化存储介质的访问次数,减小因压缩方式导致的读性能下降。136.可选地,根据两级过滤器中的组过滤器判断当前有序字符串表层中是否存在目标有序字符串表组,目标有序字符串表组具备包括目标键的可能性包括:逐个获取当前有序字符串表层中的有序字符串表组,通过有序字符串表组的组过滤器判断有序字符串表组是否具备包括目标键的可能性;若当前有序字符串表层中的任意一个有序字符串表组具备包括目标键的可能性,确定当前有序字符串表层中存在具备包括目标键的可能性的有序字符串表组,并将具备包括目标键的可能性的有序字符串表组作为目标有序字符串表组;若当前有序字符串表层中的全部有序字符串表组不具备包括目标键的可能性,确定当前有序字符串表层中不存在具备包括目标键的可能性的目标有序字符串表组。137.可选地,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表具备包括目标键的可能性包括:获取目标有序字符串表组中的多个有序字符串表的表键范围;从目标有序字符串表组中的多个有序字符串表中确定表键范围包括目标键的一个或多个有序字符串表,得到确定的有序字符串表;通过确定的有序字符串表的表过滤器判断确定的有序字符串表是否具备包括目标键的可能性(即通过确定的有序字符串表的表过滤器判断确定的有序字符串表是否可能存在目标键);若确定的有序字符串表具备包括目标键的可能性(即确定的有序字符串表可能存在目标键),确定目标有序字符串表组中存在具备包括目标键的可能性的有序字符串表,并将确定的有序字符串表作为目标有序字符串表;若确定的有序字符串表不具备包括目标键的可能性(即确定的有序字符串表不可能存在目标键),确定目标有序字符串表组中不存在具备包括目标键的可能性的目标有序字符串表。138.具体地,可以根据确定的有序字符串表的时间顺序通过确定的有序字符串表的表过滤器判断确定的有序字符串表是否可能存在目标键。例如,先判断表1是否可能存在目标键,后判断表2是否可能存在目标键,其中,表1的生成时间晚于表2的生成时间。139.可选地,根据两级过滤器中的表过滤器判断目标有序字符串表组中是否存在目标有序字符串表,目标有序字符串表具备包括目标键的可能性包括:逐个获取目标有序字符串表组中的有序字符串表,通过有序字符串表的表过滤器判断有序字符串表是否具备包括目标键的可能性;若目标有序字符串表组中的任意一个有序字符串表具备包括目标键的可能性,确定目标有序字符串表组中存在具备包括目标键的可能性的目标有序字符串表;若目标有序字符串表组中的全部有序字符串表不具备包括目标键的可能性,确定目标有序字符串表组中不存在具备包括目标键的可能性的目标有序字符串表。140.本技术实施例提供另一种基于混合存储架构的日志归并树键值存储系统的数据查找方法,应用于电子设备中,具体地,数据查找方法包括:获取待查找数据的目标键;根据两级过滤器从持久化存储介质中查找目标键。141.如图8所示,为本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的数据查找方法流程图。电子设备在判断在内存缓存中是否查找到目标键;若在内存缓存中查找到目标键,返回查找到的目标键对应的目标键值对;若在内存缓存中没有查找到目标键,初始化当前有序字符串表层的层次为0;在当前有序字符串表层内,采用二分查找法查找包括目标键的有序字符串表组;通过nvm中的组过滤器判断查找到的有序字符串表组是否包含目标键;若通过nvm中的组过滤器判断查找到的有序字符串表组不包含目标键,当前有序字符串表层的层次加1;判断当前有序字符串表层的层次是否大于或等于预设的最高层次;若当前有序字符串表层的层次大于或等于预设的最高层次,返回不存在目标键的查找结果;若当前有序字符串表层的层次小于预设的最高层次,流程返回至,在当前有序字符串表层的下一层内,采用二分查找法查找包括目标键的有序字符串表组。若通过nvm中的组过滤器判断查找到的有序字符串表组包含目标键,通过nvm中有序字符串表组内的有序字符串表的元数据和表过滤器查找目标键;若有序字符串表组内的有序字符串表包含目标键,返回目标键值对应的目标键值对;若有序字符串表组内的有序字符串表不包含目标键,流程返回至对当前有序字符串表层的层次加1。142.如图9所示,为本技术实施例提供的基于混合存储架构的日志归并树键值存储系统的数据查找示意图。其中,虚线代表选择性存储。143.已知查找的目标键为45,memtable的键值范围为3~15,immutable键值范围为1~10,ssd上的文件一共两层,每层分别包含若干个组。其中第零层前两个组分别包含三个sstable,两个组的键值范围分别为1~30和31~60,第二个组中不存在目标键45。第一层前两个组键值范围分别为1~40和41~80,第二组中第一个sstable不包含目标键,第二组中第二个sstable和第三个sstable都包含目标键45,第二组三个sstable从上到下按照时序排列,第二组第一个sstable的生成时间晚于第二组第三个sstable的生成时间。nvm中分别存放了与四个有序字符串表对应的元数据。查找目标键45具体包括:144.(1)在内存中的memtable和immutablememtable查找目标键45,根据键值范围可以判断45不存在于内存的缓存之中。145.(2)对ssd中的sstable进行查找。首先在l0中进行查找,根据l0层的组元数据保存的组键值范围进行二分查找,确定数据存在于l0层第二组中。146.(3)l0层第二组中包含三个sstable,键值范围分别为31~41、33~43和47~56。在访问具体的sstable之前,通过组过滤器判断在l0层第二组中并不存在目标键45,继续访问下一层文件。147.(4)在l0层中通过二分查找法确定目标键45存在于l0层第二组所在的键值范围,通过groupindexer策略,根据l0层第二组保存的信息,可以确定目标键45存在于l1层第一组和l1层第二组中。即l0层第二组所在的键值范围与l1层第一组和l1层第二组的键值范围存在重叠,确定目标键45可能存在于l1层第一组和l1层第二组中。148.(5)根据组元数据保存的组键值范围在l1层第一组和l1层第二组中进行二分查找,确定数据存在于l1层第二组中。149.(6)l1层第二组中包含三个sstable,键值范围分别为41~60、44~55和45~75。在访问具体的sstable之前,通过组过滤器判断在l1层第二组中存在目标键45。150.(7)根据l1层的元数据信息的选择出键范围包含目标键45的文件,l1层第二组三个sstable的键值范围都包含目标键。151.(8)按照生成时间的顺序依次对l1层第二组三个sstable进行二次过滤,可以按照生成时间从晚到早的顺序进行二次过滤。152.(8-1)利用l1层第二组第一个sstable的过滤器判断目标键45是否存在。如果判断存在则使用rocksdb的sstable读取接口访问sstable,在sstable中查找目标键,最终未找到时进行后续查找;如果判断不存在则直接进行后续查找。153.(8-2)利用l1层第二组第二个sstable的过滤器判断目标键45存在,然后在第二个sstable中查找得到目标键对应的键值对(待查找数据)并返回。154.本技术实施例提供一种基于混合存储架构的日志归并树键值存储系统的过滤器更新方法,应用于电子设备中,具体地,过滤器更新方法包括:155.201,将多个有序字符串表层中的任意一个有序字符串表层确定为当前有序字符串表层,其中,多个有序字符串表层按预设顺序进行存储。156.202,获取当前有序字符串表层中的有序字符串表数量和预设表上限数量。157.203,若当前有序字符串表层中的有序字符串表数量大于或等于预设表上限数量,从当前有序字符串表层中选择有序字符串表组。158.在本技术的一个实施例中,从当前有序字符串表层中选择有序字符串表组包括:根据有序字符串表的数量和生成时间从当前有序字符串表层中选择有序字符串表组。159.具体地,可以从当前有序字符串表层中选择有序字符串表的数量最多且平均生成时间最早的有序字符串表组。160.204,根据选择的有序字符串表组生成待合并有序字符串表。161.在本技术的一个实施例中,根据选择的有序字符串表组生成待合并有序字符串表包括:对选择的有序字符串表组中的有序字符串表进行合并排序,得到第一有序字符串表;根据当前有序字符串表层的下一个有序字符串表层的键范围将第一有序字符串表划分为至少一个第二有序字符串表,得到包括至少一个第二有序字符串表的待合并有序字符串表。162.在本技术的一个实施例中,根据当前有序字符串表层的下一个有序字符串表层的键范围将第一有序字符串表划分为至少一个第二有序字符串表包括:若第一有序字符串表的表键范围包含于当前有序字符串表层的下一个有序字符串表层的任意一个组键范围,不对第一有序字符串表进行划分;若第一有序字符串表的表键范围包含于当前有序字符串表层的下一个有序字符串表层的任意多个组键范围,按照任意多个组键范围对第一有序字符串表进行划分;若第一有序字符串表的表键范围不包含于当前有序字符串表层的下一个有序字符串表层的任意一个组键范围,对第一有序字符串表进行均匀划分。163.在本技术的一个实施例中,第一有序字符串表的大小与当前有序字符串表层的下一个有序字符串表层的有序字符串表的大小一致。在nvm上创建第一有序字符串表对应的表过滤器和表元数据。164.205,将待合并有序字符串表合并至当前有序字符串表层的下一个有序字符串表层,得到合并后的有序字符串表层。165.在本技术的一个实施例中,将待合并有序字符串表合并至当前有序字符串表层的下一个有序字符串表层包括:在当前有序字符串表层的下一个有序字符串表层中,通过多线程将待合并有序字符串表中的每个第二有序字符串表,合并至组键范围包含第二有序字符串表的表键范围的有序字符串表组。166.206,根据合并后的有序字符串表层更新当前有序字符串表层的下一个有序字符串表层的两级过滤器。167.在本技术的一个实施例中,根据合并后的有序字符串表层更新当前有序字符串表层的下一个有序字符串表层的两级过滤器包括:根据合并后的有序字符串表层中生成的有序字符串表组生成对应的组元数据,在非易失存储介质创建与生成的有序字符串表组对应的组过滤器;根据合并后的有序字符串表层中修改的有序字符串表组,在非易失存储介质更新与修改的有序字符串表组对应的组过滤器。168.本实施例的过滤器更新方法在nvm上对元数据和过滤器进行原地更新,减小写放大和回收存储空间的开销。169.如图10所示,为本技术实施例提供的过滤器更新流程图。确定当前有序字符串表层为li层,选取li层的有序字符串表组(合并组)到内存;对内存中有序字符串表组进行合并和根据li层的有序字符串表组进行划分(分割);生成新的有序字符串表和表过滤器,写入li+1层的对应的有序字符串表组;原地更新nvm中的元数据和两级过滤器(即根据新的有序字符串表组在nvm中更新有序字符串表组对应的元数据和两级过滤器)。170.具体地,可以读取li层参与压缩到li+1层的sstable到内存,进行合并和分割操作。可以选中ssd中li层文件数量最多且文件时序总体最早的一组(文件时序总体最早也即文件平均生成时间最早),将该组(即有序字符串表组)所有sstable读取到内存进行合并排序,合并后的sstable按照下一层的组划分来进行分割,分割完毕之后需要刷写到目标层级的键值范围不会重叠,如果没有与多个组重叠则不进行分割。生成新的sstable以及对应的过滤器后,选中下一层对应的组进行写入。171.具体地,可以更新元数据和过滤器信息。由于sstable的元数据、过滤器以及sstable组的元数据、过滤器都存放在nvm上,在合并操作完成后只需同步对元数据和两级过滤器进行原地更新,不再需要因为多版本而使用写时复制技术(copy-on-write)。172.如图11所示,为本技术实施例提供的过滤器更新示意图。其中,虚线代表选择性存储。173.先是对内存中的memtable和immutablememtable的转换,然后从l0向l1进行压缩过程。假设ssd上的文件一共被组织成两层,第零层包含两个组,分别包含三个sstable,两个组的键值范围分别为1~30和31~60,其中l0第一组前两个sstable分别早于l0第二组前两个sstable产生,l0第一组最后一个sstable晚于l1第二个组最后一个sstable产生。第一层包含一个组,组的键值范围为1~60,组内包含一个sstable,键值范围为10~55。过滤器更新方法具体包括:174.(1)由于l0层两组sstable文件数量相同,而组1两个sstable早于组2,因此选择文件总体时序最早的组1进行压缩,将组1中全部sstable读取到内存进行合并操作。175.(2)对读取到内存的全部sstable合并排序,生成新的sstable文件、过滤器以及元数据。176.(3)根据l1层的组键值范围对新的sstable进行分割操作。由于l1层中有一个组,键值范围为1~60,新的sstable文件键值范围为1~28,处于l1层的有序字符串表组的组键值范围内,所以新的sstable无需分割,直接写入l1层的有序字符串表组。177.(4)同步更新nvm中的两级过滤器和元数据信息。178.本技术实施例提供一种基于混合存储架构的日志归并树键值存储系统的非易失存储介质管理方法,应用于电子设备中,具体地,非易失存储介质管理方法包括:179.301,接收对表过滤器或组过滤器的创建请求。180.302,将创建请求转换为对非易失存储介质的空间分配请求。181.303,获取非易失存储介质的空闲链表的锁,空闲链表包括非易失存储介质的空闲页面的页面编号。182.304,从空闲链表中摘取多个页面编号。183.305,根据多个页面编号在非易失存储介质创建存储管理对象。184.306,返回存储管理对象。185.307,释放空闲链表的锁。186.在本技术的一个实施例中,按照页面组织nvm的存储空间。头页面存储nvm页面的整体信息;元数据页面存储nvm页面的信息;数据页面存储具体数据。可以通过位图(bitmap)和空闲链表来管理数据页面,维护当前被使用的页面信息和空闲页面信息。对于nvm封装的轻量级的文件调用使用方式,通过提供类似文件系统的调用接口对上层封装底层nvm分页的情况,使得使用nvm和使用内存一样便捷,同时不用处理nvm的分配与回收。187.本实施例分配请求采用“短路”机制直接通过底层的链表完成分配,确保请求线程在使用请求的空间之前nvm已经完成响应。188.本实施例的非易失存储介质管理方法具体包括互斥的申请方法。189.如图12所示,为本技术实施例提供的互斥的申请方法流程图。具体而言,互斥的申请方法可包括:接收分配请求(存储请求)。进行mutex加锁。从nvmpager获得first_free_page_num存入tmp,其中,在nvm上通过nvmpager管理和描述页面信息,tmp为中间变量,first_free_page_num为空闲链表中第一个空闲页面的页面编号。然后,初始化扫描到空闲页面数量cnt=0,判断tmp!=0&&cnt《期望分配的页面数量是否为真。若tmp!=0&&cnt《期望分配的页面数量为真,tmp设置为tmp对应页面的next_page_num(下一页面的页面编号),cnt自增1,流程返回至判断tmp!=0&&cnt《期望分配的页面数量是否为真的步骤。若tmp!=0&&cnt《期望分配的页面数量为假,判断cnt是否等于期望分配的页面数量。若cnt等于期望分配的页面数量,修改nvmpager中的first_free_page_num为tmp对应页面的next_page_num,将tmp页面的next_page_num设置为0。进一步地,mutex解锁,分配成功。若cnt不等于期望分配的页面数量,mutex解锁,分配失败。190.下面对申请方法进行进一步解释。191.a、于合并(压缩)过程的尾声阶段在nvm中创建新的过滤器。192.合并操作会在当前有序字符串表层的下一个有序字符串表层创建新的sstable,相对应的会创建新的sstable过滤器,需要访问nvm。193.b、nvm轻量级空间管理层将对组过滤器的创建请求转变为对nvm空间的存储请求。194.nvm轻量级空间管理系统包括nvm轻量级空间管理层,nvm轻量级空间管理层将对组过滤器的创建请求转换为对nvm页面的申请,将需要进行访问操作的存放着过滤器的页面集合抽象为文件(文件即逻辑意义上的一块连续空间,类比于通用文件系统的“文件”,在下文的本实施例中,涉及非易失存储介质管理方法的文件或涉及非易失存储介质的文件服务的文件都是逻辑意义上的一块连续空间),并在该文件打开或者创建的时候在内存当中构造一个nvmfile句柄,内存中可通过nvmfile结构来访问和使用nvm空间。该句柄的核心成员是组过滤器在nvm上所占用页面的页面编号,和一个表示文件句柄读写的逻辑偏移值的偏移量,类比于文件操作中的lseek方法中对文件读写位置的设定。nvmfile会根据逻辑偏移值计算出实际在nvm上读写的地址(具体页面的具体位置),然后以nvm通过mmap映射到用户逻辑空间的首地址作为基地址,直接在用户逻辑空间准确访问nvm上对应的内容。195.可以在nvm上借助nvmfile实现过滤器的构造、读取等操作,屏蔽了底层nvm分页的情况。对组过滤器的创建操作被转换成nvmfile的创建操作,然后进一步被转换成对nvm空闲页面的扫描和对新页面的申请操作。196.c、获取nvm空闲链表的锁,在空闲页面的链表上摘取一定量的页面,并利用这些页面编号在nvm上创建出一个nvmemhandler对象。197.nvm空闲链表本身是一个无锁链表,但是使用mutex锁使得nvm空间分配不允许分配-分配并行,不允许分配-回收并行,而允许回收-回收并行,从而确保并发分配以及回收的正确性。不允许分配-分配并行是考虑到每个分配操作需要一次性从空闲链表摘取所需数量的页面,但是一次删除多个元素的无锁并发链表较难实现。198.nvmemhandler用来描述逻辑上连续的nvm页面,用来管理和访问一个nvm文件引用的nvm页面。199.d、释放空闲链表的锁,返回创建的nvmmemhandler。200.整个申请nvm空间的操作都处于加锁阶段。在获取nvm空间,创建nvmmemhandler之后,释放nvm空闲页面链表的锁。201.本技术实施例提供另一种基于混合存储架构的日志归并树键值存储系统的非易失存储介质管理方法,应用于电子设备中,具体地,非易失存储介质管理方法包括:202.401,响应于表过滤器或组过滤器的数据失效,触发非易失存储介质存储的空间的回收请求。203.402,将回收请求加入回收队列,并将回收请求通知调度线程。204.403,通过调度线程根据回收队列中的回收请求创建多个回收线程,以通过多个回收线程回收失效页面。205.404,根据失效页面更新空闲链表,空闲链表包括非易失存储介质的空闲页面的页面编号。206.405,等待回收线程结束。207.在本技术的一个实施例中,根据失效页面更新空闲链表包括:获取空闲链表的表头页面编号;将表头页面编号赋值给失效页面的下一页面编号;将失效页面的页面编号重新确定为表头页面编号。具体地,可以原子load获取nvmpager(空闲链表)中的first_free_page_num(表头页面编号,即nvmpager中的第一个nvmpagedescriptor(节点)的页面编号);将需要回收的nvmpagedescriptor(失效页面)的next_page_num(下一页面编号)赋值为first_free_page_num;若通过原子操作cas判断first_free_page_num没有改变,将nvmpagedescriptor的页面编号重新确定为first_free_page_num。208.本实施例的非易失存储介质管理方法具体包括并发的回收方法。209.对于回收请求,请求线程提交需要释放的页面编号序列之后,可以不需要确保nvm空间管理归还指定页面,请求者可以在避免访问释放的页面的地址空间的情况下,继续执行其他处理逻辑。210.如图13所示,为本技术实施例提供的并发的回收方法流程图。具体地,并发的回收方法可包括:接收回收请求;获取请求队列lock_guard;将回收请求插入请求队列;notify_one通知nvm内部调度线程;nvmpager内部调度线程获取请求队列lock_guard;nvmpager内部调度线程判断请求队列是否为空。若请求队列为空,通过cv.wait方法等待唤醒。nvmpager内部调度线程响应于notify_one的通知,进行唤醒。若请求队列不为空,nvmpager内部调度线程弹出当前队列中的部分回收请求。nvmpager内部调度线程自动解锁lock_guard或响应于解锁请求解锁lock_guard。然后,mutex加锁;nvmpager内部调度线程创建多个线程执行回收线程任务;nvmpager内部调度线程join多个线程完成回收线程任务;mutex解锁,执行判断请求队列是否为空。回收执行线程原子load获取nvmpager中的first_free_page_num。回收执行线程将需要回收的nvmpagedescriptor中的next_page_num设置为first_free_page_num。回收执行线程原子操作cas判断当前空闲链表头是否还是first_free_page_num,如果当前空闲链表头是first_free_page_num,则将空闲链表头设置为要回收的页面编号。回收执行线程判断cas操作是否更新空闲链表头。若是,结束本流程;若否,执行原子load获取nvmpager中的first_free_page_num。211.下面对回收方法进行进一步解释。212.e、合并(压缩)过程导致的过滤器等元数据失效,触发nvm文件的回收请求。213.当一个sstable被压缩从而失效后,会获取nvmemhandler所在页面编号,通过该页面编号计算出偏移值,根据偏移值以nvm基址进行基址寻址即可访问到nvm上的nvmemhandler,便于对nvm页面进行安全回收。214.f、将回收请求加入到回收队列,并通知内部调度线程。215.对回收队列的操作都需要获取锁。在多个回收请求中优先处理释放空间最多的回收请求,以减少在nvm可分配页面数量较少时,分配请求无法满足的情况。216.g、内部调度线程弹出多个回收请求,创建多个工作线程回收页面并更新空闲链表。217.当回收请求到来时,nvmpager弹出等待队列中的请求,在回收请求小于预设频率时(一般情况下),nvmpager的内部调度线程会直接创建几个线程来并发执行当前等待队列中的回收请求,以并发执行回收操作;如果回收请求的数量超过了预设的线程数量,nvmpager将弹出的回收请求合并为一次回收操作,直接在nvmpager的内部调度线程中一次就将这些回收的页面交还。218.g1、获取当前整个nvm空间的first_free_page_num。219.g2、将要回收的nvm页面的页面描述器的next_page_num字段设置为first_free_page_num。220.g3、通过cas原子操作将当前空闲链表头设置为first_free_page_num。221.cas(compareandset)技术,是一个特殊的原子操作,一般的调用形式为cas(v,e,n),v是需要进行更新的地址,判断v中数据与e是否相同,如果相同就会将v置为n。采用cas技术可确保一个线程在一次尝试并成功插入数据到链表的过程中,没有其他线程操作成功。222.h、等待所有回收线程结束。223.如图14所示,为本技术实施例提供的非易失存储介质管理方法的数据结构逻辑关系图。图14表示了nvm轻量级空间管理层的数据结构逻辑关系。nvm轻量级空间管理层是nvm轻量级空间管理系统的组成部分,在nvm上通过nvmpager、nvmpagerdescriptor来管理和描述页面信息,通过nvmmemhandler来提供具体的文件服务。内存中通过nvmfile结构来访问和使用nvm空间。224.如图15所示,为本技术实施例提供的过滤器创建示意图。通过在一次压缩操作的末尾时创建一个组过滤器的过程,描述nvm轻量级空间管理系统的调用流程。在一次压缩过程的尾声阶段,在向ssd写入新的sstable文件的同时,通过nvm轻量级空间管理系统在nvm中创建过滤器。225.nvm轻量级空间管理层将对组过滤器的创建转变为对nvm空间的申请。nvmpager在并发情况下进行空间分配请求的调度,在空闲页面的链表上摘取一定数量的页面,并利用这些页面的页面编号在nvm上创建出一个nvmemhandler对象。将创建好的nvmemhandler对象回传到kv系统(rocksdb)。创建nvmfile对象供后续使用,并将nvmemhandler持久化到ssd,防止掉电丢失。226.如图16所示,为本技术实施例提供的计算机设备的示意图。计算机设备160包括存储器1601、处理器1602以及存储在存储器1601中并可在处理器1602上运行的计算机可读指令,例如基于混合存储架构的日志归并树键值存储系统优化程序。处理器1602执行计算机可读指令时实现上述基于混合存储架构的日志归并树键值存储系统优化方法实施例中的步骤。227.本领域技术人员可以理解,示意图16仅仅是计算机设备160的示例,并不构成对计算机设备160的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备160还可以包括输入输出设备、网络接入设备、总线等。228.所称处理器1602可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器1602也可以是任何常规的处理器等,处理器1602是计算机设备160的控制中心,利用各种接口和线路连接整个计算机设备160的各个部分。229.存储器1601可用于存储计算机可读指令,处理器1602通过运行或执行存储在存储器1601内的计算机可读指令或模块,以及调用存储在存储器1601内的数据,实现计算机设备160的各种功能。存储器1601可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备160的使用所创建的数据等。此外,存储器1601可以包括硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)或其他非易失性/易失性存储器件。230.计算机设备160集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,也可以通过计算机可读指令来指令相关的硬件来完成,计算机可读指令可存储于一计算机可读存储介质中,该计算机可读指令在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机可读指令包括计算机可读指令代码,计算机可读指令代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机可读指令代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom)、随机存取存储器(ram)等。231.本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的基于混合存储架构的日志归并树键值存储系统优化方法。232.本实施例还提供了一种计算机程序产品,当该计算机程序产品在电子设备上运行时,使得电子设备执行上述相关步骤,以实现上述实施例中的基于混合存储架构的日志归并树键值存储系统优化方法。233.另外,本技术的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的基于混合存储架构的日志归并树键值存储系统优化方法。234.其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。235.通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。236.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。237.该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。238.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。239.该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。240.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1