基于RocksDB的存储系统中的数据处理方法、装置、设备和介质与流程

未命名 10-08 阅读:105 评论:0
基于rocksdb的存储系统中的数据处理方法、装置、设备和介质
技术领域
:1.本技术实施例涉及数据存储
技术领域
:,尤其涉及一种基于rocksdb的存储系统中的数据处理方法、装置、电子设备、计算机可读存储介质。
背景技术
::2.随着计算机技术的发展,针对各类数据的海量存储、读写成为了当前的热点问题。以kv存储系统为例,其是分布式存储系统,以键值对的形式存储数据。这种存储方式简单且易于扩展,被应用于大规模数据存储场景。kv存储系统具有高可用性、可扩展性和容错性等特点,能够满足海量数据存储的需求。kv存储系统单存储节点底层数据存储基于rocksdb实现,对于需要频繁大量删除的应用场景(即ttl较短),会增加rocksdbcompaction的开销,可能会造成性能抖动。技术实现要素:3.本技术实施例提供一种基于rocksdb的存储系统中的数据处理方法、装置、电子设备、计算机可读存储介质,以解决或缓解上面提出的一项或更多项技术问题。4.第一方面,本技术实施例提供了一种基于rocksdb的存储系统中的数据处理方法,所述存储系统包括目标存储组,目标存储组包括ttl相同的第一rocksdb和第二rocksdb;所述方法包括:5.响应于写请求,将目标数据写到目标存储组中的第二rocksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rocksdb的写入属性为不可写;6.响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果;7.在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb;8.在第一rocksdb被重载的情形下,切换所述第一rocksdb和第二rocksdb的写入属性。9.第二方面,本技术实施例提供了一种基于rocksdb的存储系统中的数据处理装置,所述存储系统包括目标存储组,目标存储组包括ttl相同的第一rocksdb和第二rocksdb;所述装置包括:10.写入模块,用于响应于写请求,将目标数据写到目标存储组中的第二rocksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rocksdb的写入属性为不可写;11.读取模块,用于响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果;12.清理模块,用于在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb;13.切换模块,用于在第一rocksdb被重载的情形下,切换所述第一rocksdb和第二rocksdb的写入属性。14.第三方面,本技术实施例提供了一种电子设备,该电子设备包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,以使至少一个处理器能够执行上述数据修复的方法。15.第四方面,本技术实施例提供了一种计算机可读存储介质,计算机可读存储介质存储计算机指令,当计算机指令在计算机上运行时,上述各方面任一种实施方式中的方法被执行。16.本技术实施例通过在同一个存储组中设置ttl相同的两个rocksdb(第一rocksdb和第二rocksdb),不断循环设置这两个rocksdb的写入属性和以rocksdb为粒度回收过期rocksdb的存储资源,可以减缓频繁大量删除数据而导致性能抖动的问题,从而有效地降低了rocksdbcompaction的开销,从而保障了存储和读取性能。17.上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本技术进一步的方面、实施方式和特征将会是容易明白的。附图说明18.在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本技术公开的一些实施方式,而不应将其视为是对本技术范围的限制。19.图1示意性示出了rocksdb的compaction过程;20.图2示意性示出了根据本技术一实施例的基于rocksdb的存储系统中的数据处理方法的系统架构示意图;21.图3示意性示出了根据本技术一实施例的基于rocksdb的存储系统中的数据处理方法的流程图;22.图4示意性示出了写请求的过程;23.图5示意性示出了读请求的过程;24.图6示意性示出了根据本技术一实施例的基于rocksdb的存储系统中的数据处理装置的框图;及25.图7是用来实现本技术实施例的数据存储方法的电子设备的框图。具体实施方式26.在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本技术的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。27.kv存储系统单存储节点底层数据存储基于rocksdb实现,对于需要频繁大量删除的应用场景(即ttl较短),会增加rocksdbcompaction的开销,可能会造成性能抖动。具体地:1.数据到期无法直接删除回收,而是先写入一条带删除标签的数据,依赖compaction进行删除回收;2.对于已删除的数据,compaction需要到最后一层才能真正释放存储资源(如图1所示);3.compaction可能影响系统读写性能。28.基于上述技术缺陷,本技术实施例提供一种基于rocksdb的存储系统的数据回收方法。29.以下为本技术实施例中可能涉及到的名词术语解释:30.生命周期(ttl,timetolive):一个对象从创建到回收删除的全过程。31.rocksdb:是基于日志结构合并(log-structuredmerge,lsm)树数据结构的,可嵌入的持久化键值存储库,将数据存储在内存和磁盘上的不同层级中,以实现高吞吐量和低延迟。rocksdb是通过标记和compaction过程来进行实际的清理和释放存储空间。32.键值存储系统(key-value存储系统),是一种数据存储模型,以键值对的形式进行数据存储。每个键(key)在kv存储系统中唯一,并且与之关联的是一个值(value)。33.lsm树(log-structured-merge-tree):是一种数据结构,适用于key-value数据的高效索引和持久化存储,可用于bigtable、leveldb、rocksdb(可作mysql的存储引擎)等系统。34.compaction(合并):rocksdb是指将数据从lsm树的一个级别(level)移动到下一个级别的过程。35.性能抖动:是系统性能的不稳定性或波动性。性能抖动可能表现为读写延迟的增加、吞吐量的下降或系统负载的增加等。相关地,频繁的compaction操作可能会成为系统的瓶颈,导致系统性能的抖动,即性能在不同时间点出现波动或不稳定。36.原子性:所有操作要么不间断地全部被执行,要么一个也没有执行。37.图2示出根据本技术一实施例的基于rocksdb的存储系统的数据回收方法的系统架构示意图。如图2所示,在一个存储节点中,可以根据调度逻辑(ttl属性)选择存储组。在该存储节点中,有存储组1、存储组2、…存储组n。每个存储组中均包括两个rocksdb。其中,同一个存储组中的rocksdb_a和rocksdb_b存储相同ttl的数据,两个rocksdb均可读,但始终只保持一个rocksdb可写。38.图3示出根据本技术一实施例的基于rocksdb的存储系统的数据回收方法的流程图。所述存储系统可以包括多个存储组(如图2),如目标存储组。目标存储组包括ttl相同的第一rocksdb和第二rocksdb。如图3所示,该数据回收方法可以包括:39.s300,响应于写请求,将目标数据写到目标存储组中的第二rocksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rocksdb的写入属性为不可写。40.目标数据为向存储系统中请求存储的数据。存储系统(如kv存储系统)在接收到存储请求的情况下,将存储请求中包含的目标数据进行存储并进行生命周期的管理。41.目标数据可以是kv(key-value)形式的数据。在一些示例中,目标数据也可以是其他类型的数据,例如序列化对象、图片数据或者文档数据等。42.目标数据可以是用户浏览网页过程中获得或者生成的数据,其中,存储请求的触发可以是网页的服务提供商配置的,也可以是用户自定义配置的。43.不同目标数据的数据大小、ttl等可能并不相同。例如,有些数据的ttl为1小时,有些数据的ttl为4小时。对于基于rocksdb的kv存储系统而言,若对ttl较短的到期数据进行频繁删除会增加rocksdbcompaction的开销,造成性能抖动。44.在本技术实施例中,采用了双rocksdb架构。以目标存储组为例,该目标存储组对应的ttl为1小时,该目标存储组包括不可写的第一rocksdb和可写的第二rocksdb。第一rocksdb和第二rocksdb中存储的都是ttl为1小时的数据。当前,第二rocksdb接收新数据(如目标数据),第一rocksdb接受倒计时。45.s302,响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果。46.在接收到读请求,根据读请求中的参数路由到目标存储组中,并将读请求转发给目标存储组。47.目标存储组在接收到该读请求之后,会从第一rocksdb和第二rocksdb中查询数据。48.该读请求对应的数据可能存储在第二rocksdb中,也可以存储在第一rocksdb中。49.在一种实施方式中,步骤s302包括:50.根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果。51.在一个示例中,假设目标存储组对应的ttl为1小时,当前时间为2023年6月25日11:33:49,第一rocksdb存储2023年6月25日10:00:00-10:59:59的数据并且被设置为可读但不可写,第二rocksdb从2023年6月25日11:00:00开始可以用于接收和存储新数据。因此,在当前,目标存储组中可以查找到ttl为1小时且写入时间为2023年6月25日10:00:00至2023年6月25日11:33:49的数据。其中,写入时间为2023年6月25日10:00:00-10:59:59的数据在第一rocksdb中,写入时间为2023年6月25日11:00:00-11:33:49的数据在第二rocksdb中。52.在本技术实施例中,通过第一rocksdb和第二rocksdb,可以有效地返回读取结果。53.在一种实施方式中,根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果,包括:54.在第二rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;55.在第二rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;56.在第二rocksdb响应超时或失败的情况下,确定读取结果为超时或失败。57.接上一个示例,相对于当前时间(2023年6月25日11:33:49),第一rocksdb中写入时间在2023年6月25日10:00:00至2023年6月25日10:33:48之间的数据已经超过1小时了,属于过期数据。因此,若第一rocksdb响应数据存在,则判断响应数据是否过期。过期返回不存在,未过期返回响应结果,无需等待第二rocksdb的响应结果。58.具体地,若响应数据为2023年6月25日10:20:48写入第一rocksdb的数据,则该响应数据为过期数据,因此返回数据不存在。若响应数据为2023年6月25日10:40:48写入第一rocksdb的数据,则该响应数据不是过期数据,可以直接返回该响应数据。59.在一种实施方式中,若第一rocksdb响应超时或失败,则直接返回超时或失败。响应超时的时间可以是服务提供商配置的,也可以是用户自定义配置的,再此不做限定。60.在本技术实施例中,在第一rocksdb存在响应数据、响应超时或失败的情况下,不用等待第二rocksdb的响应结果,直接向用户返回读取结果,从而提高响应效率。61.在一种实施方式中,根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果,包括:62.在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;63.在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;64.在第二rocksdb不存在响应数据,第一rocksdb响应超时或失败的情况下,确定读取结果为超时或失败;65.在第一rocksdb和第二rocksdb均不存在响应数据的情况下,确定读取结果为数据不存在。66.继续接上一个示例,相对于当前时间(2023年6月25日11:33:49),第一rocksdb中写入时间在2023年6月25日11:00:00至2023年6月25日11:33:49之间的数据存在第二rocksdb,因此,第一rocksdb中并不存在这个时间段写入的数据。67.在第一rocksdb中不存在响应数据的情况下,则还需要通过第二rocksdb的响应结果确定读取结果。具体如下:若第一rocksdb响应数据不存在,第二rocksdb响应数据存在,则判断数据是否过期。过期返回不存在,未过期返回第二rocksdb的响应结果。若第一rocksdb响应数据不存在,第二rocksdb响应超时或失败,则直接返回超时或失败。若第一、第一rocksdb均响应数据不存在,则返回不存在。68.在本技术实施例中,在第一rocksdb不存在响应数据的情况下,还并行获取第二rocksdb的响应结果,根据第二rocksdb的响应结果确定准确的读取结果并返回。69.s304,在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb。70.继续接上一个示例,目标存储组对应的ttl为1小时,第二rocksdb从2023年6月25日11:00:00开始可以用于接收和存储当前数据,第一rocksdb存储2023年6月25日10:00:00-10:59:59的数据并且被设置为可读但不可写入。若当前时间为2023年6月25日12:00:00,则第一rocksdb从设置为不可写至当前时间的时间差达到ttl,也即写入到第一rocksdb中的最后一个数据的时间也超过ttl了,也即第一rocksdb中的所有数据均到期了。因此,此时可以以第一rocksdb为整体(粒度)进行数据清理和存储资源的回收,以替代对数据逐个的清理,从而降低rocksdbcompaction的开销。71.在单个数据到期后也不需要向rocksdb写入一条删除记录,读取数据时根据当前时间和数据的ttl判断该数据是否过期,降低rocksdbcompaction的开销。72.s306,在第一rocksdb被重载的情形下,切换所述第一rocksdb和第二rocksdb的写入属性。73.继续接上一个示例,目标存储组对应的ttl为1小时,第二rocksdb从2023年6月25日11:00:00开始可以用于接收和存储当前数据,第一rocksdb存储2023年6月25日10:00:00-10:59:59的数据并且被设置为可读但不可写入。若当前时间为2023年6月25日12:00:00,则对第一rocksdb进行清理和重载。此时,可以切换所述第一rocksdb和第二rocksdb的写入属性,即第二rocksdb不可写,第一rocksdb可写。具体地,第二rocksdb存储2023年6月25日11:00:00-11:59:59的数据并且被设置为可读但不可写入,第一rocksdb用于从2023年6月25日12:00:00开始接收新数据。74.可知,待到2023年6月25日13:00:00,第一rocksdb和第二rocksdb的写入属性再次切换,并以此类推。75.通过不断循环设置两个rocksdb(第一rocksdb和第二rocksdb)的写入属性和以rocksdb为粒度回收过期rocksdb的存储资源,可以减缓频繁大量删除数据而导致性能抖动的问题,从而有效地降低了rocksdbcompaction的开销,保障了存储和读取性能。76.在一种实施方式中,如图2所示,所述存储系统包括多个存储组,不同的存储组对应不同的ttl,所述目标存储组为所述多个存储组之一;对应地,步骤s300可以包括:77.根据所述写请求,确定所述目标数据的ttl;78.根据所述目标数据的ttl,从所述多个存储组中确定所述目标存储组,所述目标存储组对应的ttl和所述目标数据的ttl相同;79.获取所述目标存储组中的第二rocksdb的写入属性和第一rocksdb的写入属性;80.选择写入属性为可写的第二rocksdb,并将所述目标数据写入到所述第二rocksdb中。81.不同数据对应的ttl可能不同。在一个示例中,可以根据数据的属性确定ttl。属性可以包括重要性、数据来源、ttl信息等。也可以根据其他的信息确定数据的ttl。82.在本技术实施例中,根据ttl将目标数据存储在对应的存储组中,目标数据只能存储在ttl与之相同的存储组中,它们之间为一对一映射。存储组中的rocksdbttl到期后,该rocksdb中存储的数据也必然都到期,因此可以以rocksdb为粒度,直接回收整个rocksdb的存储资源,降低逐个数据删除导致的rocksdbcompaction开销。83.在一种实施方式中,所述第二rocksdb的写入属性和第一rocksdb的写入属性互斥。例如,第二rocksdb的写入属性为可写,则第一rocksdb的写入数据为不可写;第二rocksdb的写入属性为不可写,则第一rocksdb的写入数据为可写。通过这样互斥关系,可以确保一份数据仅写入到其中一个rocksdb中,避免重复写入。84.在一种实施方式中,所述切换包括:85.设置所述第二rocksdb的写入属性为不可写;86.设置所述第一rocksdb的写入属性为可写;87.以所述第二rocksdb被设置为不可写的时间节点为起点,启动所述第二rocksdb的过期时间计算;88.其中,切换操作为原子操作。89.在本技术实施例中,相同ttl的数据创建两个rocksdb为一个存储组,两个rocksdb均可读,但始终只保持一个rocksdb可写。当一个rocksdb被设置成不可写时开启计算它的过期时间并将另一个rocksdb设置成可写。其中,设置一个rocksdb不可写、开启计算过期时间、设置另一个rocksdb可写此三个操作同时执行,需要保证原子性。这样保证两个rocksdb之间写入属性的无缝切换,避免新数据同时存储到两个rocksdb中,也避免新数据无rocksdb可写入。90.下面结合图2、图3和图4来进一步说明本技术实施例的基于rocksdb的存储系统的数据回收方式。91.如图2所示,在一个存储节点中,可以根据调度逻辑(ttl属性)选择存储组。在该存储节点中,有存储组1、存储组2、…存储组n。每个存储组中均包括rocksdb_a(第一rocksdb)和rocksdb_b(第二rocksdb),并在业务层维护rocksdb的ttl属性。同一个存储组中的rocksdb_a和rocksdb_b存储相同ttl的数据,两个rocksdb均可读,但始终只保持一个rocksdb可写。当一个rocksdb被设置成不可写时开启计算它的过期时间并将另一个rocksdb设置成可写。92.当前,假设rocksdb_a被设置为不可写,并在rocksdb_a被设置为不可写时即启动计时。同时,rocksdb_b被设置为可写,用于响应写请求从而存储新数据。93.针对写请求:94.s410,存储节点接收用户通过sdk(软件工具包)等发送的写请求。95.s420,存储节点根据调度逻辑(ttl属性),从多个存储组中选择ttl与之匹配的目标存储组(如存储组1)。96.s430,存储节点选择存储组1中可写的rocksdb(rocksdb_b)。97.s440,存储节点将写请求的目标数据写入到rocksdb_b中,并反馈写入成功的响应数据。98.针对读请求:99.s510,存储节点接收用户通过sdk(软件工具包)等发送的读请求。100.s520,存储节点根据映射关系获取待读取数据所在的目标存储组(如存储组1)。101.s530,存储节点并发读取存储组1中的两个rocksdb。102.s540,存储节点合并两个rocksdb的响应结果,从而得到最终的读取结果。103.s550,存储节点返回读取结果。104.循环设置:105.存储组1中的rocksdb_a到期的情况下,以rocksdb_a为粒度删除回收过期数据并释放存储资源,然后对清空数据后的rocksdb_a重载,在rocksdb_a重载后:将rocksdb_a设置为可写并清除针对rocksdb_a的计时,rocksdb_a用于响应写请求从而存储新数据;同时将rocksdb_b设置为不可写并启动计时。106.通过上述操作,可以不断循环设置同一个存储组中的两个rocksdb的读写状态和回收其中过期rocksdb的存储资源,从而实现以rocksdb为粒度的数据清理和资源释放,而不是逐条数据的清理,降低rocksdbcompaction的开销,即使过期数据,也不需要向rocksdb写入删除记录,不依赖compaction进行删除回收。107.图6示出根据本技术一实施例的基于rocksdb的存储系统中的数据处理装置600的结构框图。所述存储系统包括目标存储组,目标存储组包括ttl相同的第一rocksdb和第二rocksdb。如图6所示,该基于rocksdb的存储系统中的数据处理装置600可以包括:108.写入模块610,用于响应于写请求,将目标数据写到目标存储组中的第二rocksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rocksdb的写入属性为不可写;109.读取模块620,用于响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果;110.清理模块630,用于在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb;111.切换模块640,用于在第一rocksdb被重载的情形下,切换所述第一rocksdb和第二rocksdb的写入属性。112.在一种实施方式中,读取模块620还用于:113.根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果。114.在一种实施方式中,读取模块620还用于:115.在第二rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;116.在第二rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;117.在第二rocksdb响应超时或失败的情况下,确定读取结果为超时或失败。118.在一种实施方式中,读取模块620还用于:119.在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;120.在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;121.在第二rocksdb不存在响应数据,第一rocksdb响应超时或失败的情况下,确定读取结果为超时或失败;122.在第一rocksdb和第二rocksdb均不存在响应数据的情况下,确定读取结果为数据不存在。123.在一种实施方式中,所述存储系统包括多个存储组,不同的存储组对应不同的ttl,所述目标存储组为所述多个存储组之一;对应地,读取模块620还用于:124.根据所述写请求,确定所述目标数据的ttl;125.根据所述目标数据的ttl,从所述多个存储组中确定所述目标存储组,所述目标存储组对应的ttl和所述目标数据的ttl相同;126.获取所述目标存储组中的第二rocksdb的写入属性和第一rocksdb的写入属性;127.选择写入属性为可写的第二rocksdb,并将所述目标数据写入到所述第二rocksdb中。128.在一种实施方式中,所述第二rocksdb的写入属性和第一rocksdb的写入属性互斥。129.在一种实施方式中,所述切换包括:130.设置所述第二rocksdb的写入属性为不可写;131.设置所述第一rocksdb的写入属性为可写;132.以所述第二rocksdb被设置为不可写的时间节点为起点,启动所述第二rocksdb的过期时间计算;133.其中,切换操作为原子操作。134.图7示出根据本技术一实施例的电子设备的结构框图。如图7所示,该电子设备包括:存储器710和处理器720,存储器710内存储有可在处理器720上运行的指令。处理器720执行该指令时实现上述实施例中的数据存储方法。存储器710和处理器720的数量可以为一个或多个。该电子设备旨在表示各种形式的数字计算机,诸如,服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本技术的实现。135.该电子设备还可以包括通信接口730,用于与外界设备进行通信,进行数据交互传输。各个设备利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器720可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示gui的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。136.可选的,在具体实现上,如果存储器710、处理器720及通信接口730集成在一块芯片上,则存储器710、处理器720及通信接口730可以通过内部接口完成相互间的通信。137.应理解的是,上述处理器可以是中央处理器(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitaldignalprocessing,dsp)、专用集成电路(applicationspecificsntegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(advancedriscmachines,arm)架构的处理器。138.本技术实施例提供了一种计算机可读存储介质(如上述的存储器710),其存储有计算机指令,该程序被处理器执行时实现本技术实施例中提供的方法。139.可选的,存储器710可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据数据存储方法的电子设备的使用所创建的数据等。此外,存储器710可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器710可选包括相对于处理器720远程设置的存储器,这些远程存储器可以通过网络连接至数据存储方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。140.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包括于本技术的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。141.此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本技术的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。142.流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或多个(两个或两个以上)用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本技术的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。143.在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。144.应理解的是,本技术的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。上述实施例方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。145.此外,在本技术各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。该存储介质可以是只读存储器,磁盘或光盘等。146.以上,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本技术揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
技术特征:
1.一种基于rocksdb的存储系统中的数据处理方法,其特征在于,所述存储系统包括目标存储组,目标存储组包括ttl相同的第一rocksdb和第二rocksdb;所述方法包括:响应于写请求,将目标数据写到目标存储组中的第二rocksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rocksdb的写入属性为不可写;响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果;在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb;在第一rocksdb被重载的情形下,切换所述第一rocksdb和第二rocksd b的写入属性。2.根据权利要求1所述的方法,其特征在于,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果,包括:根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果。3.根据权利要求2所述的方法,其特征在于,根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果,包括:在第二rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;在第二rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;在第二rocksdb响应超时或失败的情况下,确定读取结果为超时或失败。4.根据权利要求2所述的方法,其特征在于,根据第一rocksdb的响应结果和所述第二rocksdb的响应结果,确定所述读取结果,包括:在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据是过期数据的情况下,确定读取结果为数据不存在;在第二rocksdb不存在响应数据,第一rocksdb存在响应数据,且所述响应数据不是过期数据的情况下,确定读取结果为所述响应数据;在第二rocksdb不存在响应数据,第一rocksdb响应超时或失败的情况下,确定读取结果为超时或失败;在第一rocksdb和第二rocksdb均不存在响应数据的情况下,确定读取结果为数据不存在。5.根据权利要求1至4任意一项所述的方法,其特征在于,所述存储系统包括多个存储组,不同的存储组对应不同的ttl,所述目标存储组为所述多个存储组之一;对应地,响应于写请求,将目标数据写到目标存储组中的第二ro cksdb中,包括:根据所述写请求,确定所述目标数据的ttl;根据所述目标数据的ttl,从所述多个存储组中确定所述目标存储组,所述目标存储组对应的ttl和所述目标数据的ttl相同;获取所述目标存储组中的第二rocksdb的写入属性和第一rocksdb的写入属性;选择写入属性为可写的第二rocksdb,并将所述目标数据写入到所述第二rocksdb中。6.根据权利要求1至4任意一项所述的方法,其特征在于,所述第二roc ksdb的写入属性和第一rocksdb的写入属性互斥。7.根据权利要求6所述的方法,其特征在于,所述切换包括:设置所述第一rocksdb的写入属性为可写;
设置所述第二rocksdb的写入属性为不可写;以所述第二rocksdb被设置为不可写的时间节点为起点,启动所述第二rocksdb的过期时间计算;其中,切换操作为原子操作。8.一种基于rocksdb的存储系统中的数据处理装置,其特征在于,所述存储系统包括目标存储组,目标存储组包括ttl相同的第一rocksdb和第二rocksdb;所述装置包括:写入模块,用于响应于写请求,将目标数据写到目标存储组中的第二roc ksdb中;其中,所述第二rocksdb的写入属性为可写,对应地所述第一rock sdb的写入属性为不可写;读取模块,用于响应于读请求,通过所述目标存储组中的第一rocksdb和第二rocksdb反馈读取结果;清理模块,用于在第一rocksdb的ttl到期的情况下,清理并重载该第一rocksdb;切换模块,用于在第一rocksdb被重载的情形下,切换所述第一rocksd b和第二rocksdb的写入属性。9.一种电子设备,其特征在于,包括:至少一个处理器;及与所述至少一个处理器通信连接的存储器;其中:所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至7中任一项所述的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1至7中任一项所述的方法。

技术总结
本申请了提供一种基于RocksDB的存储系统中的数据处理方法、装置、设备及计算机可读存储介质。其中,所述存储系统包括目标存储组,目标存储组包括TTL相同的第一RocksDB和第二RocksDB所述方法包括:响应于写请求,将目标数据写到目标存储组中的第二RocksDB中;其中,所述第二RocksDB的写入属性为可写,对应地所述第一RocksDB的写入属性为不可写;响应于读请求,通过所述目标存储组中的第一RocksDB和第二RocksDB反馈读取结果;在第一RocksDB的TTL到期的情况下,清理并重载该第一RocksDB;在第一RocksDB被重载的情形下,切换所述第一RocksDB和第二RocksDB的写入属性。本申请通过以RocksDB为粒度回收过期RocksDB的存储资源,可以减缓频繁大量删除数据而导致性能抖动的问题,从而有效地降低了Compaction的开销,保障了存储和读取性能。障了存储和读取性能。障了存储和读取性能。


技术研发人员:刘易
受保护的技术使用者:上海哔哩哔哩科技有限公司
技术研发日:2023.07.18
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐