CN110083307A - 数据存储方法、存储器和服务器 - Google Patents
数据存储方法、存储器和服务器 Download PDFInfo
- Publication number
- CN110083307A CN110083307A CN201910252054.XA CN201910252054A CN110083307A CN 110083307 A CN110083307 A CN 110083307A CN 201910252054 A CN201910252054 A CN 201910252054A CN 110083307 A CN110083307 A CN 110083307A
- Authority
- CN
- China
- Prior art keywords
- value
- key assignments
- memory
- storage
- storage request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据存储方法、存储器和服务器,具体方法包括:键值存储器接收键值存储请求,键值存储请求中包括键和第一值;当第一值为大尺寸数据时,键值存储器将第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中可以携带键和其中一个第二值;然后,依据每个次级键值存储请求中携带的第二值在第一值中的位置顺序,将每个次级键值存储请求中携带的第二值存储至第一存储空间,以此解决键值存储系统中大尺寸数据的数据存储效率低的问题。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种数据存储方法、存储器和服务器。
背景技术
键值(key-value)存储技术是利用键对存储数据的数据存取方式,每个键(key)对应一个值(value),键值存储技术在数据中心中有广泛的应用。随着半导体技术的发展,存储器的成本快速下降,越来越多的高性能的存储器被应用到数据中心,形成了不同类型的键值存储系统。
键值存储系统从开始的基于机械硬盘的系统逐步发展到利用动态随机存取存储器(dynamic random access memory,DRAM)作缓存的缓存型系统,发展到将包括键和值的所有数据都存储于DRAM作为内存的内存型系统。
但是,对于键对应的值的大小较大的情况下,在写入该值的过程中,数据存储效率较低。以一个值的写入过程为例,首先,需要先缓存该值,由于该值的大小较大,需要较大的缓存空间,且为了能够将该值完整的存储至DRAM中,需要在该值完全缓存之后,才启动由缓存至DRAM的传输过程,整个处理过程中该值的缓存时间和传输时间均相对较长,产生较大的传输时延,数据存储效率低。
发明内容
本申请提供一种数据存储方法、存储器和服务器,用以解决传统技术中键值存储系统中大尺寸数据的数据存储效率低的问题。
第一方面,本申请提供了一种数据存储方法,该方法包括:首先,键值存储器接收键值存储请求,键值存储请求中包括键和第一值,键与第一值是对应的;为了存储第一值,键值存储器可以在第一存储器中划分用于存储第一值的第一存储空间,其中,第一存储器可以是键值存储器之外的存储器;若第一值为大尺寸数据;示例性的,第一值所包含数据的容量大于或等于第一阈值,键值存储器可以进行数据分割,将第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中可以携带键和其中一个第二值;次级键值存储请求的数量与第一值分割获得的多个第二值的个数是相同的。在存储第一值时,键值存储器可以依据每个次级键值存储请求中携带的第二值在第一值中的位置顺序,分别将每个次级键值存储请求中携带的第二值存储至第一存储空间。其中,第一值所包含数据的容量也可以称为第一值的大小,是指第一值中所包含数据的总大小,也可以说是指存储第一值所需存储空间的最小存储空间的大小。例如,第一值中包含内容为“0123456789”,则第一值所包含数据的容量为10字节。
通过上述方法,对于大尺寸数据,键值存储器可以进行数据分割,分割为多个较小的第二值,值的尺寸较小,可以有效缩短数据缓存和传输的时间,减小时延,进一步有效提高大尺寸数据的数据存储效率。
在一种可能的设计中,键值存储器在将第一值分割为多个第二值时,可以边缓存边分割;示例性的,键值存储器在缓存第一值(如在键值存储器中的第二存储器缓存第一值)的过程中,每当缓存的数据的大小小于或等于第二阈值时,将缓存的数据作为第二值,并携带在一个次级键值存储请求中,直至第一值缓存完成。当第一值的缓存的最后阶段,最后缓存的数据大小小于第二阈值,可以直接将缓存的数据作为第二值,携带在一个次级键值存储请求中;这种情况下,每个次级键值存储请求中携带的第二值的大小不一定完全相同。
通过上述方法,采用边缓存边分割的方式,可以在缓存的过程中,同时完成数据分割的操作,能够较快的进行数据分割,进而可以尽快进行数据存储,进一步,可以提升数据存储效率。
在一种可能的设计中,键值存储器在将第一值分割为多个第二值时,也可以采用缓存完成后再进行数据分割的方式。示例性的,键值存储器在第一值缓存完成后,可以将第一值分割为多个第二值,键值存储器可以将第一值分割为N+1个第二值,其中按照分割顺序排列的多个第二值中,前N个第二值中每个第二值的大小均可以等于第二阈值,第N+1个第二值的大小可以小于或等于第二阈值,N为大于或等于1的正整数。示例性的,键值存储器也可以将第二值均为多个第二值。
通过上述方法,采用先缓存后分割的方式,键值存储器可以依据第一值的大小设置第二阈值,能够更加灵活的对第一值进行分割。
在一种可能的设计中,次级键值存储请求中可以设置字段,用于指示携带的第二值的相关信息,如第二值的大小、偏移量等。示例性的,可以包括值偏置,通过值偏置可以指示次级键值存储请求中携带的第二值在第一值中的位置。
通过上述方法,通过设置相应字段,键值存储器可以更加方便的确定出第二值的相关信息,能够使得后续方便的确定出每个次级键值存储请求中携带的第二值在第一值中的位置顺序。
在一种可能的设计中,键值存储器在将每个次级键值存储请求中携带的第二值存储至第一存储空间时,需要先确定每个次级键值存储请求中携带的第二值在第一值中的位置顺序;由于次级键值存储请求中可以包括值偏置;键值存储器可根据每个次级键值存储请求中的值偏置,确定该位置顺序。例如通过值偏置的大小比较确定位置顺序,之后键值存储器再根据位置顺序,将第二值存储至第一存储空间。
通过上述方法,键值存储器通过比较每个次级键值存储请求中的值偏置可以较为便捷的确定出位置顺序,提升数据存储效率,进一步保证高效的数据存储过程。
在一种可能的设计中,键值存储器为第一值分配第一存储空间时,可以预先在第一存储器中配置用于一个或多个键值存储请求中携带的第一值的第二存储空间,键值存储器从第二存储空间选择第一存储空间,第一存储空间的大小可以等于或大于第一值的大小。键值存储器可以在接收到键值存储请求前预先配置第二存储空间;也可以在接收到携带键值存储请求之后,存储第一值之前,预先配置第二存储空间,这种情况下,第二存储空间可以等于第一值的大小,也可以大于第一值的大小。
通过上述方法,键值存储器可以从预先配置的第二存储空间中选择第一存储空间,可以更加快速的确定第一存储空间,使得第一值可以较快存储至第一存储空间中,可以实现高效的数据存储过程。
在一种可能的设计中,键值存储器为第一值分配第一存储空间时,若第二存储空间中没有足够的空间存储第一值,也就是说,第二存储空间中的空闲空间的大小小于第一值的大小,键值存储器可以从第一存储器中为第一值分配第一存储空间。
通过上述方法,键值存储器可以从第一存储器选择第一存储空间存储第一值,可以保证第一值可以存储至第一存储器中,可以保证数据存储的效率。
在一种可能的设计中,键值存储器中还可以包括第二存储器,键值存储器接收键值存储请求后,可以将键值存储请求中的键保存在第二存储器中;示例性的,第二存储器中可以存储哈希表,键值存储器可以更新哈希表,添加包括键的哈希表项;其中,添加的哈希表项中还包括第一存储空间的地址。
通过上述方法,键值存储器可以及时的更新哈希表,记录键与对应的第一存储空间地址。
在一种可能的设计中,在第一存储空间中已存储的第二值的总大小等于第一值的大小的情况下,键值存储装置确定已完成第一值的存储,停止数据存储操作;次级键值存储请求包括值大小,用于指示次级键值存储请求中携带的第二值的大小,键值存储装置可以累加已存储的第二值对应的次级键值存储请求中值大小,直至累加值等于第一值的大小,表征第一值已存储完成。
通过上述方法,键值存储器可以通过不同的方式确定第一值已完成存储,可以及时停止数据存储操作。
第二方面,本申请提供了一种键值存储器,键值存储器具有实现第一方面及第一方面任意一种可能的设计中键值存储器所实现的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,装置的结构中包括接收单元、分配单元、分割单元以及存储单元,这些单元可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第三方面,本申请还提供了一种键值存储器,有益效果可以参见第一方面及第一方面任意一种可能的设计的描述此处不再赘述。键值存储器的结构中包括处理器和存储器,处理器被配置为支持键值存储器执行上述第一方面及第一方面任意一种可能的设计的方法中相应的功能。存储器与处理器耦合,其保存键值存储器必要的程序指令和数据。键值存储器的结构中还包括收发器,用于与其他设备进行通信。
第四方面,本申请提供了一种键值存储服务器,键值存储服务器包括第一存储器和键值存储器,第一存储器是键值存储器之外的存储器,键值存储服务器用于执行第一方面及第一方面任意一种可能的设计中任意设计提供的方法的操作步骤。
第五方面,本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第六方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第七方面,本申请还提供一种计算机芯片,芯片与存储器相连,芯片用于读取并执行存储器中存储的软件程序,执行上述各方面的方法。
附图说明
图1为本申请提供的一种键值存储系统的架构示意图;
图2为本申请提供的一种键值存储服务器的结构示意图;
图3为本申请提供的一种数据存储方法的示意图;
图4为本申请提供的一种数据分片和拼接的流程示意图;
图5为本申请提供的一种键值存储请求的格式示意图;
图6为本申请提供的另一种键值存储请求的格式示意图;
图7为本申请提供的一种第一值的分割示意图;
图8为本申请提供的一种状态机的状态切换示意图;
图9为本申请提供的一种键值存储器的结构示意图;
图10为本申请提供的另一种键值存储器的结构示意图。
具体实施方式
本申请提供了一种数据存储方法、存储器和服务器,用以解决传统技术中键值存储系统中大尺寸数据的数据存储效率低的问题。
如图1所示,为本申请实施例提供的一种网络架构示意图,其中多个应用服务器键值客户端(application server key-value client)101和键值存储服务器(key-valueserver)102。应用服务器键值客户端101与键值存储服务器102之间通过网络进行交互,收发信息,本申请实施例并不限定网络的类型,例如可以是采用传输控制协议/因特网互联协议(transmission control protocol/internet protocol,TCP/IP)的有线传输方式,也可以是采用无线保真(Wifi)的无线传输方式。作为一种可能的实施例,键值存储服务器102也可以是由其他硬件组成的键值存储装置。
每个键值存储服务器102中可以设置存储器103,该存储器103可以用于存储值(value),存储器103可以是键值存储服务器中的缓存、闪存(flash),硬盘(hard diskdrive,HDD)或固态硬盘(solid-state drive,SSD)等存储介质。示例性的,存储器103中还可以用于存储哈希表,用于记录键和值的对应关系,以及值的存储位置,以便于数据处理中利用哈希表查询到指定值所在存储位置。哈希表中存储有多个哈希表项,哈希表项为键与该键对应的值存储的存储空间的地址之间的对应关系,通过哈希表可以检索到键对应的值的存储地址(存储地址为在存储器103中的存储空间的地址)。在值的读取过程中,通过哈希表确定值的存储地址,进而,从存储器103获取值;在值的存储过程中,需要在哈希表中增加相应的哈希表项,以记录值的存储地址。
图1所示的多个键值存储服务器102可以并行通过网络分别接收不同应用服务器键值客户端101发送的键值存储请求。若键值存储请求为读取请求,键值存储服务器102可以将键值存储请求中携带的值写入该存储器103。另外,键值存储服务器102还可以根据键值存储请求中携带的键以及为该值分配的在该存储器103中的存储空间,更新哈希表,插入新的哈希表项。插入的哈希表项包括键和存储地址;通过对键进行哈希运算,生成的哈希值为插入的哈希表项的索引。若键值存储请求为写入请求,键值存储服务器102可以根据键值存储请求中携带的键从该存储器中读取对应的值。具体的,键值存储服务器102可以对键值存储请求中携带的键进行哈希运算,生成哈希值,通过哈希值查询哈希表中对应的哈希表项,进而比对查询到的哈希表项中的键与键值存储请求中携带的键是否一致,若一致,根据该哈希表项中的存储地址,从该存储器中读取值,并反馈给应用服务器键值客户端101。
作为一个可能的实施例,为了提升键值存储系统的存储效率,在同一个键值存储服务器102中可以并行调用多个处理逻辑存储不同的数据。例如,同时调用两个哈希函数进行哈希运算,每个哈希函数对应一组处理逻辑,每个处理逻辑映射的存储空间的地址可以对应4个存储桶(bucket),构成一组存储桶,也即每一个键可以对应8个存储桶,用于存储哈希表项;在更新哈希表项时,可以同时搜索8个存储桶中存储的哈希表项(键通过一个哈希函数映射的4个存储桶中存储的哈希表项为一组哈希表项),找出未被占用的存储桶,然后采用轮询的模式插入新的哈希表项;对于每一组存储桶,优先插入前面的空桶,在插入新的哈希表项时,可以两组交替插入。也就是说,在第一次插入哈希表项,选用其中一组存储桶中的一个存储桶,在第二次插入哈希表项,选用另一组存储桶中的一个存储桶。当出现哈希碰撞的情况时,即一个键对应的8个存储桶全部被占用时,通过预置规则选择一个存储桶,删除其中的部分哈希表项以插入新的哈希表项;例如,删除最早存储的10个哈希表项。在删除已有哈希表项时,也可以采用轮询模式,依次交替删除两组存储桶中的哈希表项。也就是说,在第一次删除哈希表项时,删除其中一组存储桶的一个存储桶中的哈希表项,在第二次删除哈希表项,删除另一组存储桶的一个存储桶中的哈希表项。
在如图1所示的网络架构中,存在多个应用服务器键值客户端101和多个键值存储服务器102,任一个应用服务器键值客户端101可以向任一个键值存储服务器102发送键值存储请求。作为一个可能的实施例,多个键值存储服务器102也可以通过键值代理(proxy)(图1中未示出)与应用服务器键值客户端101通信,键值代理用于对应用服务器键值客户端101的键值存储请求进行管理和调度,分发给不同键值存储服务器。例如,键值代理可以按照键值存储服务器的当前负载情况分配键值存储请求。键值代理和键值存储服务器102可以部署在一个服务器中,也可以利用单独服务器部署,或者利用多个服务器以集群的形式部署。当以键值代理以集群形式部署时,对外可呈现一个互联网协议(internet protocol,IP)地址,应用服务器键值客户端101可以把键值存储请求发送给键值代理,键值代理根据负载均衡算法将键值存储请求分发给键值存储服务器102。
需要说明的是,在上述说明中,仅是以定长键值存储方式进行说明,其中仅涉及键进行哈希运算,查询哈希表,以及确定哈希表项的处理过程。本申请实施例还适用于变长键值存储方式。对于变长键,键的字段中允许添加额外字段,例如,在数据升级、快照等场景中利用变长键指示不同的版本号。键对应的值存在会发生一定的改变,以键值存储请求为写入请求为例,变长键处理如下:先对变长键进行哈希运算,生成哈希值,查询哈希表,确定哈希表项。之后,根据哈希表项确定对应的块(block)地址,以及该块地址中存储的树结构信息。根据该树结构信息确定树结构中父节点和叶子节点,该树节点可以指示变长键对应的值的存储空间的地址。其中,树结构可以为标识节点大小的B树结构,即在树结构中,左叶子节点的值大于父节点的值,且父节点的值小于右叶子节点的值。对于不同类型的键,本申请实施例提供的数据存储方式均适用,为便于描述,本申请的以下实施例仅是以定长键为例进行说明。
本申请实施例并不限定键值存储服务器的结构,例如键值存储服务器中的处理器可以是中央处埋器(central processing unit,CPU)、专用集成电路(applicationspecific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gatearray,FPGA)、人工智能(artificial intelligence,AI)芯片、片上系统(system on chip,SoC)或复杂可编程逻辑器件(complex programmable logic device,CPLD),其中,键值存储服务器所需的数据,例如,哈希表和值,可以存储在同一个存储器中,也可以存储在不同的存储器中,例如,哈希表和值可以都存储于主机的内存中,又例如,哈希表可以存储于主机的内存中,值存储于闪存中,上述仅是举例,本申请实施例并不限定哈希表和值的存储位置。
如图2所示,为本申请实施例提供的一种键值存储服务器的结构示意图,该键值存储服务器201是基于FPGA构建的键值存储装置,键值存储服务器201包括键值存储器202、第一存储器203;可选的,键值存储服务器201还可以包括中央处理器204。
键值存储器202包括键值存储引擎205和第二存储器206,可选的,还可以包括网络卸载引擎(network offload engine,NOE)207。第二存储器206可以是双倍速率(doubledata rate,DDR)存储器,具体可以用于存储哈希表,在如图2所示的键值存储服务器,将值存储于第一存储器203中,该第一存储器203可以是主机(host)中的内存,具体可以利用动态随机存取存储器实现。
值得说明的是,FPGA是利用电容、电阻等硬件搭建的实现指定功能的处理逻辑,为了便于描述,将图2中实现具体功能的处理逻辑以功能名称命名,例如,网络卸载引擎和键值存储引擎。另外,如图2所示键值存储服务器201中包括中央处理器204和基于FPGA的键值存储器,而对于同一服务器中包括两种或两种以上类型的处理器也可以称为异构服务器。
网络卸载引擎207用于接收来自应用服务器键值客户端的键值存储请求,基于用户数据报协议(user datagram protocol,UDP)对键值存储请求进行处理,将处理后的键值存储请求发送给键值存储引擎205,以此减少CPU204处理用户数据报协议报文过程中所产生的开销。可选的,在CPU204的处理能力较强时,也可以由CPU204继续完成用户数据报协议的处理过程,此时,由CPU204接收来自应用服务器键值客户端的键值存储请求,并基于用户数据包协议对键值存储请求进行处理,再将处理后的键值存储请求发送给键值存储引擎205。为了便于描述,本申请实施例的以下描述中,以键值存储器中网络卸载引擎207对键值存储请求进行处理为例进行说明。
值得说明的是,无论由网络卸载引擎207还是CPU204对用户数据报协议报文进行处理,其具体处理过程均为解析报文数据,即去除协议的报文头内容,获取报文中净荷数据的内容,本申请实施例对于网络卸载引擎207或CPU204处理用户数据协议报文的过程不做限定。
键值存储引擎205用于对键值存储请求进行处理,例如根据键值存储请求中的键从第一存储器203中读取值或将键值存储请求中携带的值(对应本申请实施例中的第一键值)写入第一存储器203中。在本申请实施例中,键值存储引擎205在将第一值写入第一存储器203前,若第一值大于或等于第一阈值,键值存储引擎205可以将键值存储请求中携带的第一值分割为多个第二值,生成多个次级键存请求;其中每个次级键值存储请求中携带有键以及一个第二值;然后,分别将每一个次级键值存储请求中携带的第二值存储到第一存储器203中。
如图2所示,键值存储器202还可以与其他处理器,如与CPU204连接,在本申请实施例中,键值存储器202可以将数据存储的操作移交至CUP204。示例性的,键值存储器202在接收到键值存储请求后,可以直接将键值存储请求转发给CUP204;也可以在确定键值存储请求中携带的第一值大于或等于第一阈值后,将键值存储请求转发给CUP204,由CUP204执行本申请实施例提供的数据存储方法。
如图2所示的键值存储服务器的结构仅为举例,其中仅示出一个CPU和一个键值存储器,事实上,本申请实施例,并不限定CPU和键值存储器的数量,可以存在多个CPU或多个键值存储器。多个键值存储器之间可以转发键值存储请求,以配合完成本申请实施例提供的数据存储方法,还可以选择性的将数据存储的操作移交至与键值存储器装置连接的任一CUP上。本申请实施例也不限定键值存储器中包括的模块、模块的名称以及各个模块的作用,凡是可以实现本申请实施例提供的数据存储方法的装置均可以作为键值存储器。
下面结合附图,基于如图2所示的键值存储器,对本申请实施例提出的一种数据存储方法进行说明,如图3所示,该方法包括:
步骤301:键值存储器接收键值存储请求,键值存储请求中携带有键和第一值,其中,第一值为键对应的值。
步骤302:键值存储器在第一存储器中为第一值分配第一存储空间。
作为一种可能的实施方式,键值存储器中可以预先在第一存储器中配置第二存储空间,用于存储值,键值存储器在为第一值分配在第一存储器中的存储空间时,可以优先从第二存储空间中为第一值分配存储空间。该第二存储空间的大小可以等于或大于第一值,示例性的,该第二存储空间可以存储一个或多个键值存储请求中携带的第一值。
对于第二存储空间,该第二存储空间可以是在接收到键值存储请求后,存储该键值存储请求中携带的第一值之前,键值存储器预先从第一存储器中配置的存储空间,第二存储空间的大小可以等于该第一值,也可以大于第一值,以便于键值存储器可以灵活的从第二存储空间中为第一值分配第一存储空间。
作为一种可能的实施方式,该第二存储空间可以是在接收到键值存储请求之前,键值存储器预先从第一存储器中配置的存储空间。由于是在接收键值存储请求之前预配置的,键值存储器可以预配置一个较大的存储空间作为第二存储空间,以使得键值存储器可以存储多个键值存储键值中携带的第一值。
键值存储器接收到键值存储请求后,可以确定第二存储空间是否存在空闲空间,且空闲空间是否可以存储第一值;在第二存储空间中存在足够的空闲空间存储第一值的情况下,从第二存储空间中选择空闲空间作为第一存储空间。
若第二存储空间中没有足够的空闲空间存储第一值,也就是说,第二存储空间中的空闲空间小于第一值所需的存储空间,键值存储器可以从第一存储器中为第一值分配存储空间。
为了有效的利用第二存储空间中的存储空间,键值存储器从第一存储器中为第一值分配的存储空间和第二存储空间中的空闲空间均可用于存储第一值(如存储一个或多个第二值)。也就是说,分配的存储空间与第二存储空间中的空闲空间的总和可以等于第一值的大小。当然,键值存储器也可以从第一存储器中为第一值分配存储空间的大小等于第一值的大小的第一存储空间。
作为另一种可能的实施方式,在第二存储空间中没有足够的空间存储第一值键值存储器的情况下,键值存储器还可以从第一存储器配置第三存储空间,第三存储空间大于第一值所需的存储空间。示例性的,第三存储空间可以为1G或500M等较大的存储空间。第三存储空间除了可以用于存储第一值,还可以用于存储键值存储器后续接收到的键值存储请求中携带的第一值,键值存储器在第三存储空间中为第一值分配第一存储空间。
应需理解的是,键值存储器也可以不预先在第一存储器中配置第二存储空间,在需要进行数据存储时,动态的在第一存储器中为第一值分配第一存储空间。示例性的,键值存储器可以根据第一值的大小,在第一存储器中分配第一存储空间。
在上述说明中,以第一存储空间的大小等于第一值所需的存储空间的大小为例。本申请实施例并不限定第一存储空间的大小。示例性的,可以设置键值存储请求中携带的第一值的最大阈值。也就是说,最大阈值用于表征键值存储请求中所携带的值的最大尺寸。键值存储器在为第一值分配的在第一存储器中的第一存储空间时,分配的第一存储空间可以等于最大阈值。键值存储器在存储第二值时,可以将第二值存储在分配的第一存储空间中,第二值在第一存储空间中的存储位置可以灵活设置,这样存储第二值的方式更加灵活。另外,第一存储空间可以是连续的存储空间,也可以是不连续的存储空间,本申请实施例并不限定。
步骤303:当第一值所包含数据的容量大于或等于第一阈值时,键值存储器将第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中携带键和一个第二值。次级键值存储请求的数量与第一值分割获得的多个第二值的个数相同。
本申请实施例并不限定步骤302和步骤303的先后顺序,可以同时执行,也可以先后执行。
对于第一值所包含数据的容量较大的情况下,如果直接进行数据存储,需要先在键值存储器中缓存第一值。示例性的,键值存储器先在第二存储器中缓存第一值。之后再将第一值传输至第一存储器,这样会导致数据存储的时间较长。其中,第一值所包含数据的容量也可以称为第一值的大小,是指第一值中所包含数据的总大小(size),也可以说是指存储第一值所需存储空间的最小存储空间的大小。例如,第一值中包含内容为“0123456789”,则第一值所包含数据的容量为10字节。
这里可以设置第一阈值,当第一值大于或等于第一阈值,则认为第一值的较大,属于大尺寸数据;否则,第一值属于小尺寸数据,对于小尺寸数据,可以按照传统的键值存储方式进行数据存储;第一阈值的具体数值可以是经验值,如1兆(M),也可以是按照具体场景以及键值存储器性能设置的。例如,在一些键值存储场景中,可以统计一段时间内,需要存储的值的大小,根据统计的需要存储的值的大小确定第一阈值。示例性的,当存储的值的大小集中在3M到10M,且发现值大于5M时,键值存储器的存储效率明显减慢,则可以将5M作为第一阈值。上述设置阈值的方式仅是举例,本申请实施例并不限定阈值的具体数值以及设置方式。
为了提高大尺寸数据的存储效率,本申请实施例提出了数据分割的方式,将第一值分割为多个第二值的方式,分次将第二值存储至第一存储器,由键值存储器完成多个第二值的正序、存储以及合并过程。本申请实施例并不限定数据分割的具体实现方式,凡是最终可以将第一值分割为多个较小的第二值的方式均适用于本申请实施例。
如图4所示,为对第一值分割后生成多个次级键值存储请求以及合并的示意图,分为两个不同的过程,分片过程和拼接过程。分片过程中,键值存储器将键值存储请求中携带的第一值可以分为多个第二值,生成多个次级键值存储请求,每个次级键值存储请求中包括报文头以及一个第二值(次级键值存储请求的格式之后会进行说明);拼接过程为键值存储器从第一存储器中读取第三值的过程,可以看做分片过程的逆过程,若第三值大于第三阈值(第三阈值可以等于第二阈值,也可以为其他数值),如第三阈值为10M,键值存储器从第一存储器中,读取多个第四值,生成多个次级键值存储请求,之后将多个第四值合成为第三值,将第三值携带在需要反馈给应用服务器键值客户端的键值存储响应中。
为了更好的解释本申请实施例的技术方案,首先,对键值存储请求的格式进行说明,如图5所示,为本申请实施例提供的一种键值存储请求的格式示意图。
键值存储请求包括两部分,一部分为报文头(header),一部分为数据包(packet)。其中,报文头携带键和值的一些属性信息。具体的,报文头中包括键标识(k ID)、类型(type)、键大小(key size)、值总大小(value total size)、值大小(value size)、值偏置(value offset);数据包包括键和值。
键标识用于指示键的序列号。类型用于指示键值存储请求的操作类型,例如可以为插入(put)、查找(get)以及删除(delete)。其中,插入指示键值存储请求为写入请求,需要将键值存储请求中携带的值(如本申请实施例中的第一值)存储到第一存储器中;查找指示键值存储请求为读取请求,需要从第一存储器中读取与键值存储请求中携带的键对应的值;删除指示需要从第一存储器中删除与键值存储请求中携带的键对应的值。上述三种操作类型仅是举例,本申请实施例并不限定,还可以存在其他操作类型,如更新(update)等。
键大小用于指示键值存储请求中携带的键的大小。值总大小用于指示键值存储请求中携带值的总大小(对应键值存储请求为写入请求,类型为put)、或键值存储请求获取的值的总大小(对应键值存储请求为读取请求,类型为get)、或键值存储请求删除的value的总大小(对应类型为delete的键存请求)。
值偏置用于指示键值存储请求中携带值(如本申请实施例中的第二值)相对于总值(对应本申请实施例中的第一值)首位的偏移量。在本申请实施例中,值偏置可以指示第二值在第一值的位置。值偏置越大,表明第二值在第一值中的位置越靠后。
值大小用于指示该键值存储请求中携带的值(对应本申请实施例中的第一值或第二值)的大小。示例性的,如果一个值的总长度为2024,按照1024来分割,分割后,对于第一个值(如本申请实施例中的第二值),值偏置为0,值大小为1024;第二个值,值偏置为1024,值大小为1000。
本申请实施例提供的一种次级键值存储请求的格式与图5所示的键值存储请求类似可以参见图5。次级键值存储请求也可以分为两部分,一部分为报文头,一部分为数据包(packet)。报文头携带键和值的一些属性信息,具体的,报文头中包括键标识、类型、键大小、值总大小、值大小、值偏置(value offset);数据包包括键和值。
在本申请实施例中以键值存储请求的类型为插入为例,相应的,次级键值存储请求中的类型也为插入。值总大小指示的是数据分割前的值的大小,也就是键值存储请求中携带的第一值的大小。值大小指示次级键值存储请求携带的值的大小(对应本申请实施例中第二值)。值偏置指示次级键值存储请求携带的值(如本申请实施例中的第二值)在键值存储请求中值(对应本申请实施例中的第一值)的偏移位置。在本申请实施例中,通常次级键值存储请求中的值偏置可以为0,表明次级键值存储请求携带的第二值是从第二值在第一值中的起始位置分割的。携带有不同的第二值的次级键值存储请求中的值偏置是不同的,值偏置可以反映出第二值在第一值中的位置顺序。
需要说明的是,类型还可以指示键值存储请求为数据分割前的键值存储请求还是数据分割之后,形成的次级键值存储请求。示例性的,类型中可以增加一个标识位,用于指示键值存储请求为数据分割前的键值存储请求还是次级键值存储请求。
作为另一种可能的实施方式,如图6所示,键值存储请求中还可以增加一个字段为片段(slice),片段用于指示该请求为数据分割前的键值存储请求还是次级键值存储请求。当片段为第一值(如为null)时,指示该请求为数据分割前的键值存储请求,当片段为第二值(如为1)时,指示该请求为次级键值存储请求。
如图7所示,以第一值为5M为例,键值存储器可以将第一值分为五个第二值,每个第二值的大小为1M。这样可以生成五个次级键值存储请求,每个次级键值存储请求中携带一个第二值,对于携带有第一个第二值的次级键值存储请求中的值大小为1M,指示携带的第二值的大小为1M,值偏置可以设置为0,指示第二值从第一值的起始位置分割出的;对于携带有第二个第二值的次级键值存储请求中的值大小为1M,指示携带的第二值的大小为1M,值偏置可以设置为1M,指示第二值是从第一值的1M位置为起始分割出的。
作为一种可能的实施方式,次级键值存储请求可以设置字段更加直观的用于指示携带的第二值在第一值的顺序。示例性的,可以利用片段字段,例如用1指示键值存储请求为次级键值存储请求,次级键值存储请求携带的第二值为第一值分割之后的位置顺序为第一的第二值;用2指示键值存储请求为次级键值存储请求,次级键值存储请求携带的第二值为第一值分割之后的位置顺序为第二的第二值。上述利用片段字段指示仅是举例,例如还可以增加其他字段,本申请实施例并不限定。
次级键值存储请求中数据包中的值为键值存储请求中的值的一部分,在本申请实施例中,次级键值存储请求中数据包中的值为第二值,键值存储请求中数据包中的值为第一值。
次级键值存储请求中报文头的键标识、类型、键大小、值总大小与键值存储请求中的对应字段的内容相同,次级键值存储请求中数据包中的键与键值存储请求中的键相同。
本申请实施例提供了两种不同的数据分割方式,下面分别进行介绍:
方式一、在缓存第一值的过程中,边缓存边分割。
键值存储器在接收到第一值后,可以先缓存第一值。在缓存的过程中,当缓存的数据大小达到第二阈值时,将缓存的数据作为一个第二值,并生成对应的次级键值存储请求。在生成次级键值存储请求时,需要在次级键值存储请求中携带已缓存的数据(也就是第二值),并设置次级键值存储请求的报文头中各个字段。示例性的,可以将值大小字段设置为第二值的大小,值偏置为第二值在第一值中的位置,指示第二值相对于第一值首位的偏移,设置方式可见前述描述,此处不再赘述。
生成了次级键值存储请求后,可以将次级键值存储请求中携带的第二值,存储在为第一值分配的第一存储空间中,由于第二值只是第一值中的一部分,第二值只占用其中一部分存储空间。
然后,键值存储器仍会继续缓存剩余的第一值,在缓存的数据的大小达到第二阈值的情况下(之前缓存的数据已携带在次级键值存储请求中,在这种情况下,缓存的数据大小是从0开始的),将缓存的数据作为一个第二值;生成对应的次级键请求,执行与之前相同的操作,包括设置次级存储键请求,以及在将次级键值存储请求中携带的第二值,存储在为第一值分配的第一存储空间中;在存储第二值时,由于之前在为第一值分配的第一存储空间已存储有一个第二值,则将次级键值存储请求中携带的第二值存储在已存储的第二值之后的存储空间中,以实现按顺序存储。
循环上述过程,直至将第一值缓存完成,需要说明的是,当处于缓存第一值的最后阶段,可能存在第一值缓存完成,但缓存的数据未达到第二阈值的情况。在这种情况下,键值存储器可以直接将缓存的数据作为一个第二值,生成对应的次级键请求,并将次级存储键请求中的第二值存储至第一存储器中。在这种情况下,可以发现分割的多个第二值的大小并不完全相同,可能存在一个第二值的大小小于第二阈值。
在上述说明中,键值存储器接收第一值和分割第一值的过程并行执行,即键值存储器在缓存第一值的过程中,进行数据分割,同时完成第二值的存储过程,也就是说,步骤303和步骤304是交替执行的,这种方式仅是举例。在具体实施过程中,第二值存储的操作(步骤304)可以在将第一值缓存完成,生成了所有次级键值存储请求(步骤303)后再执行,本申请实施例并不限定。
作为一种可能的实施方式,为了实现边缓存边分割的方式,键值存储器可以采用状态机控制的方式。
图8为本申请实施例提供的一种状态机的示意图,如图所示,有限状态机可以设置6种状态,分别为空闲态(IDLE)、等待命令(WAIT_CMD)、等待描述符(WAIT_DSC)、等待数据(WAIT_DATA)、生成描述符(GEN_DSC)、完成(FINISH)状态,状态转换图如图8所示,各个状态的描述和切换可参见如下内容:
IDLE状态:当接收到第一值时,跳转到WAIT_CMD状态;否则,保持在IDLE状态。
WAIT_CMD状态:等待接收插入指令。在这个状态下,若键值存储器解析键值存储请求中的类型错误时,跳转为IDLE状态,接收到第一值无效并丢弃;若解析键值存储请求的类型为插入,跳转为WAIT_DSC状态;否则,保持在WAIT_CMD状态。
WAIT_DSC状态:等待接收卡到主机(card to host,C2H)描述符。C2H描述符用于指示第一值的大小、键值存储器为第一值分配的第一存储空间。键值存储器在接收到键值存储请求并为第一值分配了第一存储空间后,可以生成C2H描述符。
当键值存储器确定了C2H描述符后,跳转为WAIT_DATA状态;否则,保持在WAIT_DSC状态。
WAIT_DATA状态:等待第一值缓存到一帧(以第二阈值为一帧为例)。当第一值缓存达到一帧,将缓存的数据作为第二值。当第一值缓存到一帧,且第一值并未缓存完成,也就是不是最后一帧,跳转到GEN_DSC状态;当第一值的最后一帧数据缓存完成,跳转到FINISH状态;否则,保持在WAIT_DATA状态;这里以第二值的大小为一帧为例,本申请实施例并不限定第二值的大小。
GEN_DSC状态:生成C2H分片描述符。键值存储器可以启动一次数据传输,将第二值传输至第一存储空间。
C2H分片描述符用于指示第二值的大小、第二值的存储地址或第二值的源地址等,其中,第二值的源地址为键值存储器缓存第二值的地址,如键值存储器在第二存储器中缓存第二值的地址;需要说明的是,这里缓存第二值是指键值存储器在缓存第一值时,将缓存的数据作为第二值。键值存储器可以根据C2H分片描述符指示的信息,将对应的次级键值存储请求中携带的第二值存储在第一存储空间中。
需要说明的是,第二值的存储地址指示是用于存储第二值的存储空间。键值存储器可以根据第二值的大小以及第二值在第一值中的位置,确定该存储空间在第一存储空间的位置,并确定第二值的存储地址。示例性的,若键值存储器当前缓存所的第二值为第一值的第一帧,则用于存储第二值的存储空间是第一存储空间中起始位置起、大小为一帧的存储空间,进而可以确定第二值的存储地址;若键值存储器当前缓存所的第二值为第一值的第三帧,则用于存储第二值的存储空间是第一存储空间中3M位置起、大小为一帧的存储空间,进而确定第二值的存储地址。
在这个状态下,生成对应的次级键值存储请求,之后跳转到WAIT_DATA状态;否则,保持在GEN_DSC状态。
FINISH状态:生成最后一片C2H分片描述符(也就是缓存第一值的最后一帧,产生最后一个第二值),标志第一值的缓存操作完成。当第一值完全传输后,跳转到IDLE状态;否则,保持在FINISH状态。
需要说明的是,本申请实施例并不第二阈值的具体数值,可以是一个经验值,也可以是根据具体场景设置的,本申请实施例并不限定。
方式二、第一值缓存完成后,再做分割。
键值存储器也可以在将第一值完全缓存后,再对第一值进行分割,分割为多个第二值。示例性的,键值存储器可以将第一值平均分为多个大小相同的第二值。也可以设置第二阈值,将第一值分割为第二阈值大小的第二值,这种情况下,由于第一值的大小并不一定是第二阈值的整数倍,可能存在其中一个或多个第二值小于第二阈值的情况。
上述分割方式仅是举例,本申请实施例并不限定分割的方式,例如键值存储器还可以对第一值进行随机分割,分割后的每个第二值的大小不同。
完成了第一值的分割后,可以生成多个次级键值存储请求,其中每个次级键值存储请求中携带有其中一个第二值,每个次级键值存储请求中的报文头中的值偏置指示携带的第二值在第一值的位置。
步骤304:键值存储器按照每个次级键值存储请求中携带的第二值在第一值中的位置顺序,将每个次级键值存储请求中携带的第二值存储至第一存储空间。
作为一种可能的实施方式,在存储第二值时,键值存储器可以按照次级键值存储请求中携带的第二值在第一值的位置顺序,按照位置顺序从前到后的顺序存储。示例性的,根据每个次级键值存储请求报文头中的值偏置可以确定出次级键值存储请求中携带的第二值在第一值的位置,可以对每个次级键值存储请求中的报文头中的值偏置按照大小顺序排序,从小到大,依次将对应的次级键值存储请求中携带第二值存至第一存储空间。
作为另一种可能的实施方式,键值存储器在存储次级键值存储请求中携带的第二值时。可以根据第二值在第一值的位置确定第二值在第一存储空间中的存储位置。将第二值存储在第一存储空间中的存储位置,第二值在第一值的位置可以通过次级键值存储请求的报文头中的值偏置确定。
示例性的,次级键值存储请求的报文头中的值偏置为0,则表明次级键值存储请求中携带的第二值位于第一值的起始位置,第二值在第一存储空间存储位置为存储空间的起始点开始的、大小为第二值大小的存储空间。
次级键值存储请求的报文头中的值偏置为1M,则表明次级键值存储请求中携带的第二值起始于第一值的1M位置,第二值在第一存储空间存储位置为存储空的1M数据对应的位置开始、大小为第二值大小存储空间。
键值存储器在将所有次级键值存储请求中的第二值存储在第一存储空间后,结束数据存储操作。
键值存储器判断第一存储空间中已存储的第二值的总大小与第一值的大小是否一致,通过判断结果来确定第一值是否存储完成;若键值存储器可以查询第一存储空间中已存储的第二值,若已存储的第二值的总大小与第一值的大小一致,则确定第一值存储完成。
作为另一种可能的实施方式,键值存储器可以对已存储的每个次级键值存储请求中报文头中的键值大小进行累加,生成累加值,直至累加值等于键值总大小,确定第一值是否存储完成,结束数据存储操作。
基于与方法实施例同一发明构思,本申请实施例还提供了一种键值存储器,用于执行上述方法实施例中键值存储器执行的方法,相关特征可参见上述方法实施例,此处不再赘述,如图9所示,该装置包括接收单元901、分配单元902、分割单元903以及存储单元904:
接收单元901,用于接收键值存储请求,键值存储请求中包括键和第一值,其中,键与第一值对应。
分配单元902,用于在第一存储器中为第一值分配第一存储空间,第一存储器是键值存储器之外的存储器。
分割单元903,用于当第一值的总长度大于或等于第一阈值时,将第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中携带键和一个第二值,次级键值存储请求的数量与第一值分割获得的多个第二值的个数相同。
存储单元904,用于按照每个次级键值存储请求中携带的第二值在第一值中的位置顺序,将每个次级键值存储请求中携带的第二值存储至第一存储空间。
可选的,分割单元903在将第一值分割为多个第二值时,可以边缓存边分割。示例性的,分割单元903可以在缓存第一值的过程中,每当缓存的数据的大小等于第二阈值时,将缓存的数据作为第二值,并将第二值携带在一个次级键值存储请求中,直至第一值缓存完成。当处于第一值的缓存的最后阶段,最后第一值的剩余数据大小小于第二阈值,可以直接将缓存的数据作为第二值,携带在一个次级键值存储请求中;这种情况下,每个次级键值存储请求中携带的第二值的大小不一定完全相同。
可选的,分割单元903在将第一值分割为多个第二值时,也可以采用缓存完成后再进行数据分割的方式;示例性的,分割单元903在第一值缓存完成后,可以将第一值分割为多个第二值;例如,分割单元903可以将第一值分割为N+1个第二值,按照分割顺序排列的多个第二值中,前N个第二值的大小可以等于第二阈值,最后一个第二值,也就是第N+1个第二值的大小可以小于或等于第二阈值,N为大于或等于1的正整数。示例性的,分割单元903也可以将第二值均为多个第二值。
可选的,次级键值存储请求中可以包括一些字段,用于指示携带的第二值的相关信息,如第二值的大小、偏移量等。示例性的,可以包括值偏置,通过值偏置可以指示次级键值存储请求中携带的第二值在第一值中的位置。
可选的,存储单元904在按照每个次级键值存储请求中携带的第二值在第一值中的位置顺序,将每个次级键值存储请求中携带的第二值存储至第一存储空间时,需要先确定位置顺序,之后再存储第二值;示例性的,存储单元904可以根据每个次级键值存储请求中的值偏置,确定每个次级键值存储请求中携带的第二值在第一值中的位置顺序;之后,根据位置顺序,将第二值存储至第一存储空间。
可选的,存储单元904在第一存储器中为第一值分配第一存储空间时,可以预先在第一存储器中配置用于一个或多个键值存储请求中携带的第一值的第二存储空间,存储单元904可以从第二存储空间中为第一值分配第一存储空间,第一存储空间的大小可以等于第一值的大小,也可以大于第一值的大小。存储单元904可以在接收单元901接收到键值存储请求前预先配置第二存储空间;也可以在接收单元901接收到携带键值存储请求之后,存储单元904存储第一值之前,预先配置第二存储空间,这种情况下,第二存储空间的可以等于第一值的大小,也可以大于第一值的大小。
可选的,存储单元904在第一存储器中为第一值分配存储空间时,若在第二存储空间中的空闲空间的大小小于第一值的大小,不能存储第一值,存储单元904可以从第一存储器中为第一值分配第一存储空间。
可选的,存储单元904还可以确定第一值是否已完成存储;示例性的,当第一存储空间中已存储的第二值的总大小等于第一值的大小时,存储单元904可以确定已完成第一值的存储。
可选的,若次级键值存储请求包括值大小,用于指示次级键值存储请求中携带的第二值的大小;存储单元904可以累加已存储的第二值对应的次级键值存储请求中值大小,直至累加值等于第一值的大小,确定第一值已存储完成。
需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
图10为本申请实施例提供的一种键值存储器1000的示意图,如图所示,键值存储器1000包括处理器1001、存储器1002。可选的,键值存储器1000还可以包括通信接口1003。其中,存储器1002和通信接口1003的个数并不构成对本申请实施例的限定,具体实施时,可以根据业务需求任意配置。
存储器1002可以是易失性存储器,例如随机存取存储器;存储器也可以是非易失性存储器,例如只读存储器,闪存,硬盘(hard disk drive,HDD)或固态硬盘(solid-statedrive,SSD)、或者存储器1002是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1002可以是上述存储器的组合。存储器1002可以是上述方法实施例中的第二存储器。
本申请实施例中不限定上述处理器1001以及存储器1002之间的具体连接介质。
处理器1001可以为CPU,该处理器1001还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件、人工智能芯片、片上芯片等。通用处理器可以是微处理器或者是任何常规的处理器等。具有数据收发功能,能够与其他设备进行通信,在如图10装置中,也可以设置独立的数据收发模块,例如通信接口1003,用于收发数据;处理器1001在与其他设备进行通信时,可以通过通信接口1003进行数据传输,如从应用服务器键值客户端接收键值存储请求。
当键值存储器采用图10所示的形式时,图10中的处理器1001可以通过调用存储器1002中存储的计算机执行指令,使得键值存储器可以执行上述任一方法实施例中的键值存储器执行的方法的操作步骤。
可选的,图10中键值存储器的处理器1001可以实现图2中键值存储引擎205和网络卸载引擎207的功能。
图9中的接收单元、分配单元、分割单元以及存储单元的功能/实现过程均可以通过图10中的处理器1001调用存储器1002中存储的计算机执行指令来实现。或者,图9中的分配单元、分割单元以及存储单元的功能/实现过程可以通过图10中的处理器1001调用存储器1002中存储的计算机执行指令来实现,图9中的接收单元的功能/实现过程可以通过图10中的通信接口1003来实现。
基于与方法实施例同一发明构思,本申请实施例还提供了一种键值存储服务器,键值存储服务器的结构可以参见图2,键值存储服务器可以包括键值存储器和第一存储器;第一存储器是键值存储器之外的存储器;键值存储器用于执行上述方法实施例中键值存储器执行的方法,第一存储器用于存储第一值;可选的,还可以包括中央处理器。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述,仅为本发明的具体实施方式。熟悉本技术领域的技术人员根据本发明提供的具体实施方式,可想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (17)
1.一种数据存储方法,其特征在于,该方法包括:
键值存储器接收键值存储请求,所述键值存储请求中携带有键和第一值,其中,所述键与所述第一值对应;
所述键值存储器在第一存储器中为所述第一值分配第一存储空间,所述第一存储器是所述键值存储器之外的存储器;
当所述第一值所包含数据的容量大于或等于第一阈值时,所述键值存储器将所述第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中携带所述键和一个所述第二值,所述次级键值存储请求的数量与所述第一值分割获得的所述多个第二值的个数相同;
所述键值存储器按照每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序,将所述每个次级键值存储请求中携带的第二值存储至所述第一存储空间。
2.如权利要求1所述的方法,其特征在于,所述键值存储器将所述第一值分割为多个第二值,包括:
所述键值存储器在缓存所述第一值的过程中,每当缓存的数据的大小等于第二阈值时,将所述缓存的数据作为所述第二值,将所述第二值携带在一个所述次级键值存储请求中,直至所述第一值缓存完成。
3.如权利要求1所述的方法,其特征在于,所述键值存储器将所述第一值分割为多个第二值,包括:
所述键值存储器在所述第一值缓存完成后,将所述第一值分割为多个所述第二值,其中,所述第一值的按照分割顺序排列的多个所述第二值中,前N个第二值的大小等于所述第二阈值,第N+1个第二值的大小小于或等于所述第二阈值,N为大于或等于1的正整数。
4.如权利要求1所述的方法,其特征在于,所述次级键值存储请求包括值偏置,所述值偏置用于指示次级键值存储请求中携带的所述第二值在所述第一值中的位置。
5.如权利要求1或4所述的方法,其特征在于,所述键值存储器按照每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序,将所述每个次级键值存储请求中携带的第二值存储至所述第一存储空间,包括:
所述键值存储器根据每个次级键值存储请求中的值偏置,确定每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序;
所述键值存储器根据所述位置顺序,将所述第二值存储至所述第一存储空间。
6.如权利要求1所述的方法,其特征在于,所述键值存储器在第一存储器中为所述第一值分配第一存储空间,包括:
所述键值存储器从第二存储空间中为所述第一值分配所述第一存储空间,所述第二存储空间为所述第一存储器中预配置的用于存储多个所述键值存储请求中携带的第一值,所述第一存储空间的大小等于所述第一值的大小。
7.如权利要求6所述的方法,其特征在于,所述键值存储器在第一存储器中为所述第一值分配第一存储空间,包括:
所述键值存储器在所述第二存储空间中的空闲空间的大小小于所述第一值的大小的情况下,从所述第一存储器中为所述第一值分配所述第一存储空间。
8.如权利要求1或6所述的方法,其特征在于,所述方法还包括:
当所述第一存储空间中已存储的第二值的总大小等于所述第一值的大小时,所述键值存储装置确定已完成所述第一值的存储。
9.一种键值存储器,其特征在于,所述键值存储器包括接收单元、分配单元、分割单元以及存储单元:
所述接收单元,用于接收键值存储请求,所述键值存储请求中携带有键和第一值,其中,所述键与所述第一值对应;
所述分配单元,用于在第一存储器中为所述第一值分配第一存储空间,所述第一存储器是所述键值存储器之外的存储器;
所述分割单元,用于当所述第一值所包含数据的容量大于或等于第一阈值时,将所述第一值分割为多个第二值,并生成多个次级键值存储请求,每个次级键值存储请求中携带所述键和一个所述第二值,所述次级键值存储请求的数量与所述第一值分割获得的所述多个第二值的个数相同;
所述存储单元,用于按照每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序,将所述每个次级键值存储请求中携带的第二值存储至所述第一存储空间。
10.如权利要求9所述的键值存储器,其特征在于,所述分割单元在将所述第一值分割为多个第二值时,具体用于:
在缓存所述第一值的过程中,每当缓存的数据的大小等于第二阈值时,将所述缓存的数据作为所述第二值,将所述第二值携带在一个所述次级键值存储请求中,直至所述第一值缓存完成。
11.如权利要求9所述的键值存储器,其特征在于,所述分割单元在将所述第一值分割为多个第二值时,具体用于:
在所述第一值缓存完成后,将所述第一值分割为多个所述第二值,其中,所述第一值的按照分割顺序排列的多个所述第二值中,前N个第二值的大小等于所述第二阈值,第N+1个第二值的大小小于或等于所述第二阈值,N为大于或等于1的正整数。
12.如权利要求9所述的键值存储器,其特征在于,所述次级键值存储请求包括值偏置,所述值偏置用于指示次级键值存储请求中携带的所述第二值在所述第一值中的位置。
13.如权利要求9或12所述的键值存储器,其特征在于,所述存储单元在按照每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序,将所述每个次级键值存储请求中携带的第二值存储至所述第一存储空间时,具体用于:
根据每个次级键值存储请求中的值偏置,确定每个次级键值存储请求中携带的第二值在所述第一值中的位置顺序;
根据所述位置顺序,将所述第二值存储至所述第一存储空间。
14.如权利要求9所述的键值存储器,其特征在于,所述存储单元在第一存储器中为所述第一值分配第一存储空间时,具体用于:
从第二存储空间中为所述第一值分配所述第一存储空间,所述第一存储空间为所述第一存储器中预配置的用于存储多个所述键值存储请求中携带的第一值,所述第一存储空间的大小等于所述第一值的大小。
15.如权利要求14所述的键值存储器,其特征在于,所述存储单元在第一存储器中为所述第一值分配存储空间时,具体用于:
在所述第二存储空间中的空闲空间的大小小于所述第一值的大小的情况下,从所述第一存储器中为所述第一值分配所述第一存储空间。
16.如权利要求9或14所述的键值存储器,其特征在于,所述存储单元还用于:
当所述第一存储空间中已存储的第二值的总大小等于所述第一值的大小时,确定已完成所述第一值的存储。
17.一种键值存储服务器,其特征在于,所述键值存储服务器包括第一存储器和键值存储器,所述第一存储器是所述键值存储器之外的存储器,所述键值存储器用于执行如权利要求1~8任一所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910252054.XA CN110083307A (zh) | 2019-03-29 | 2019-03-29 | 数据存储方法、存储器和服务器 |
PCT/CN2020/075170 WO2020199760A1 (zh) | 2019-03-29 | 2020-02-14 | 数据存储方法、存储器和服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910252054.XA CN110083307A (zh) | 2019-03-29 | 2019-03-29 | 数据存储方法、存储器和服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110083307A true CN110083307A (zh) | 2019-08-02 |
Family
ID=67413914
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910252054.XA Pending CN110083307A (zh) | 2019-03-29 | 2019-03-29 | 数据存储方法、存储器和服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110083307A (zh) |
WO (1) | WO2020199760A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020199760A1 (zh) * | 2019-03-29 | 2020-10-08 | 华为技术有限公司 | 数据存储方法、存储器和服务器 |
CN112511450A (zh) * | 2020-11-02 | 2021-03-16 | 杭州迪普信息技术有限公司 | 一种流量控制设备与方法 |
WO2021135574A1 (zh) * | 2019-12-30 | 2021-07-08 | 深圳云天励飞技术股份有限公司 | 数据存储方法、装置及终端设备 |
CN113609090A (zh) * | 2021-08-06 | 2021-11-05 | 杭州网易云音乐科技有限公司 | 数据存储方法及装置、计算机可读存储介质、电子设备 |
CN113742555A (zh) * | 2021-09-10 | 2021-12-03 | 北京锐安科技有限公司 | 热点侦测方法、装置、侦测服务器、热点侦测系统及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8433695B2 (en) * | 2010-07-02 | 2013-04-30 | Futurewei Technologies, Inc. | System architecture for integrated hierarchical query processing for key/value stores |
US20120284317A1 (en) * | 2011-04-26 | 2012-11-08 | Dalton Michael W | Scalable Distributed Metadata File System using Key-Value Stores |
CN106155586B (zh) * | 2016-05-31 | 2019-03-08 | 华为技术有限公司 | 一种存储方法、服务器及存储控制器 |
CN110083307A (zh) * | 2019-03-29 | 2019-08-02 | 华为技术有限公司 | 数据存储方法、存储器和服务器 |
-
2019
- 2019-03-29 CN CN201910252054.XA patent/CN110083307A/zh active Pending
-
2020
- 2020-02-14 WO PCT/CN2020/075170 patent/WO2020199760A1/zh active Application Filing
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020199760A1 (zh) * | 2019-03-29 | 2020-10-08 | 华为技术有限公司 | 数据存储方法、存储器和服务器 |
WO2021135574A1 (zh) * | 2019-12-30 | 2021-07-08 | 深圳云天励飞技术股份有限公司 | 数据存储方法、装置及终端设备 |
CN112511450A (zh) * | 2020-11-02 | 2021-03-16 | 杭州迪普信息技术有限公司 | 一种流量控制设备与方法 |
CN112511450B (zh) * | 2020-11-02 | 2022-05-31 | 杭州迪普信息技术有限公司 | 一种流量控制设备与方法 |
CN113609090A (zh) * | 2021-08-06 | 2021-11-05 | 杭州网易云音乐科技有限公司 | 数据存储方法及装置、计算机可读存储介质、电子设备 |
CN113742555A (zh) * | 2021-09-10 | 2021-12-03 | 北京锐安科技有限公司 | 热点侦测方法、装置、侦测服务器、热点侦测系统及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2020199760A1 (zh) | 2020-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110083307A (zh) | 数据存储方法、存储器和服务器 | |
US8068512B2 (en) | Efficient utilization of cache servers in mobile communication system | |
CN107888657A (zh) | 低延迟分布式存储系统 | |
CN103607428B (zh) | 一种访问共享内存的方法和装置 | |
CN107229415A (zh) | 一种数据写方法、数据读方法及相关设备、系统 | |
CN111585887B (zh) | 基于多个网络的通信方法、装置、电子设备及存储介质 | |
CN111338806B (zh) | 一种业务控制方法及装置 | |
CN104219279A (zh) | 用于超大规模分布式处理应用的模块化架构的系统和方法 | |
CN104811493A (zh) | 一种网络感知的虚拟机镜像存储系统及读写请求处理方法 | |
US20150112934A1 (en) | Parallel scanners for log based replication | |
CN107992270B (zh) | 一种多控存储系统全局共享缓存的方法及装置 | |
CN115270033A (zh) | 一种数据访问系统、方法、设备以及网卡 | |
US20070088854A1 (en) | Apparatus for searching TCP and UDP sockets | |
US11269687B2 (en) | Map reduce using coordination namespace hardware acceleration | |
US20170255393A1 (en) | Storage device and storage method | |
CN117076140B (zh) | 一种分布式计算方法、装置、设备、系统及可读存储介质 | |
CN116155828B (zh) | 一种多个虚拟队列的报文保序方法及其装置、存储介质、电子设备 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN114745271B (zh) | 一种云游戏服务器优化方法、服务器及存储介质 | |
WO2024021470A1 (zh) | 一种跨区域的数据调度方法、装置、设备及存储介质 | |
CN114466031A (zh) | 一种cdn系统节点配置方法、装置、设备及存储介质 | |
CN114205354A (zh) | 事件管理系统、事件管理方法、服务器及存储介质 | |
CN115904211A (zh) | 一种存储系统、数据处理方法及相关设备 | |
CN114089912A (zh) | 基于消息中间件的数据处理方法及装置、存储介质 | |
CN109254870A (zh) | 数据备份的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |