发明内容
有鉴于此,本公开实施例提供一种数据处理方法、装置及电子设备,至少部分解决现有技术中存在的问题。
第一方面,本公开实施例提供了一种数据处理方法,包括:
在动态随机存取存储器中设置仅包含数据传输协议的redis服务器;
设置与所述redis服务器进行数据交互的KV引擎,所述KV引擎包括设置于所述动态随机存取存储器的数据管理部、以及设置于非易失性存储器的数据存储部;
基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,包括:
在所述KV引擎的数据管理部设置存储表格结构体,所述存储表格结构体用于接收并存储所述redis服务器转发的操作数据。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:
在所述数据存储部设置SST文件,所述SST文件按照[健,值]的方式进行数据存储。
根据本公开实施例的一种具体实现方式,所述基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作,包括:
利用所述redis服务器获取来自redis客户端的写请求及写数据;
将所述写数据转发至所述存储表格结构体中;
通过定期刷新的方式将所述存储表格结构体中存储的所述写数据刷新到所述SST文件中。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:
在所述KV引擎的数据管理部设置数据索引,所述数据索引用于对所述SST文件中存储的数据进行索引操作。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,包括:
在所述KV引擎的数据管理部设置行缓存,所述行缓存用于记录所述数据管理部最近使用的数据。
根据本公开实施例的一种具体实现方式,所述基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作,包括:
通过所述存储表格结构体来查询最新插入的数据;
当通过所述存储表格结构体查询到所述最新插入的数据在所述动态随机存取存储器中时,直接返回所述动态随机存取存储器的相应数据;
当通过所述存储表格结构体没有查询到所述最新插入的数据时,通过所述数据索引确定所述最新插入的数据的存储位置;
从所述存储位置读取所述最新插入的数据。
根据本公开实施例的一种具体实现方式,所述通过所述数据索引确定所述最新插入的数据的存储位置,包括:
在所述行缓存中查询是否存在所述最新插入的数据;
当所述行缓存中不存所述最新插入的数据时,在所述SST文件中查询所述最新插入的数据。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:
将所述SST文件中的数据按照顺序排列的方式进行存储,以使得所述SST文件中的数据可以通过[偏移值,数据长度]的方式获取目标数据。
第二方面,本公开实施例提供了一种数据处理装置,包括:
第一设置模块,用于在动态随机存取存储器中设置仅包含数据传输协议的redis服务器;
第二设置模块,用于设置与所述redis服务器进行数据交互的KV引擎,所述KV引擎包括设置于所述动态随机存取存储器的数据管理部、以及设置于非易失性存储器的数据存储部;
执行模块,用于基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作。
第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述任第一方面或第一方面的任一实现方式中的数据处理方法。
第四方面,本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
第五方面,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
本公开实施例中的数据处理方案,包括在动态随机存取存储器中设置仅包含数据传输协议的redis服务器;设置与所述redis服务器进行数据交互的KV引擎,所述KV引擎包括设置于所述动态随机存取存储器的数据管理部、以及设置于非易失性存储器的数据存储部;基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作。通过本公开的方案,提高了redis的承载能力。
具体实施方式
下面结合附图对本公开实施例进行详细描述。
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
本公开实施例提供一种数据处理方法。本实施例提供的数据处理方法可以由一计算装置来执行,该计算装置可以实现为软件,或者实现为软件和硬件的组合,该计算装置可以集成设置在服务器、终端设备等中。
参见图1及图2,本公开实施例提供的一种数据处理方法,包括如下步骤:
S101,在动态随机存取存储器中设置仅包含数据传输协议的redis服务器。
参见图2,redis数据处理整体的架构模型如图2所示,动态随机存取存储器DRAM中的redis服务器只保留协议层,用来和其他数据处理工具交互,保障上层工具的持续使用,通过这种方式,能够保证redis服务器在动态随机存取存储器中占用较少的存储空间。
S102,设置与所述redis服务器进行数据交互的KV引擎,所述KV引擎包括设置于所述动态随机存取存储器的数据管理部、以及设置于非易失性存储器的数据存储部。
由于redis服务器在动态随机存取存储器中仅保留协议层,此时需要建立KV(keyvalue,健值)引擎来对接redis服务器。
参见图2,KV引擎包括设置在非易失性存储器中的存储表格结构体、数据索引和行缓存,以及设置在非易失性存储器的数据存储部。非易失性存储器中的存储表格结构体、数据索引和行缓存构成了KV引擎的数据管理部,在数据存储部内包含SST文件。
其中,存储表格结构体用于接收并存储所述redis服务器转发的操作数据,数据索引用于对存储在行缓存或SST文件中的数据进行索引,行缓存用于暂时缓存临时数据,SST文件采用持久化的方式存储redis数据,SST文件按照[健,值]的方式进行数据存储。
S103,基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作。
redis相关的数据处理操作包括写操作和读操作。对于读操作,数据经过redis服务器转发后,直接多线程并发的写入存储表格结构体中,存储表格结构体是一种在DRAM内存中的高性能数据结构,该数据结构可以使用并发结构前缀树(Patricia Trie)。或者存储表格结构体也可以随时切换为HashMap,即使用一定的内存冗余来增强写入性能。
写数据写入存储表格结构体后,定期刷新数据到SST(Sorted Static Table,排序静态表)文件中,SST文件是一种RocksDB使用的数据结构,其主要的内容是其中的数据是按照key的顺序来组织存放的,大致的结构类似
[key1,value1],[key2,value2],[key3,value3],[key4,value4]....
在使用中可以存在多种不同的变体,例如可以将key和value分开存储,即keyvalue分离。
可以通过三级访问的方式来控制读操作,例如,第一级通过存储表格结构体来查询最新插入的数据,该部分数据再内存中,查到之后立即返回
如果第一级的存储表格结构体中没有数据,则通过索引确定数据在第二级还是第三级存储,如果在第二级,则通过行缓存查询最近使用的数据,该部分数据是记录缓存。其中,最近使用的数据可以是一个预设时间段内使用的数据,例如,最近使用的数据可以当天使用的数据,也可以是一周之内使用的数据,或者一个月之内使用的数据。
第三级是非易失性存储器,直接按记录抽取,如果前两级都没有查询到,则去第三级查询,查到后返回用户的同时缓存到行缓存中,方便下一次访问。
通过上述实施例中的方案,能够结合非易失性存储器PMEM和动态随机存取存储器DRAM内存来增强rddis的承载能力;将redis的实现拆分,上层只留下协议访问层,具体的数据存储全部转发到KV引擎中;使用单独的Index(索引)来迅速定位数据在哪一个具体的SST中的具体位置。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,包括:在所述KV引擎的数据管理部设置存储表格结构体,所述存储表格结构体用于接收并存储所述redis服务器转发的操作数据。通过该方式能够提高KV引擎的数据转发能力。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:在所述数据存储部设置SST文件,所述SST文件按照[健,值]的方式进行数据存储。通过该方式能够调高SST文件的寻址查找速度。
参见图3,根据本公开实施例的一种具体实现方式,所述基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作,包括:
S301,利用所述redis服务器获取来自redis客户端的写请求及写数据。
redis服务器可以直接接收redis客户端发送的数据写请求以及写数据,从而基于写请求判断是否需要对写数据进行操作。
S302,将所述写数据转发至所述存储表格结构体中。
当redis服务器通过对写请求进行校验之后,允许写操作时,可以将写数据存储到存储表格结构体中。
S303,通过定期刷新的方式将所述存储表格结构体中存储的所述写数据刷新到所述SST文件中。
通过上述方式,能够及时的将写数据写入到SST文件中。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:在所述KV引擎的数据管理部设置数据索引,所述数据索引用于对所述SST文件中存储的数据进行索引操作。通过该方式,能够对redis数据进行快速定位。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,包括:在所述KV引擎的数据管理部设置行缓存,所述行缓存用于记录所述数据管理部最近使用的数据。通过设置行缓存,能够便于存放临时数据。
参见图4,根据本公开实施例的一种具体实现方式,所述基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作,包括:
S401,通过所述存储表格结构体来查询最新插入的数据。
最新插入的数据可以是预设时间段内新插入的数据。例如,最新插入的数据可以是一个小时之内插入的数据,或者一天之内插入的数据,或者一个星期之内插入的数据。根据实际的情况不同,最新插入的数据的时间段可以灵活设置。
S402,当通过所述存储表格结构体查询到所述最新插入的数据在所述动态随机存取存储器中时,直接返回所述动态随机存取存储器的相应数据;
S403,当通过所述存储表格结构体没有查询到所述最新插入的数据时,通过所述数据索引确定所述最新插入的数据的存储位置。
具体的,可以在所述行缓存中查询是否存在所述最新插入的数据,当所述行缓存中不存所述最新插入的数据时,在所述SST文件中查询所述最新插入的数据。
S404,从所述存储位置读取所述最新插入的数据。
通过本实施例的方式,能够采用多级管理的方式进行数据的读取。
根据本公开实施例的一种具体实现方式,所述设置与所述redis服务器进行数据交互的KV引擎,还包括:将所述SST文件中的数据按照顺序排列的方式进行存储,以使得所述SST文件中的数据可以通过[偏移值,数据长度]的方式获取目标数据。
传统的数据一般按照快压缩的形式进行组织,即把大量的数据当作一个块(如16KB)进行统一打包并压缩,然后构建上层的索引结构,用户查询一个具体的key的时候,首先定位到一个块(block),然后解压缩该块进行数据提取。
本公开的方案中利用了非易失性存储器PMEM可以进行字节寻址的特点,结合RocksDB LSM的离线数据处理策略,将数据组织称紧凑的、可以单条记录拆分出来的结构,形式如下:
оvalue1,value2,value3...
о所有数据紧凑排列,提取的时候利用非易失性存储器PMEM的字节寻址能力,直接按照[偏移值,数据长度]提取指定的目标数据即可
作为一种实现策略,可以首先让所有数据按照顺序排列,然后记录下所有数据的起点位置,单独在一个数组中存储即可。考虑到LSM是离线策略,可以对数据进行定期的压缩,压缩后保留每条数据的起始位置,更新位置数组即可。数组只记录数据开始的位置即可,数据的长度可以从两个相邻数据的差值求得即可,对于偏移值数组,可以进一步通过其他方法压缩。
与上面的方法实施例相对应,参见图5,本公开还提供了一种数据处理装置50,包括:
第一设置模块501,用于在动态随机存取存储器中设置仅包含数据传输协议的redis服务器;
第二设置模块502,用于设置与所述redis服务器进行数据交互的KV引擎,所述KV引擎包括设置于所述动态随机存取存储器的数据管理部、以及设置于非易失性存储器的数据存储部;
执行模块503,用于基于所述redis服务器和所述KV引擎,执行redis相关的数据处理操作。
图5所示装置可以对应的执行上述方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
参见图6,本公开实施例还提供了一种电子设备60,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中数据处理方法。
本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中。
本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的数据处理方法。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备60的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备60可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备60操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备60与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备60,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。