Key-Value数据库用户请求的高速并发处理方法

文档序号:6402868阅读:246来源:国知局
专利名称:Key-Value数据库用户请求的高速并发处理方法
技术领域
本发明涉及Key-Value数据库领域,具体涉及一种Key-Value数据库用户请求的高速并发处理方法。
背景技术
与SQL数据库不同,Key-Value数据库用于存储无结构的键值数据,即以键码(即Key)作为索引,读、写、删除Key对应的数据记录(即Value)。由于Key-Value数据库只关心通过Key索引Value的过程,不关心Value中存储的具体数据的结构和内容,因此相较于SQL数据库,功能更加专一、存取速度快、水平扩展性好。通常,Key-Value数据库的请求处理过程分为前端和后端两部分:通过网络等I/0输入接口接收请求的前端请求处理过程,通过后端数据处理引擎执行数据查询、存储的后端处理过程。其中,Key-Value数据库的前端负责对请求报文进行接收、校验请求报文后发往后端;Key_Value数据库的数据库后端负责按顺序逐个处理前端发来的请求,并查询、读写数据。目前,已有Key-Value数据库后端均支持多线程并发地进行数据库存取,但其并发性却直接受限于前端是否能够最大程度并发地向后端提供用户的存取请求。目前,已有Key-Value数据库对用户请求的并行处理粒度较粗。一般以用户连接为粒度,每个连接对应一个处理线程,进行并行处理。尽管这种方式对不同连接发送的请求是并行处理的,但对于同一个连接送入的请求仍旧以串行方式逐个处理,并行粒度较粗,且存在以下不足:
I)在多核处理平台上,各个计算核之间工作负载可能出现不均衡情况。因为不同用户连接产生Key-Value数据请求的速率不同,因此各个连接对应的处理线程的闲忙程度不同,最终导致数据库在多核处理 平台上运行时,各个计算核的工作负载不同。2)同一连接发送的Key-Value数据请求的潜在并发性没得到充分发掘。这是因为即使是同一用户连接发送的请求,对Keyl的读写请求和对Key2的读写请求间由于不存在依赖关系,完全可以并发执行,但现有系统却无法有效发掘此类并发特性。

发明内容
本发明要解决的技术问题是提供一种并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡、能够保证读写依赖请求间顺序的Key-Value数据库用户请求的高速并发处理方法。为了解决上述技术问题,本发明采用的技术方案为:
一种Key-Value数据库用户请求的高速并发处理方法,其实施步骤如下:
1)接收用户请求并按接收顺序加入请求缓冲队列;
2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从所述请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至所述键码分类排队表中;
3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至所述请求集合中,使用预设数量的工作者线程并行处理所述请求集合中的用户请求,并向用户返回处理结果。作为本发明上述技术方案的进一步改进:
所述步骤I)的详细实施步骤如下:
1.1)监控用户指定的网络端口,当有一个新的套接字用户连接建立后为对应的用户启动一个接收线程,通过各个用户对应的接收线程分别接收用户发出的用户请求;
1.2)将接收的用户请求附带上用户消息,然后按接收顺序添加到请求缓冲队列的头部。所述步骤2)的详细实施步骤如下:
2.1)初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表为空,跳转执行下一步;
2.2)判断所述请求缓冲队列是否为空,如果所述请求缓冲队列为空则继续等待直至请求缓冲队列非空,在请求缓冲队列非空时跳转执行下一步;
2.3)按照先进先出的原则,从所述请求缓冲队列的尾部弹出最先进入所述请求缓冲队列的用户请求,跳转执行下一步; 2.4)在所述键码分类排队表中查找是否有与被弹出用户请求的键码相对应的待处理队列,如果有则将被弹出用户请求添加到所述对应的待处理队列尾部,将被弹出用户请求的键码和所述待处理队列的映射关系添加至所述键码分类排队表中;否则,新建一个以被弹出用户请求为头的待处理队列,将被弹出用户请求的键码和新建待处理队列的映射关系添加至所述键码分类排队表中;跳转执行下一步;
2.5)跳转执行步骤2.2)。所述步骤3)的详细实施步骤如下:
3.1)初始化用于存储可并发处理用户请求的请求集合为空,跳转执行下一步;
3.2)检查所述键码分类排队表中是否有新增键码与待处理队列之间的映射关系,如果没有则继续等待直到所述键码分类排队表中有新增键码与待处理队列之间的映射关系,在所述键码分类排队表有新增键码与待处理队列之间的映射关系时则跳转执行下一步;
3.3)找出所述新增键码与待处理队列之间的映射关系,将所述新增的映射关系中键码所对应各个待处理队列头部的用户请求弹出并添加到所述请求集合中,跳转执行下一步;
3.4)判断预设数量的工作者线程是否启动,如果没有则启动预设数量的工作者线程;通过所述工作者线程并发执行所述请求集合中用户请求并返回执行结果,在所述请求集合中的所有用户请求被处理完毕后返回执行步骤3.2)。所述步骤3.4)中通过工作者线程并发执行所述请求集合中用户请求并返回执行结果的详细实施步骤如下:
3.4.1)判断所述请求集合是否为空,如果请求集合为空则等待;在所述请求集合非空时,跳转执行下一步;
3.4.2)从所述请求集合中随机取出一个用户请求作为当前用户请求发送给Key-Value数据库的后端数据处理引擎进行读写数据;3.4.3)将Key-Value数据库的后端数据处理引擎输出当前用户请求的执行结果返回给用户,在所述键码分类排队表中检查当前用户请求的键码对应的待处理队列中是否仍有用户请求,如果仍有用户请求则从所述对应的待处理队列的头部弹出一个用户请求并添加到所述请求集合中,如果没有用户请求则将当前用户请求的键码与对应的待处理队列的映射关系从所述键码分类排队表中删除;
3.4.4)跳转执行步骤3.4.1)。本发明Key-Value数据库用户请求的高速并发处理方法具有下述优点:
I)并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡。本发明根据用户请求中键码的不同,把取出的用户请求分拣到键码分类排队表的不同待处理队列中,实现将用户请求“先分拣”的步骤,通过“先分拣”使得不同待处理队列的用户请求由于键码不同,在并发执行不同待处理队列头部的用户请求时不会存在读写顺序依赖,因此能够从不同待处理队列的头部弹出并分发给多个工作者线程独立并发处理,能够实现以无读写顺序依赖关系的Key-Value数据请求为并发粒度进行处理的,而且经过“先分拣”步骤后的大量可并发请求在多核计算环境中时,能够最大限度的发挥多核CPU并发性能,且细粒度的并行处理使各个处理器核的工作负载也更为平均,具有并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡的优点。2)能够保证读写 依赖请求间顺序。本发明将接收的用户请求按照接收顺序添加到请求缓冲队列,且按照先进先出的顺序不断从请求缓冲队列中取出用户请求,键码分类排队表中的各个待请求队列是服从先进先出原则的,因此对于相同的键码,用户发送的用户请求的读写请求顺序可以得到保障,因此本发明在最大限度挖掘Key-Value数据请求处理并发特性的同时,也能够使有读写相关性的请求的依赖关系得到保证,从而使得有读写依赖的请求之间的顺序正确性能够得到保证。


图1为本发明实施例的方法流程示意图。图2为本发明实施例接收处理阶段的接收原理示意图,每I根波浪线表示I个接收线程。图3为用户请求的数据格式示意图。图4为本发明实施例分拣阶段的分拣原理示意图,上侧的每I根波浪线表示I个接收线程;下侧的I根波浪线为表示分拣阶段的I个分拣线程。图5为本发明实施例分拣阶段的得到的键码分类排队表的结构示意图。图6为本发明实施例并发请求处理阶段进行并发处理的原理示意图,每I根波浪线表示I个运行中的工作者线程。图7为本发明实施例并发请求处理阶段在T1时刻的用户请求处理示意图,每I根波浪线表示I个运行中的工作者线程。图8为本发明实施例并发请求处理阶段在T2时刻的用户请求处理示意图,每I根波浪线表示I个运行中的工作者线程。
具体实施例方式如图1所示,本实施例Key-Value数据库用户请求的高速并发处理方法的实施步骤如下:
1)接收用户请求并按接收顺序加入请求缓冲队列;
2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码Key的不同分拣到不同待处理队列中,并将键码Key与待处理队列的映射关系添加至键码分类排队表中;
3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果。本实施例由三个处理阶段构成,第一阶段为用户请求的接收处理阶段,即前述步骤I);第二阶段为分拣阶段,即前述步骤2);第三阶段为用户请求的并发请求处理阶段,即前述步骤3)。上述三阶段是并行执行的关系,但从功能上构成用户请求处理的流水线,从而实现细粒度并发的Key-Value数据库用户请求处理。与已有的Key-Value数据库并发请求处理方法不同,本实施例对用户请求实现细粒度并发处理的核心是“先分拣,再并发”。其中,“分拣”是指步骤2)中按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码Key的不同分拣到不同待处理队列中,并将键码Key与待处理队列的映射关系添加至键码分类排队表中,因此使得其中每个待处理队列与键码Key—一对应,分拣后的不同待处理队列中的用户请求之间不存在任何写后读顺序相关和读后写顺序相关,可以完全被并发地处理。“并发”是指步骤3)中持续弹出各个待处理队列头部的用户请求并加入至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果,通过设置工作者线程数量,能够根据CPU数量最大化并发地将不同待处理队列头部的用户请求发送到Key-Value数据库的后端进行并行数据存取,能够始终最大程度地并发处理无读写顺序依赖的用户请求,大大提升Key-Value数据库的系统性能。而且由于并发处理的请求间具有无读写顺序相关的特性,使得待处理的请求可以均匀地分派到不同的处理器核上处理,从而大大提升多核处理器的负载均衡性和处理效能。参见图2,本实施例中步骤I)接收处理阶段的详细实施步骤如下:
1.1)监控用户指定的网络端口,当有一个新的套接字用户连接(socket用户连接)建立后为对应的用户启动一个接收线程,通过各个用户对应的接收线程分别接收用户发出的用户请求;
1.2)将接收的用户请求附带上用户消息,然后按接收顺序添加到请求缓冲队列的头部。参见图3所示,用户发出的用户请求(Key-Value请求)格式中:K是具体的键码值(Key值);0是该用户请求的操作类型,即Key-Value请求的操作,可以是读、写、删除等;V是Value的值,即写入Key-Value数据库中对应键码Key对应节点的数据,V根据操作的不同,可以为空,比如读或删除操作的用户请求中Value为空。参见图2,本实施例中步骤I)接收处理阶段接收到3个用户请 求=ReqpReq2Jeq3,按照接收顺序加入到了请求缓冲队列中,Req1位于最前侧将最先被分拣处理;Req3位于最后侧将最后被分拣处理。当接收线程接到用户消息后,则需要将〈K,0,V〉的请求数据转换成Req:〈K,0,V,C〉请求结构(其中C是代表当前的用户连接,用于返回结果时使用)加入到请求缓冲队列(ReqQueue)中,请求缓冲队列满足先进先出的进出规则。为了描述方便,本实施例中将附带上用户消息的用户请求Reqk定义为一个四元组:Reqk: <Kk, Ok, Vk,Ck>。其中,Reqk表示接收到的用户请求,而下标k表示按照接收时间序的第k个用户请求。本实施例的四元组<Kk, Ok, Vk, Ck>中:Kk字段表示第k个用户请求Reqk的键码值(Key值);0k字段表示第k个用户请求Reqk的数据库增、删、改、查等操作;Vk字段表示第k个用户请求Reqk的Value值,如果Ok操作不需要Value (如读操作和删除操作等)则Vk的值为空;Ck为当前请求对应的用户连接。四元组仅是本实施例对用户请求的描述方式之一,在具体实现时根据具体需要的不同采用其它不同的描述方法。本实施例中,步骤2)分拣阶段的详细实施步骤如下: 2.1)初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表(Key分类排队表)为空,跳转执行下一步;
2.2)判断请求缓冲队列是否为空,如果请求缓冲队列为空则继续等待直至请求缓冲队列非空,在请求缓冲队列非空时跳转执行下一步;
2.3)按照先进先出的原则,从请求缓冲队列的尾部弹出最先进入请求缓冲队列的用户请求Reqk:〈Kk, Ok, Vk, Ck>,跳转执行下一步;
2.4)在键码分类排队表中查找是否有与被弹出用户请求Reqk的键码Kk相对应的待处理队列,如果有则将被弹出用户请求Reqk添加到对应的待处理队列尾部,将被弹出用户请求Reqk的键码Kk和待处理队列的映射关系添加至键码分类排队表中;否则,新建一个以被弹出用户请求Reqk为头的待处理队列,将被弹出用户请求Reqk的键码Kk和新建待处理队列的映射关系添加至键码分类排队表中;跳转执行下一步;
2.5)跳转执行步骤2.2)。如图4所示,本实施例中分拣阶段启动唯一的一个分拣线程。分拣线程不断从请求缓冲队列中按先进先出顺序取出收到的用户请求,并建立键码分类排队表(Key分类排队表),本实施例的键码分类排队表为一个Hash表,根据键码Key的不同,把用户请求分类加入不同的待处理队列,此外也可以根据需要采用其它形式存储键码和待处理队列。键码分类排队表中,待处理队列与用户请求的键码Key是一一对应的映射关系,每一个处理请求队列只对应唯一的一个键码Key,且用于存储该键码Key对应的用户请求,当处理请求队列的所有用户请求被弹出后,则将空的处理请求队列删除。假设当前系统接收到3个用户请求,且接收顺序为:
Reqil: ^Ki, Oil, Vil, Cn〉,Reqjl: ^Kj-, Ojl, Vj1, Cj1^,Reqi2:〈K” 0i2, Vi2, Ci2〉。为了描述方便,本实施例中假设第一个Reqil和第三个Reqi2中的键码Key是相同的(都为I)。参见图4,本实施例针对上述3个用户请求进行分拣的详细执行步骤如下:
第①步,从缓冲队列中取出第一个用户请求Reqil:〈K” 0n,Vn,Cn>,根据Reqil中的键码Ki在键码分类排队表中进行查找,由于是第一个用户请求,因此键码分类排队表中尚无任何键码Key与待处理队列的映射关系。因此,分拣线程在键码分类排队表中创建Ki — (Reqil)的映射,其中(Reqil)表不一个待处理队列,该待处理队列包含一个兀素Reqn。
第②步,从缓冲队列中取出第二个用户请求Reqjl:〈K」,Ojl, Vjl, Cjl),根据Reqjl中的键码Kj在键码分类排队表中进行查找。由于此时仍旧没有键码Kj所对应的待处理队列,因此分拣线程在键码分类排队表中创建K」一 (Reqjl)的映射,其中(Reqjl)表示一个待处理队列,该待处理队列包含一个元素Reqjlt5第③步,从缓冲队列中取出第三个用户请求Reqi2KKi, 0i2, Vi2, Ci2>,根据Reqi2中的键码Ki在键码分类排队表中进行查找。分拣线程找到了 I— (Reqil)的映射,于是,将第三个用户请求Reqi2添加到待处理队列Reqil的尾部,成为=Ki — (Reqil, Reqi2)。通过上述3个步骤,接收的3个请求就分别被分拣完毕,此时键码分类排队表的结构如图4的下部所示,键码分类排队表包含2个待处理队列〈(Reqjl)、(Reqil, Reqi2) >,并通过Kj — (Reqjl)和Ki — (Reqil, Reqi2)的映射关系分别与键码Kj和Ki相对应。经过分拣阶段后,键码分类排队表根据用户请求中键码Key的不同,把取出的用户请求分类存储在不同待处理队列中,因此不同待处理队列头部的用户请求由于键码Key不同,不会存在读写顺序依赖,从而能够从不同待处理队列的头部弹出并分发给多个工作者线程独立并发处理。如图5所示,键码分类排队表在正常运行时会包含大量的待处理队列,其中1、Kj>…、Kn为所有用户请求中的不重复的键码Key,每一个键码Key都映射有一个待处理队列,例如键码Ki映射的待处理队列为(Reqn,Reqi2,…)、键码Kj映射的待处理队列为(Reqjl,…)、…、键码Kn映射的待处理队列为(Reqnl,Reqn2,…)。本实施例通过对用户请求的分拣,在键码分类排队表中将用户请求按照键码的不同分拣到不同的待处理队列中,因此不同待处理队列头部的用户请求由于键码Key不同,不会存在读写顺序依赖,从而能够从不同待处理队列的头部弹出并分发给多个工作者线程独立并发处理。本实施例中,步骤3)并发请求处理阶段的详细实施步骤如下:
3.1)初始化用于存储可并发处理用户请求的请求集合pset为空,跳转执行下一步;
3.2)检查键码分类排队表中是否有新增键码与待处理队列之间的映射关系,如果没有则继续等待直到键码分类排队表中有新增键码与待处理队列之间的映射关系,在键码分类排队表有新增键码与待处理队列之间的映射关系时则跳转执行下一步;
3.3)找出新增键码与待处理队列之间的映射关系,将新增的映射关系中键码所对应各个待处理队列头部的用户请求弹出并添加到请求集合pset中,跳转执行下一步;
3.4)判断预设数量的工作者线程是否启动,如果没有则启动预设数量的工作者线程;通过工作者线程并发执行请求集合中用户请求并返回执行结果,在请求集合pset中的所有用户请求被处理完毕后返回执行步骤3.2)。本实施例中,步骤3.4)中通过工作者线程并发执行请求集合中用户请求并返回执行结果的详细实施步骤如下:
3.4.1)判断请求集合是否为空,如果请求集合为空则等待;在请求集合非空时,跳转执行下一步;
3.4.2)从请求集合pset中随机取出一个用户请求作为当前用户请求发送给Key-Value数据库的后端数据处理引擎进行读写数据;
3.4.3)将Key-Value数据库的后端数据处理引擎输出当前用户请求的执行结果返回给用户,在键码分类排队表中检查当前用户请求的键码对应的待处理队列中是否仍有用户请求,如果仍有用户请求则从对应的待处理队列的头部弹出一个用户请求并添加到请求集合中,如果没有用户请求则将当前用户请求的键码与对应的待处理队列的映射关系从键码分类排队表中删除;
3.4.4)跳转执行步骤3.4.1)。如图6所示,本实施例并发请求处理阶段将各个待处理队列头部的用户请求Reqil> Reqjl,…、Reqnl添加到请求集合pset中,通过多个工作者线程进行并发处理。由于Reqn、ReqjP…、Reqnl的键码Key均不同,因此能够并行处理而不会相互影响。并发请求处理阶段初始时启动n个工作者线程,n的具体数值由用户根据CPU核心数量自行指定(n>=l)。本实施例中工作者线程数量n为2。初始情况下,键码分类排队表为空,因此,2个工作者线程都在等待键码分类排队表中有待处理的用户请求加入。如图7所示,假定T1时刻键码分类排队表(key分类排队表)中累积有待处理的用户请求ReqmReqyReqi2,在并发请求处理阶段时,将首先提取键码分类排队表中所有待处理队列中的头部请求(即键码Ki映射待处理队列(Reqn,Reqi2)头部的Reqil、键码Kj映射待处理队列(Reqjl)头部的Reqjl),将Reqil和Reqjl分别移出待处理队列并添加到请求集合pset中,通过请求集合pset均衡地交给2个工作者线程并发处理。其中,由于Reqjl被移出,&所对应的待处理队列为空,因此需要从键码分类排队表中移除I —()的映射关系将空的待处理队列删除。如图8所示,假设用户请求Reqil先于用户请求Reqjl处理完成,记此时刻为T2, T2时刻键码分类排队表(key分类排队表)中待处理的用户请求只剩下Reqi2。在并发请求处理阶段时,检查已完成的用户请求Reqil中键码Ki是否还对应有待处理队列,此刻由于键码Ki所对应的待处理队列为(Reqi2),即其中仍有一个待处理的用户请求Reqi2,因此此时将取出用户请求Reqi2并添加到请求集合pset并送入空闲的工作者线程中,与尚未完成的用户请求Reqj2并发处理。以 此类推,2个工作者线程循环往复地对用户发出的用户请求进行细粒度并发处理。以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种Key-Value数据库用户请求的高速并发处理方法,其特征在于实施步骤如下: 1)接收用户请求并按接收顺序加入请求缓冲队列; 2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从所述请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至所述键码分类排队表中; 3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至所述请求集合中,使用预设数量的工作者线程并行处理所述请求集合中的用户请求,并向用户返回处理结果。
2.根据权利要求1所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤I)的详细实施步骤如下: .1.1)监控用户指定的网络端口,当有一个新的套接字用户连接建立后为对应的用户启动一个接收线程,通过各个用户对应的接收线程分别接收用户发出的用户请求; . 1.2)将接收的用户请求附带上用户消息,然后按接收顺序添加到请求缓冲队列的头部。
3.根据权利要求2所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤2)的详细实施步骤如下: 2.1)初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表为空,跳转执行下一步; 2.2)判断所述请求缓冲队列是否为空,如果所述请求缓冲队列为空则继续等待直至请求缓冲队列非空,在请求缓冲队列非空时跳转执行下一步; 2.3)按照先进先出的原则,从所述请求缓冲队列的尾部弹出最先进入所述请求缓冲队列的用户请求,跳转执行下一步; 2.4)在所述键码分类排队表中查找是否有与被弹出用户请求的键码相对应的待处理队列,如果有则将被弹出用户请求添加到所述对应的待处理队列尾部,将被弹出用户请求的键码和所述待处理队列的映射关系添加至所述键码分类排队表中;否则,新建一个以被弹出用户请求为头的待处理队列,将被弹出用户请求的键码和新建待处理队列的映射关系添加至所述键码分类排队表中;跳转执行下一步; 2.5)跳转执行步骤2.2)。
4.根据权利要求3所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤3)的详细实施步骤如下: .3.1)初始化用于存储可并发处理用户请求的请求集合为空,跳转执行下一步; .3.2)检查所述键码分类排队表中是否有新增键码与待处理队列之间的映射关系,如果没有则继续等待直到所述键码分类排队表中有新增键码与待处理队列之间的映射关系,在所述键码分类排队表有新增键码与待处理队列之间的映射关系时则跳转执行下一步; .3.3)找出所述新增键码与待处理队列之间的映射关系,将所述新增的映射关系中键码所对应各个待处理队列头部的用户请求弹出并添加到所述请求集合中,跳转执行下一步; .3.4)判断预设数量的工作者线程是否启动,如果没有则启动预设数量的工作者线程;通过所述工作者线程并发执行所述请求集合中用户请求并返回执行结果,在所述请求集合中的所有用户请求被处理完毕后返回执行步骤3.2)。
5.根据权利要求4所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤3.4)中通过工作者线程并发执行所述请求集合中用户请求并返回执行结果的详细实施步骤如下: .3.4.1)判断所述请求集合是否为空,如果请求集合为空则等待;在所述请求集合非空时,跳转执行下一步; . 3.4.2)从所述请求集合中随机取出一个用户请求作为当前用户请求发送给Key-Value数据库的后端数据处理引擎进行读写数据; .3.4.3)将Key-Value数据库的后端数据处理引擎输出当前用户请求的执行结果返回给用户,在所述键码分类排队表中检查当前用户请求的键码对应的待处理队列中是否仍有用户请求,如果仍有用户请求则从所述对应的待处理队列的头部弹出一个用户请求并添加到所述请求集合中,如果没有用户请求则将当前用户请求的键码与对应的待处理队列的映射关系从所述键码分类排队表中删除; . 3.4.4)跳转执行步骤3.4.1)。
全文摘要
本发明公开了一种Key-Value数据库用户请求的高速并发处理方法,其实施步骤如下1)接收用户请求并顺序加入请求缓冲队列;2)初始化键码分类排队表,持续按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至键码分类排队表中;3)初始化请求集合,持续弹出各待处理队列头部的用户请求至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果。本发明具有并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡、能够保证读写依赖请求间顺序的优点。
文档编号G06F17/30GK103218455SQ20131016402
公开日2013年7月24日 申请日期2013年5月7日 优先权日2013年5月7日
发明者李 根, 王睿伯, 卢凯, 迟万庆, 冯华, 蒋杰, 刘勇鹏, 高颖慧, 唐宏伟, 樊葆华, 王小平 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1