本技术属于信息存储相关,更具体地,涉及一种分离式键值存储系统及其存储的操控方法、电子设备。
背景技术:
:1、资源分离架构可以将系统的不同组成部分抽象为独立的资源,如计算资源、内存资源、存储资源,从而提高系统的可维护性、扩展性。而分离内存(memory disaggregation)架构是典型的资源分离架构之一,也是现代数据中心的新兴趋势,可以支持计算资源和内存资源独立和弹性的扩展。分离内存架构的核心思想是将计算节点和内存节点解耦,在资源分离架构尤其是分离内存架构中,计算资源池与存储或内存资源池往往使用rdma高速网络进行连接。应用层通过调用rdma协议所提供的各种原语(verbs)对内存节点的内存进行读写以及控制操作。2、lsm-tree(log-structured merge-tree)是一种常用的键值存储结构,被广泛应用于分布式和本地的键值存储系统中。lsm-tree的特点是将数据写入时首先追加到一个顺序写的日志文件(称为写前日志或wal),而不是直接写入到树结构中。这样可以充分利用顺序写的高效性能。随着写入操作的进行,内存中的数据逐渐积累,当达到一定阈值后,会触发一次数据合并操作。在合并操作中,将内存中的数据与磁盘上的数据进行合并排序,生成新的有序数据文件。这种合并排序的过程可以有效地减少磁盘随机写入的次数,提高写入性能。对于写密集型负载,基于lsm-tree的kv存储已经成为主流。3、随着信息技术的发展,不同领域的数据都呈现快速的增长趋势,如何减少空间浪费,提高内存利用率,是目前亟需解决的技术问题。技术实现思路1、针对现有技术的以上缺陷或改进需求,本技术提供了一种分离式键值存储系统及其存储的操控方法、电子设备,其目的在于减少空间浪费,提高内存利用率。2、为实现上述目的,按照本技术的一个方面,提供了一种分离式键值存储的操控方法,执行于计算节点,所述操控方法包括通过rdma网络访问内存节点,将写指令键值对{key,value}中的value写入内存节点的值日志文件以及将用于定位value的key和vlog指针写入内存节点的有序字符串表,并在写数据期间对内存节点进行空间复用,进行空间复用的步骤具体包括:3、对内存节点的多个有序字符串表进行合并,将定位无效value的key和vlog指针保存于无效数据映射表中并从有序字符串表中删除,无效value为所存储的键值对{key,value}中需要被新value覆盖的旧value;4、当向所述内存节点批量写入新的键值对时,确定值日志文件每个粒度chunk内的可用空间大小,可用空间包括被无效value占用的空间,判断已有chunk中是否存在可用空间大小满足预期的可用chunk,若有,则根据所述无效数据映射表将键值对中的value写入可用chunk中的可用空间以覆盖无用数据,否则,将键值对中的value写入新的chunk;将定位新写入value的key和vlog指针存入合并后的有序字符串表;5、根据无效数据映射表选择具有无效value的chunk进行重写,将所选定的chunk中的有效value连续地存入新的chunk,并修改有序字符串表中对应key的vlog指针,释放原有chunk以用于存储新键值对的value。6、在一些实施例中,所述有序字符串表包含多个数据块data block,每个datablock存储有多组key以及关联的vlog指针;7、写数据的过程包括:8、分配vlog写缓存和data block写缓存;9、将键值对{key,value}存入内存表immtable;10、通过后台线程定期执行如下刷新操作:11、选定immtable并对其所存储的键值对进行键值分离;12、将分离的value顺序存入vlog写缓存,将分离的key顺序存入data block写缓存;13、每当vlog写缓存中新增的value数量达到预设batch大小时,触发异步rdma单边写操作,将vlog写缓存中的value顺序写入内存节点的值日志文件;14、将data block写缓存中的key和关联的vlog指针顺序写入内存节点的有序字符串表,并当data block写缓存中的数据全部写入有序字符串表后,执行同步阻塞的轮询检查,确保data block写缓存中的数据和vlog写缓存中的数据全部写入内存节点。15、在一些实施例中,所述有序字符串表包含多个数据块data block,每个datablock存储有多组key以及关联的vlog指针;16、所述操控方法还包括根据读指令以扫描的方式从内存节点读取指定key范围内的键值对,读数据过程包括:17、分配data block读缓存和vlog读缓存;18、调用seek操作定位有序字符串表的扫描起始key;19、通过rdma异步io从起始key开始读取有序字符串表的数据并存入所述data block读缓存;20、每当用户调用next方法获取指定key范围内的下一个键值对{key,value}时,首先判断所述data block读缓存中该key所属的数据块是否已经就绪,若否,则阻塞等待直到相对应的data block从有序字符串表到所述data block读缓存的传输完毕;若已经就绪,根据所述data block读缓存所指向的位置,通过rdma异步io逐步将所述值日志文件中的value存入所述vlog读缓存,并判断所述vlog读缓存中该key对应的value是否已就绪,若否,则阻塞等待直到该key对应的value从值日志文件到所述vlog读缓存的传输完毕;将寻找到的value和对应的key组成键值对返回给用户。21、在一些实施例中,所述有序字符串表包括过滤块filter block、索引块indexblock、多个数据块data block和完美哈希,所述filter block用于判断所需key是否存在于所属的有序字符串表中,所述index block用于定位所需key所处的data block,所述完美哈希用于定位所需key在data block中的具体位置;22、所述操控方法还包括根据读指令以单点查询的方式从内存节点读取所需的键值对,读数据过程包括:23、查询filter block,定位所需key所处的有序字符串表;24、对所定位的有序字符串表中的index block进行二分查找,定位有序字符串表中的data block;25、查询所定位的有序字符串表中的完美哈希,定位所需key在data block的位置;26、触发异步rdma单边读操作,根据data block定位到的key和关联的vlog_ptr从值日志文件中读取对应的value,将寻找到的value和对应的key组成键值对返回给用户。27、在一些实施例中,所述写入过程采用如下流水线模式:28、每个data block对应的批量键值对的写入包括四步:第一步完成值日志文件的写入,第二步完成有序字符串表中data block数据的写入,第三步完成当前data block数据的完美哈希的构建,第四步释放data block写缓存;29、按照不同的data block将键值对分批写入内存节点,当对前一批键值执行写入的第n步时,对后一批键值对执行写入的第n-1步,n=2,3,4。30、在一些实施例中,所述内存节点的内存空间按照设定的粒度划分为多个粒度池chunkpool,每个chunkpool具有多个chunk;31、所述操控方法还包括:当需要将数据写入内存节点中的新chunk时,先向内存节点申请chunkpool,再对所申请的chunkpool中的chunk进行管理,写入新的数据。32、在一些实施例中,所述操控方法还包括进行如下的rdma连接管理:33、利用单独的qp连接池对所有的实现内存节点访问的qp连接进行管理,当任意线程发起rdma请求时,当前线程向qp连接池申请f个qp连接:34、若qp连接池的可用qp连接的数量大于等于f,则从qp连接池中直接选择f个可用的qp连接;35、若qp连接池的可用qp连接的数量小于f,且全局qp连接的数量小于连接上限,则从qp连接池中选择全部的可用qp连接并建立新的qp连接,新建的qp连接和从qp连接池中选择的可用qp连接的总数为f;36、若qp连接池的可用qp连接的数量小于f,且全局qp连接的数量达到连接上限,则等待已经被其他线程申请的qp连接完成任务返回qp连接池直至qp连接池的可用qp连接的数量增大至f,从qp连接池中选择f个可用的qp连接。37、在一些实施例中,所述操控方法还包括:38、当发起rdma请求时,根据所申请的qp连接数量以及实际io大小对每个rdma请求进行拆分,使拆分后的rdma请求通过所申请的多个qp连接并行进行数据传输。39、按照本技术的另一个方面,提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上任一项所述的方法的步骤。40、按照本技术的又一个方面,提供了一种分离式键值存储系统,包括通过rdma网络连接的计算节点和内存节点,所述计算节点为上述电子设备。41、总体而言,通过本技术所构思的以上技术方案与现有技术相比,本技术主要具有以下有益效果:42、1.本发明提供的分离式键值存储的操控方法,在写数据期间,通过sst文件的合并记录无效数据并记录于无效数据映射表,vlog文件中的无效数据所占据的空间可以当作可用空间重复利用。一方面,基于该无效数据映射表,可以快速判断vlog文件中的各chunk中的无效数据的空间大小,在再次写入键值对时,若已有的chunk中存在符合条件的可用空间,则直接将value写入无效数据的位置,实现无效数据空间的复用。另一方面,基于该无效数据映射表,可以快速判定chunk内的有效数据和无效数据,将有效数据写入新的chunk并原地修改sst文件,释放原有chunk的空间,以实现空间的复用。通过上述方法实现无效数据空间复用,可以避免内存空间的浪费,提高内存空间的利用率。43、2.进一步地,结合vlog写缓存和data block写缓存实现数据写入,可以显著提升系统的写入效率和并发处理能力;键值分离策略减小了前台写入的延迟,并通过异步rdma单边写操作以及批处理策略优化了后台写入性能;同时,通过线程独有的vlog缓存机制,避免了线程间的竞争,进一步提高了写入效率;同步的轮询检查确保了sst文件和vlog数据在刷新过程中的一致性和完整性;不同粒度的chunk管理使系统在内存利用和元数据维护间达到了平衡,有效提升系统的整体性能和稳定性。44、3.进一步地,rdma异步io的使用,实现了对data block和vlog的分步预读,减少了读取过程中的阻塞;这种分步预读不仅有效利用网络带宽资源,同时通过限制预读的键值对数量及value总大小,避免了小范围扫描时不必要的带宽浪费;对相邻的vlog_ptr进行整合,作为更大读写单位预取,提高了网络资源利用率。对于由于垃圾回收导致的vlog数据不一致性,通过重试机制进行校验,保证了读取数据的准确性和一致性。45、4.进一步地,采用流水线写入方法,可以提升系统的整体数据写入效率。通过将写入过程划分为多个步骤并采用流水线模式,每个data block在完成一个过程时,立即触发下一个data block的前一处理过程,并行处理多个任务,这样可以最大限度地利用系统的计算和传输资源。当前第1页12
技术特征:1.一种分离式键值存储的操控方法,其特征在于,执行于计算节点,所述操控方法包括通过rdma网络访问内存节点,将写指令键值对{key,value}中的value写入内存节点的值日志文件以及将用于定位value的key和vlog指针写入内存节点的有序字符串表,并在写数据期间对内存节点进行空间复用,进行空间复用的步骤具体包括:
2.如权利要求1所述的分离式键值存储的操控方法,其特征在于,所述有序字符串表包含多个数据块data block,每个data block存储有多组key以及关联的vlog指针;
3.如权利要求1所述的分离式键值存储的操控方法,其特征在于,所述有序字符串表包含多个数据块data block,每个data block存储有多组key以及关联的vlog指针;
4.如权利要求2所述的分离式键值存储的操控方法,其特征在于,所述有序字符串表包括过滤块filter block、索引块index block、多个数据块data block和完美哈希,所述filter block用于判断所需key是否存在于所属的有序字符串表中,所述index block用于定位所需key所处的data block,所述完美哈希用于定位所需key在data block中的具体位置;
5.如权利要求4所述的分离式键值存储的操控方法,其特征在于,所述写入过程采用如下流水线模式:
6.如权利要求1所述的分离式键值存储的操控方法,其特征在于,所述内存节点的内存空间按照设定的粒度划分为多个粒度池chunkpool,每个chunkpool具有多个chunk;
7.如权利要求1所述的分离式键值存储的操控方法,其特征在于,所述操控方法还包括进行如下的rdma连接管理:
8.如权利要求7所述的分离式键值存储的操控方法,其特征在于,所述操控方法还包括:
9.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8中任一项所述的方法的步骤。
10.一种分离式键值存储系统,其特征在于,包括通过rdma网络连接的计算节点和内存节点,所述计算节点为权利要求9所述的电子设备。
技术总结本申请属于信息存储相关技术领域,其公开了一种分离式键值存储系统及其存储的操控方法、电子设备,操控方法在写数据期间对内存节点进行空间复用,包括:将定位无效Value的Key和vLog指针保存于无效数据映射表;当写入新的键值对时,判断已有Chunk中是否存在可用空间大小满足预期的可用Chunk,若有,则根据无效数据映射表将Value覆盖无用数据;根据无效数据映射表选择具有无效Value的Chunk进行重写,将所选定的Chunk中的有效Value连续地存入新的Chunk,并原地修改SST文件,释放原有Chunk。通过上述方法实现无效数据空间复用,可以避免内存空间的浪费,提高内存空间的利用率。
技术研发人员:万继光,葛松,林亦尔
受保护的技术使用者:华中科技大学
技术研发日:技术公布日:2024/10/31