CN113568908A - 一种键值请求并行调度方法及系统 - Google Patents
一种键值请求并行调度方法及系统 Download PDFInfo
- Publication number
- CN113568908A CN113568908A CN202110804293.9A CN202110804293A CN113568908A CN 113568908 A CN113568908 A CN 113568908A CN 202110804293 A CN202110804293 A CN 202110804293A CN 113568908 A CN113568908 A CN 113568908A
- Authority
- CN
- China
- Prior art keywords
- request
- requests
- key value
- key
- storage system
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种键值请求并行调度方法及系统,部署多个键值存储系统实例、多个请求处理线程和多个请求队列,并将它们通过编号一一绑定;在接收到用户发出的键值请求时,通过对每个键值请求执行请求响应步骤,保证了在有多个并发的用户请求时可以将它们分配到多个请求队列中,并通过多个并行的请求处理线程发送到多个键值存储系统实例上执行,从而增加了IO的并行度,实现对CPU多线程的利用;同时,每个键值存储系统实例所管理的键相互独立,避免不同键值存储系统实例之间的资源竞争和数据同步,以便于高效地并行执行,从而实现键值请求处理速度的大幅提升。
Description
技术领域
本发明属于计算机存储领域,更具体地,涉及一种键值请求并行调度方法及系统。
背景技术
近年来,伴随着云计算、大数据、物联网、人工智能等信息技术的发展和应用,数据量呈现爆炸性增长,如何有效的存储数据并提供高效的数据存取服务,成为了现有的计算机存储系统的重要问题。
键值存储系统是一种常见的计算机存储系统,其存储数据的单元是由键和值的两段数据构成的键值对。键值存储系统用于将键值对数据存入持久存储设备,并提供按键来查询键值对的功能。键值存储请求接口包括键值对的存储(put)、修改(update)、删除(delete)、读取(get)、范围查询(scan)等键值请求。存储和修改请求的参数为键和值,用于将新的键值对存入或者根据键修改对应的值;删除请求的参数为键,用于根据键将已经存在的键值对删除。读取请求的参数为键,用于根据键数据查询是否存储了与其对应的键值对,如果存在则返回值数据。范围查询请求的输入参数为一个起始键和一个结束键,用于查询并返回起始键到结束键范围内所有的键值对数据。
传统的键值存储系统,例如LevelDB、RocksDB、Cassandra等,往往为以磁盘为首的低并行度低带宽的存储设备设计,仅仅使用单线程就可以达到很高的带宽。而新型的高带宽存储设备(例如SSD、NVM等)具有更高的带宽和并行性,传统键值存储系统的单线程IO方式不能充分利用存储设备的带宽,导致使用高性能的存储设备并不能有效提升键值存储系统的性能。另外,传统键值存储系统对并发的键值存储请求往往使用串行调度,在写日志等步骤上都会将并发的多个请求按顺序逐一执行,因此单个键值存储系统的请求处理流程往往只使用单线程,导致CPU单核占用率过高,限制了请求的处理速度,没有充分利用现代计算机多核CPU的多线程并行处理功能。因此,传统键值存储系统在基于高带宽存储设备和多核CPU的硬件平台上的请求处理速度并有没有达到应有的提升。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种键值请求并行调度方法及系统,由此解决现有键值存储系统缺乏并行性和带宽利用率低的缺陷的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种键值请求并行调度方法,包括:
S1,创建n个键值存储系统实例、请求队列和请求处理线程,并按照相同的方式进行编号;其中,n为大于1的整数;
S2,接收用户请求,并确定所述请求的类型;
S3,若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
优选地,所述等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行,包括:
步骤C1,编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,进入步骤C2;若无,则继续轮询检查请求队列;
步骤C2,所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,进入步骤C3;
步骤C3,所述请求处理线程接收所述键值存储系统实例反馈的处理结果,并将所述处理结果发送至用户,返回步骤C1。
优选地,所述编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,具体为:
若所述请求队列中有多个相邻的同类型请求,则所述请求处理线程批量获取所述多个相邻的同类型请求。
优选地,所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,具体为:
在所述多个相邻的同类型请求为键值对存储、修改或删除请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,按顺序将所述同类型请求依次发送至所述键值存储系统实例中执行;
在所述多个相邻的同类型请求为键值对读取请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求时,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,将所述同类型请求以多线程并行的方式同时发送至所述给键值存储系统实例处理中执行。
优选地,若所述多个相邻的同类型请求为键值对存储、修改或删除请求,则当所述请求处理线程获取的多个相邻的同类型请求的键值对数据大小之和大于底层存储设备的最小写单位时,停止获取所述同类型请求;
若所述多个相邻的同类型请求为键值对读取请求,则当所述请求处理线程获取的多个相邻的同类型请求的数量大于CPU核数时,停止获取所述同类型请求。
优选地,所述预设映射规则基于哈希函数确定。。
优选地,所述等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行,包括:
步骤D1,n个请求处理线程分别检查对应的请求队列中是否有请求,若有,则分别从所述请求队列中获取请求,进入步骤D2;若无,则继续轮询检查请求队列;
步骤D2,所述n个请求处理线程分别将获取的请求发送到对应的键值存储系统实例中执行,进入步骤D3;
步骤D3,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,返回步骤D1。
优选地,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,具体为:
将所述处理结果按照键从小到大的顺序依次发送至用户。
优选地,所述将n个键值存储系统实例进行编号之后,还包括:
存储所述n个键值存储系统实例与编号的对应关系。
按照本发明的另一方面,提供了一种键值请求并行调度系统,包括:
系统初始化模块,用于将n个键值存储系统实例进行编号;创建n个请求队列和请求处理线程并按照相同的方式进行编号,以使各键值存储系统实例、请求队列和请求处理线程一一对应;其中,n为大于1的整数,
请求响应模块,用于在接收到请求时,确定所述请求的类型;
请求处理模块,用于若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
1、本发明提供的方法,部署多个键值存储系统实例、多个请求处理线程和多个请求队列,并将它们通过编号一一绑定;在接收到用户发出的键值请求时,通过对每个键值请求执行请求响应步骤,保证了在有多个并发的用户请求时可以将它们分配到多个请求队列中,并通过多个并行的请求处理线程发送到多个键值存储系统实例上执行,从而增加了IO的并行度,实现对CPU多线程的利用;同时,每个键值存储系统实例所管理的键相互独立,避免不同键值存储系统实例之间的资源竞争和数据同步,以便于高效地并行执行,从而实现键值请求处理速度的大幅提升。
2、本发明提供的方法,当请求为键值对存储、修改、删除或读取请求时,通过预设的映射规则保证了同样的键只会被映射到同一个队列,因此每个键值存储系统实例中存储的键都是独立的,在响应键值对读取请求时只需要根据映射规则去对应编号的键值存储系统实例中查询即可,从而保证了具有同样键参数的键值对存储、修改、删除或读取请求最终只会在一个键值存储系统实例上执行,不会出现多余的访问开销,而每个键值存储系统实例上能执行多个键参数符合映射规则的键值请求;当请求为键值对范围查询请求时,将范围查询请求复制并放入所有请求队列中,保证了范围查询请求的并行执行,加速了范围查询请求的处理速度,减少处理延迟。
3、本发明提供的方法,当请求处理线程从对应的分区请求队列的队头获取请求时,将相邻的多个键值对存储、修改或删除请求合并执行,一方面减少了分开处理多个请求的软件开销,另一方面适应底层存储设备的IO粒度,进一步提高了键值对存储、修改、删除或读取请求的处理速度;将相邻的多个键值对读取请求合并与并行执行,提高了处理键值对读取请求的并行度,进一步提高了键值对读取请求的处理速度。
4、本发明提供的方法,对批量获取的键值对存储、修改、删除或读取请求进行数量上的限制,能够减少请求处理的尾延迟。
5、本发明提供的方法,使用哈希函数作为键参数到编号i的映射规则进行请求分配,可以将请求均匀地分配到每个请求队列中,从而保证了每个键值存储系统实例的负载均衡;在这种负载均衡的情况下,多个键值存储系统实例可以充分地并行处理请求,进一步提升系统整体的并行度,使系统维持在高并行度的状态,从而提升键值请求的处理速度。
6、本发明提供的方法,将n个键值存储系统实例进行编号之后,还包括存储所述n个键值存储系统实例与编号的对应关系,可以通过加载现有的n个键值存储系统实例和其编号代替键值存储系统实例的初始化。当人为或故障导致调度系统关闭时,若需要重启整个调度系统,可以根据记录恢复原来的编号信息,以还原到原来的映射关系和绑定关系。因为重启后编号和键值存储系统实例的对应关系没有改变,调度系统关闭前执行键值存储请求而存入的键值对可以被正确地读取到。
附图说明
图1为本发明提供的键值请求并行调度方法流程示意图之一;
图2为本发明提供的键值请求并行调度方法流程示意图之二;
图3为本发明提供的键值请求并行调度方法流程示意图之三;
图4为现有键值请求调度方法示意图;
图5为本发明提供的键值请求并行调度方法流程示意图之四;
图6为本发明提供的键值请求并行调度方法流程示意图之五;
图7为本发明提供的键值请求并行调度方法中请求处理线程批量处理存储、修改或删除请求流程示意图;
图8为本发明提供的键值请求并行调度方法中请求处理线程批量处理读取请求流程示意图之一;
图9为本发明提供的键值请求并行调度方法中请求处理线程批量处理读取请求流程示意图之二。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明实施例提供一种键值请求并行调度方法,如图1-2所示,包括:
S1,创建n个键值存储系统实例、请求队列和请求处理线程,并按照相同的方式进行编号;其中,n为大于1的整数。
具体地,所述步骤S1为系统初始化,包括n个键值存储系统实例的初始化、n个请求队列的初始化、以及n个请求处理线程的初始化。
所述键值存储系统实例个数n为用户预设的个数,根据用户预设的实例数n,初始化n个键值存储系统软件实例:将所述n个键值存储系统软件实例按1~n进行编号;
同时,创建n个请求队列和n个请求处理线程,将请求队列、请求处理线程也按照1~n进行编号,完成所述n个请求队列和n个请求处理线程的初始化,以表示三者的一一绑定关系。
上述系统初始化步骤初始化了多个键值存储实例并为其编号,同时创建同样数量的请求队列和请求处理线程,并用编号将它们一一绑定。
优选地,所述将n个键值存储系统实例进行编号之后,还包括:
存储所述n个键值存储系统实例与编号的对应关系。
具体地,将所述n个键值存储系统实例与编号的对应关系记录并存储至硬件上;当已经存在被初始化好的n个键值存储系统实例,并且已经记录并存储了所述n个键值存储系统实例与编号的对应关系时,可以通过加载现有的n个键值存储系统实例和其编号代替键值存储系统实例的初始化。
上述初始化方法适用于,当人为或故障导致调度系统关闭时,若需要重启整个调度系统,可以根据记录恢复原来的编号信息,以还原到原来的映射关系和绑定关系。因为重启后编号和键值存储系统实例的对应关系没有改变,调度系统关闭前执行键值存储请求而存入的键值对可以被正确地读取到。
优选地,可以是在首次进行系统初始化步骤时,将n个键值存储系统实例进行编号之后,记录并存储所述n个键值存储系统实例与编号的对应关系;也可以是在非首次进行系统初始化步骤时,将n个键值存储系统实例进行编号之后,记录并存储所述n个键值存储系统实例与编号的对应关系。
由于记录并存储了键值存储系统实例的编号,再根据预设的映射关系就可以知道具体某个键值存储系统实例中存储的键范围。
S2,接收用户请求,并确定所述请求的类型;
S3,若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;其中,i∈n;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
键值请求包括键值对的存储、修改、删除、读取、范围查询等请求。
具体地,所述步骤S2-S3包括请求响应和请求处理,所述请求响应步骤在接收到键值请求时调用。
在接收到请求时,确定所述请求的类型;当请求为键值对存储、修改、删除或读取请求,则所述请求响应包括:
B1计算编号:当接收到键值请求时,根据键值请求中的键参数与编号和预设的映射规则,计算出该键参数对应的编号i,然后进入步骤B2;
B2请求分配:将请求放入的编号为i的请求队列的队尾,然后等待该请求被请求处理线程获取并发送至编号为i的键值存储系统实例中执行。
也即,在接收到用户发送的键值请求时,使用请求响应步骤根据预设的映射关系将键值请求分配到对应的请求队列中。
本发明提供的方法,通过部署多个键值存储系统实例、多个请求处理线程和多个请求队列,并将它们通过编号一一绑定;将用户发送的多个键值请求分配至多个请求队列,并通过多个并行的请求处理线程发送到多个键值存储系统实例上执行,充分利用高带宽存储介质的并行IO能力和现代计算机CPU的多线程处理能力;同时,每个键值存储系统实例所管理的键相互独立,避免不同键值存储系统实例之间的资源竞争和数据同步,以便于高效地并行执行,从而实现键值请求处理速度的大幅提升。
优选地,所述预设映射规则基于哈希函数确定。
具体地,在B1步骤中,当接收到的请求是键值对存储、修改、删除、或读取请求时,使用哈希函数作为键参数到编号i的映射规则,即将键数据对n取余的结果加一,得到i。
优选地,所述等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行,即所述请求处理步骤,如图3所示,包括:
步骤C1,编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,进入步骤C2;若无,则继续轮询检查请求队列。
具体地,所述请求处理步骤由步骤S1中创建的请求处理线程执行。请求处理线程检查其绑定的请求队列中是否有键值请求,若请求队列中有请求,从请求队列的队头中获取键值请求,然后进入步骤C2;若没有请求,则继续轮询检查请求队列。
步骤C2,所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,进入步骤C3。
具体地,请求处理线程获取到键值请求后,将获取的请求发送到绑定的键值存储系统实例中进行执行,并等待执行完毕后进入步骤C3。
步骤C3,所述请求处理线程接收所述键值存储系统实例反馈的处理结果,并将所述处理结果发送至用户,返回步骤C1。
具体地,请求处理线程接收键值存储系统实例执行完毕后反馈的处理结果,该请求视为执行完毕,回到步骤C1。
优选地,所述编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,具体为:
若所述请求队列中有多个相邻的同类型请求,则所述请求处理线程批量获取所述多个相邻的同类型请求。
具体地,对请求进行批量处理可以减少软件开销,同时处理多个请求也有助于增加并行度。但如果将读请求和写请求同时处理,可能会因为无法保证请求执行顺序而读到错误的数据,因此批量获取请求被限制为只能获取相邻的同类型请求。
所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,具体为:
在所述多个相邻的同类型请求为键值对存储、修改或删除请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,按顺序将所述同类型请求依次发送至所述键值存储系统实例中执行;
在所述多个相邻的同类型请求为键值对读取请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求时,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,将所述同类型请求以多线程并行的方式同时发送至所述给键值存储系统实例处理中执行。
具体地,当请求处理线程从对应的分区请求队列的队头获取请求(即步骤C1)时,如果队头有相邻的多个键值对存储、修改或删除请求或者多个相邻的键值对读取请求,批量获取这些请求并在后续的C2步骤中批量处理。
其中,对于多个键值对存储、修改或删除请求,若键值存储系统实例支持批量存储事务,将这些请求封装为一个批量存储事务,让绑定的键值存储系统实例处理。若不支持,按顺序在键值存储系统实例上处理。
对于多个键值对读取请求,若键值存储系统实例支持批量读取事务,将这些请求封装为一个批量读取事务,发送给绑定的键值存储系统实例处理。若不支持时,将这些读取请求以多线程并行的方式同时发射给键值存储系统实例处理。
这种批量处理方法尽可能利用键值存储系统本身的功能,进一步减少软件开销。
优选地,若所述多个相邻的同类型请求为键值对存储、修改或删除请求,则当所述请求处理线程获取的多个相邻的同类型请求的键值对数据大小之和大于底层存储设备的最小写单位时,停止获取所述同类型请求。
具体地,批量获取键值对存储、修改或删除请求的数量有限制,当获取的请求的键值对数据大小之和大于底层存储设备的最小写单位时,则不再继续获取更多请求,直接进入批量处理步骤C2。
一次性批量处理过多的存储、修改或删除请求会导致请求处理的尾延迟上升,因此需要对批量获取请求的数量进行限制。对于存储、修改或删除请求,一批键值请求包含键值对的大小之和决定了键值存储系统实例写日志的IO大小,当该IO大小小于底层存储设备的最小写单位时,会产生写放大,而当该IO大小达到底层存储设备的最小写单位时,有利于IO并行。
若所述多个相邻的同类型请求为键值对读取请求,则当所述请求处理线程获取的多个相邻的同类型请求的数量大于CPU核数时,停止获取所述同类型请求。
具体地,批量获取键值对读取请求的数量有限制,当获取的请求数量大于CPU核数时,则不再获取更多请求,直接进入批量处理步骤C2。
一次性批量处理过多键值对读取请求也会导致请求处理的尾延迟上升,因此也需要限制批量获取请求的数量。对于键值对读取请求,无论底层存储设备是否支持批量读取事务,最终都会使用多线程的方法进行并行读取,而超过CPU核数的线程数带来的性能提升有限,还会引入更多线程创建开销。
若所述请求为键值对范围查询请求,则所述请求响应包括:
复制n个同样的范围查询请求分别放入所述n个请求队列中,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
当接收到的请求是范围查询请求时,不进行计算步骤,而是将复制n个同样的范围查询请求放入全部n个请求队列中,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
由于范围查询请求可能涉及所有键值存储系统实例,因此将该请求复制到所有请求队列中,让所有键值存储系统实例并行执行效率较高。
优选地,所述等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行,即所述请求处理步骤,包括:
步骤D1,n个请求处理线程分别检查对应的请求队列中是否有请求,若有,则分别从所述请求队列中获取请求,进入步骤D2;若无,则继续轮询检查请求队列。
具体地,所述请求处理步骤由步骤S1中创建的请求处理线程执行。请求处理线程检查其绑定的请求队列中是否有键值请求,若请求队列中有请求,从请求队列的队头中获取键值请求,然后进入步骤D2;若没有请求,则继续轮询检查请求队列。
步骤D2,所述n个请求处理线程分别将获取的请求发送到对应的键值存储系统实例中执行,进入步骤D3。
具体地,请求处理线程获取到键值请求后,将获取的请求发送到绑定的键值存储系统实例中进行执行,并等待执行完毕后进入步骤D3。
步骤D3,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,返回步骤D1。
具体地,请求处理线程接收键值存储系统实例执行完毕后反馈的处理结果,该请求视为执行完毕,回到步骤D1。
优选地,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,具体为:
将所述处理结果按照键从小到大的顺序依次发送至用户。
具体地,当全部n个复制的范围查询请求都执行完毕后,将这些结果按键排序后,一起返回给用户。
由于键值存储系统在处理范围查询请求时,往往会按照键从小到大的顺序将结果返回给用户。为了保证和不使用本调度方法时用户发送范围查询请求得到的执行结果一致,在所有键值存储系统实例都返回执行结果后将结果排序,再返回给用户。
本发明应用的场景为计算机软硬件系统之中,用于根据用户请求将键值数据存储到存储设备上,并提供增删改查(存储、删除、修改、读取、范围查询)等功能。现有技术中常见的应用案例如图4所示,实际执行键值对的存储、删除、修改、读取、范围查询等功能的程序(例如LevelDB、RocksDB、Cassandra等,这里称为键值存储系统实例)的上层是用户应用程序,下层是文件系统以及其管理的存储设备(例如HDD,SSD,NVM等),存储设备可以为一个或多个。用户通过用户应用程序向键值存储系统发出键值请求,包括存储请求、删除请求、修改请求、读取请求、范围查询请求等多种类型。键值存储系统在处理请求时,会将键值数据和其他索引数据以文件形式存储在文件系统中,进而由文件系统存储在存储设备中,以保证数据在硬件中的持久化。在该案例中,虽然允许多个用户应用程序同时发出请求,但单个键值存储系统处理这些请求时,往往会因为并行度不够导致无法发挥底层存储设备的全部带宽。
本发明提供的应用案例如图5所示,由调度系统在具体应用场景中的位置可知,与如图4所示的常见应用案例相比,本发明在键值存储系统和用户应用程序之间加入了一层调度系统,并允许同时存在多个键值存储系统(每个键值存储系统在本发明中被称为一个键值存储系统实例)。用户应用程序发出的请求经过调度系统的调度,最终被分配到多个键值存储系统上并行执行。而每个键值存储系统实例在文件系统上分别以文件形式维护自己所需要存储的键值数据和索引数据。最终这些数据被文件系统存储在底层的一个或多个存储设备上。
下面以一个具体的例子对本发明提供的方法进行说明。
如图6所示,预设的实例数n=4,系统初始化步骤S1初始化了4个键值存储系统实例,创建了4个请求队列和4个请求处理线程。并将它们用标记1~4编号的方式一一绑定,分为四组。
如果执行该初始化步骤时是该调度系统的初次初始化,此时可以记录并存储键值存储系统实例和编号的对应关系。如果执行该初始化步骤时是该调度系统被关闭后的重启,此时可以利用记录的键值存储实例和编号的对应关系恢复键值存储实例的编号,并建立新的请求队列和请求处理线程与其绑定。
使用的键值存储系统会将其数据全部存储在同一目录下,并且具有在关闭后可以通过输入数据所在目录恢复该键值存储系统的功能。此时,在初次初始化中可以用不同目录作为不同键值存储系统实例的数据存储目录,并且通过目录名记录对应键值存储系统实例的编号;在重启时,根据使用这些目录对键值存储系统实例进行恢复,并根据目录名恢复其在调度系统中的编号。
步骤S2,在接收到键值请求时,确定所述请求的类型;
步骤S3,若所述请求为键值对存储、修改、删除或读取请求,请求响应步骤包括:
B1计算编号:当接收到键值请求时,根据键值存储请求中的键参数和预设的映射规则,计算出该键参数对应的编号i,然后进入B2步骤。其中,预设的映射规则为:编号i等于键参数对4取余加一。因此键参数为1、10、7、0的四个键值请求计算得到的编号i分别为2、3、4、1。
B2请求分配:将请求放入的编号为i的请求队列的队尾,然后等待该请求被请求处理线程获取并执行完成。在图1所示的基础实施例中,四个计算得到编号i不同的键值请求被放入了四个请求队列的队尾。
若所述请求为键值对范围查询请求,请求响应步骤包括:
复制n个所述请求,并放入每个请求队列的队尾。等待这些请求全部执行完成后,对每个请求的处理结果按键排序,之后将结果返回给用户并结束请求响应步骤。
请求处理步骤包括:
C1,请求处理线程检查其绑定的请求队列中是否有键值请求。若请求队列中有请求,从请求队列的队头中获取键值请求,然后进入步骤C2;若没有请求,则继续轮询检查请求队列。如图2所示,所有请求处理线程在轮询检查请求队列是否有请求;其中,编号为1的请求处理线程在所述的四个键值请求在B2步骤被分配到请求队列后,会检查到并获取请求队列中的“存储key=0”的请求,其他请求处理线程以此类推。
C2,请求处理线程获取到键值请求后,将获取的请求发送到绑定的键值存储系统实例中进行执行,并等待执行完毕执行步骤C3。如图2所示,四个请求处理线程可以并行地将获取到的键值请求发送到绑定的键值存储系统实例中执行,并等待执行结果。
C3,键值存储系统实例执行完毕后,将处理结果发送至用户,此时将该请求视为执行完毕。之后回到步骤C1。如图2所示,当一个键值存储系统实例完成了一个请求的执行,请求处理线程接收并暂存键值存储系统实例返回的处理结果,并将所述处理结果发送至用户,该请求视为执行完毕。
优选地,某个请求处理线程会在步骤C1轮询检查请求队列时发现请求队列的队头存在多个相邻的键值对存储、修改、删除请求或者多个相邻的键值对读取请求。此时请求处理线程会将其批量获取。
优选地,某个请求处理线程在C1步骤获取多个存储、修改、删除请求时,会设置一个请求键值对长度和L。初始L为0,每获取一个键值存储请求L就会增加该键值对长度。若底层存储设备为块设备,其最小写入单元为4KB,那么当L超过4KB时,将不再获取更多的键值存储请求,将L重置为0,并进入步骤C2。
优选地,某个请求处理线程在C1步骤获取多个键值对读取请求时,若CPU的核心数为T,那么当获取的读取请求数量为T时,将会停止获取更多的请求,并进入步骤C2。
优选地,键值存储系统实例支持批量写入事务(例如LevelDB和RocksDB的WriteBatch),即允许将多个存储、修改或删除请求封装在一起并作为一个请求执行。此时,请求处理线程的执行步骤如图7所示。当步骤C1获取了多个键值存储请求时,在步骤C2中将会将其封装为一个批量存储事务(例如创建一个WriteBatch,并将这些请求添加到该WriteBatch),然后发送到键值存储系统实例批量执行。
优选地,键值存储系统实例支持批量读取事务(例如RocksDB的Multiget),即允许将多个读取请求封装在一起并作为一个请求执行。如图8所示,当步骤C1获取了多个键值对读取请求时,在步骤C2中将会将其封装为一个批量读取事务(例如这些键值读取请求的key放入一个数组,然后将该数组作为Multiget的参数),然后发送到键值存储系统实例批量执行。等待执行完毕后进入步骤C3。
优选地,键值存储系统实例不支持批量读取事务(例如LevelDB),如图9所示,当步骤C1获取了多个键值对读取请求时,在步骤C2创建等同于键值读取请求数量的线程,每个线程将其中一个键值对读取请求发送到键值存储系统实例中执行。等待全部键值读取请求执行完毕后进入步骤C3。
下面对本发明提供的键值请求并行调度系统进行描述,下文描述的键值请求并行调度系统与上文描述的键值请求并行调度方法可相互对应参照。
本发明实施例提供一种键值请求并行调度系统,包括:
系统初始化模块,用于将n个键值存储系统实例进行编号;创建n个请求队列和请求处理线程并按照相同的方式进行编号,以使各键值存储系统实例、请求队列和请求处理线程一一对应;其中,n为大于1的整数,
请求响应模块,用于在接收到请求时,确定所述请求的类型;
请求处理模块,用于若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
具体地,所述调度系统用于接收用户发出的键值请求、发送到键值存储系统实例上执行、将结果执行结果返回给用户,并且能够保证执行结果的正确(即与不经过所述调度系统,直接向一个键值存储系统发送请求的执行结果一致),包含:多个请求队列、多个并行的请求处理线程和多个键值存储系统实例,它们数量相等且一一绑定。所述请求队列用于放置键值请求,所述请求处理线程用于进行请求处理,所述键值存储系统实例用于实际执行键值请求。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种键值请求并行调度方法,其特征在于,包括:
S1,创建n个键值存储系统实例、请求队列和请求处理线程,并按照相同的方式进行编号;其中,n为大于1的整数;
S2,接收用户请求,并确定所述请求的类型;
S3,若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
2.如权利要求1所述的键值请求并行调度方法,其特征在于,所述等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行,包括:
步骤C1,编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,进入步骤C2;若无,则继续轮询检查请求队列;
步骤C2,所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,进入步骤C3;
步骤C3,所述请求处理线程接收所述键值存储系统实例反馈的处理结果,并将所述处理结果发送至用户,返回步骤C1。
3.如权利要求2所述的键值请求并行调度方法,其特征在于,所述编号为i的请求处理线程检查编号为i的请求队列中是否有请求,若有,则从所述请求队列中获取请求,具体为:
若所述请求队列中有多个相邻的同类型请求,则所述请求处理线程批量获取所述多个相邻的同类型请求。
4.如权利要求3所述的键值请求并行调度方法,其特征在于,所述请求处理线程将获取的请求发送到编号为i的键值存储系统实例中执行,具体为:
在所述多个相邻的同类型请求为键值对存储、修改或删除请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,按顺序将所述同类型请求依次发送至所述键值存储系统实例中执行;
在所述多个相邻的同类型请求为键值对读取请求的情况下,若编号为i的键值存储系统实例支持批量执行所述同类型请求时,则将所述同类型请求封装为一个批量请求并发送至所述键值存储系统实例中批量执行;否则,将所述同类型请求以多线程并行的方式同时发送至所述给键值存储系统实例处理中执行。
5.如权利要求4所述的键值请求并行调度方法,其特征在于,若所述多个相邻的同类型请求为键值对存储、修改或删除请求,则当所述请求处理线程获取的多个相邻的同类型请求的键值对数据大小之和大于底层存储设备的最小写单位时,停止获取所述同类型请求;
若所述多个相邻的同类型请求为键值对读取请求,则当所述请求处理线程获取的多个相邻的同类型请求的数量大于CPU核数时,停止获取所述同类型请求。
6.如权利要求1-5任一项所述的键值请求并行调度方法,其特征在于,所述预设映射规则基于哈希函数确定。
7.如权利要求1所述的键值请求并行调度方法,其特征在于,所述等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行,包括:
步骤D1,n个请求处理线程分别检查对应的请求队列中是否有请求,若有,则分别从所述请求队列中获取请求,进入步骤D2;若无,则继续轮询检查请求队列;
步骤D2,所述n个请求处理线程分别将获取的请求发送到对应的键值存储系统实例中执行,进入步骤D3;
步骤D3,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,返回步骤D1。
8.如权利要求7所述的键值请求并行调度方法,其特征在于,所述n个请求处理线程分别接收对应的键值存储系统实例反馈的处理结果,并分别将所述处理结果发送至用户,具体为:
将所述处理结果按照键从小到大的顺序依次发送至用户。
9.如权利要求1所述的键值请求并行调度方法,其特征在于,所述将n个键值存储系统实例进行编号之后,还包括:
存储所述n个键值存储系统实例与编号的对应关系。
10.一种键值请求并行调度系统,其特征在于,包括:
系统初始化模块,用于将n个键值存储系统实例进行编号;创建n个请求队列和请求处理线程并按照相同的方式进行编号,以使各键值存储系统实例、请求队列和请求处理线程一一对应;其中,n为大于1的整数,
请求响应模块,用于在接收到请求时,确定所述请求的类型;
请求处理模块,用于若所述请求为键值对存储、修改、删除或读取请求,则根据预设映射规则确定与所述请求的键参数对应的编号i;将所述请求放入编号为i的请求队列,等待被编号为i的请求处理线程获取并发送至编号为i的键值存储系统实例中执行;
若所述请求为键值对范围查询请求,则复制n个所述请求并分别放入n个请求队列,等待被对应的n个请求处理线程分别获取并发送至对应的n个键值存储系统实例中执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110804293.9A CN113568908A (zh) | 2021-07-16 | 2021-07-16 | 一种键值请求并行调度方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110804293.9A CN113568908A (zh) | 2021-07-16 | 2021-07-16 | 一种键值请求并行调度方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113568908A true CN113568908A (zh) | 2021-10-29 |
Family
ID=78165041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110804293.9A Pending CN113568908A (zh) | 2021-07-16 | 2021-07-16 | 一种键值请求并行调度方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113568908A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11822797B1 (en) | 2022-07-27 | 2023-11-21 | Beijing Superstring Academy Of Memory Technology | Object computational storage system, data processing method, client and storage medium |
WO2024022329A1 (zh) * | 2022-07-25 | 2024-02-01 | 华为云计算技术有限公司 | 一种基于键值存储系统的数据管理方法及其相关设备 |
-
2021
- 2021-07-16 CN CN202110804293.9A patent/CN113568908A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024022329A1 (zh) * | 2022-07-25 | 2024-02-01 | 华为云计算技术有限公司 | 一种基于键值存储系统的数据管理方法及其相关设备 |
US11822797B1 (en) | 2022-07-27 | 2023-11-21 | Beijing Superstring Academy Of Memory Technology | Object computational storage system, data processing method, client and storage medium |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11588755B2 (en) | Distributed stream-based database triggers | |
US9619430B2 (en) | Active non-volatile memory post-processing | |
US10915408B2 (en) | Snapshot for grouping and elastic replication of virtual machines | |
US11630689B2 (en) | Image subunit based guest scheduling | |
US11093468B1 (en) | Advanced metadata management | |
US8799248B2 (en) | Real-time transaction scheduling in a distributed database | |
US10747673B2 (en) | System and method for facilitating cluster-level cache and memory space | |
US11256627B2 (en) | Directly mapped buffer cache on non-volatile memory | |
CN111309649B (zh) | 一种数据传输和任务处理方法、装置及设备 | |
CN110457261B (zh) | 数据访问方法、装置及服务器 | |
CN113568908A (zh) | 一种键值请求并行调度方法及系统 | |
CN106570113B (zh) | 一种海量矢量切片数据云存储方法及系统 | |
Cruz et al. | A scalable file based data store for forensic analysis | |
CN108733585B (zh) | 缓存系统及相关方法 | |
CN116136783A (zh) | 多加速器框架中的高效加速器卸载 | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
US11625503B2 (en) | Data integrity procedure | |
CN110569112B (zh) | 日志数据写入方法及对象存储守护装置 | |
US10824640B1 (en) | Framework for scheduling concurrent replication cycles | |
US20150189013A1 (en) | Adaptive and prioritized replication scheduling in storage clusters | |
CN104715349A (zh) | 一种电子商务运费计算的方法和系统 | |
US10628391B1 (en) | Method and system for reducing metadata overhead in a two-tier storage architecture | |
US10846007B2 (en) | Shuffle manager in a distributed memory object architecture | |
CN112685130A (zh) | 分布式存储环境下的虚拟机备份方法、装置和存储介质 | |
US11914637B2 (en) | Image scaling cloud database |
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 |