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

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

Info

Publication number
CN103218455B
CN103218455B CN201310164022.7A CN201310164022A CN103218455B CN 103218455 B CN103218455 B CN 103218455B CN 201310164022 A CN201310164022 A CN 201310164022A CN 103218455 B CN103218455 B CN 103218455B
Authority
CN
China
Prior art keywords
key
user
request
order
list
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.)
Active
Application number
CN201310164022.7A
Other languages
English (en)
Other versions
CN103218455A (zh
Inventor
李�根
王睿伯
卢凯
迟万庆
冯华
蒋杰
刘勇鹏
高颖慧
唐宏伟
樊葆华
王小平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201310164022.7A priority Critical patent/CN103218455B/zh
Publication of CN103218455A publication Critical patent/CN103218455A/zh
Application granted granted Critical
Publication of CN103218455B publication Critical patent/CN103218455B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种Key-Value数据库用户请求的高速并发处理方法,其实施步骤如下:1)接收用户请求并顺序加入请求缓冲队列;2)初始化键码分类排队表,持续按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至键码分类排队表中;3)初始化请求集合,持续弹出各待处理队列头部的用户请求至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果。本发明具有并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡、能够保证读写依赖请求间顺序的优点。

Description

Key-Value数据库用户请求的高速并发处理方法
技术领域
本发明涉及Key-Value数据库领域,具体涉及一种Key-Value数据库用户请求的高速并发处理方法。
背景技术
与SQL数据库不同,Key-Value数据库用于存储无结构的键值数据,即以键码(即Key)作为索引,读、写、删除Key对应的数据记录(即Value)。由于Key-Value数据库只关心通过Key索引Value的过程,不关心Value中存储的具体数据的结构和内容,因此相较于SQL数据库,功能更加专一、存取速度快、水平扩展性好。
通常,Key-Value数据库的请求处理过程分为前端和后端两部分:通过网络等I/O输入接口接收请求的前端请求处理过程,通过后端数据处理引擎执行数据查询、存储的后端处理过程。其中,Key-Value数据库的前端负责对请求报文进行接收、校验请求报文后发往后端;Key-Value数据库的数据库后端负责按顺序逐个处理前端发来的请求,并查询、读写数据。目前,已有Key-Value数据库后端均支持多线程并发地进行数据库存取,但其并发性却直接受限于前端是否能够最大程度并发地向后端提供用户的存取请求。
目前,已有Key-Value数据库对用户请求的并行处理粒度较粗。一般以用户连接为粒度,每个连接对应一个处理线程,进行并行处理。尽管这种方式对不同连接发送的请求是并行处理的,但对于同一个连接送入的请求仍旧以串行方式逐个处理,并行粒度较粗,且存在以下不足:
1)在多核处理平台上,各个计算核之间工作负载可能出现不均衡情况。因为不同用户连接产生Key-Value数据请求的速率不同,因此各个连接对应的处理线程的闲忙程度不同,最终导致数据库在多核处理平台上运行时,各个计算核的工作负载不同。
2)同一连接发送的Key-Value数据请求的潜在并发性没得到充分发掘。这是因为即使是同一用户连接发送的请求,对Key1的读写请求和对Key2的读写请求间由于不存在依赖关系,完全可以并发执行,但现有系统却无法有效发掘此类并发特性。
发明内容
本发明要解决的技术问题是提供一种并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡、能够保证读写依赖请求间顺序的Key-Value数据库用户请求的高速并发处理方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种Key-Value数据库用户请求的高速并发处理方法,其实施步骤如下:
1)接收用户请求并按接收顺序加入请求缓冲队列;
2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从所述请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至所述键码分类排队表中;
3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至所述请求集合中,使用预设数量的工作者线程并行处理所述请求集合中的用户请求,并向用户返回处理结果。
作为本发明上述技术方案的进一步改进:
所述步骤1)的详细实施步骤如下:
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数据库用户请求的高速并发处理方法具有下述优点:
1)并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡。本发明根据用户请求中键码的不同,把取出的用户请求分拣到键码分类排队表的不同待处理队列中,实现将用户请求“先分拣”的步骤,通过“先分拣”使得不同待处理队列的用户请求由于键码不同,在并发执行不同待处理队列头部的用户请求时不会存在读写顺序依赖,因此能够从不同待处理队列的头部弹出并分发给多个工作者线程独立并发处理,能够实现以无读写顺序依赖关系的Key-Value数据请求为并发粒度进行处理的,而且经过“先分拣”步骤后的大量可并发请求在多核计算环境中时,能够最大限度的发挥多核CPU并发性能,且细粒度的并行处理使各个处理器核的工作负载也更为平均,具有并行处理细粒度高、并发处理能力强、硬件资源利用率高、多核处理器下各个处理器核负载均衡的优点。
2)能够保证读写依赖请求间顺序。本发明将接收的用户请求按照接收顺序添加到请求缓冲队列,且按照先进先出的顺序不断从请求缓冲队列中取出用户请求,键码分类排队表中的各个待请求队列是服从先进先出原则的,因此对于相同的键码,用户发送的用户请求的读写请求顺序可以得到保障,因此本发明在最大限度挖掘Key-Value数据请求处理并发特性的同时,也能够使有读写相关性的请求的依赖关系得到保证,从而使得有读写依赖的请求之间的顺序正确性能够得到保证。
附图说明
图1为本发明实施例的方法流程示意图。
图2为本发明实施例接收处理阶段的接收原理示意图,每1根波浪线表示1个接收线程。
图3为用户请求的数据格式示意图。
图4为本发明实施例分拣阶段的分拣原理示意图,上侧的每1根波浪线表示1个接收线程;下侧的1根波浪线为表示分拣阶段的1个分拣线程。
图5为本发明实施例分拣阶段的得到的键码分类排队表的结构示意图。
图6为本发明实施例并发请求处理阶段进行并发处理的原理示意图,每1根波浪线表示1个运行中的工作者线程。
图7为本发明实施例并发请求处理阶段在T1时刻的用户请求处理示意图,每1根波浪线表示1个运行中的工作者线程。
图8为本发明实施例并发请求处理阶段在T2时刻的用户请求处理示意图,每1根波浪线表示1个运行中的工作者线程。
具体实施方式
如图1所示,本实施例Key-Value数据库用户请求的高速并发处理方法的实施步骤如下:
1)接收用户请求并按接收顺序加入请求缓冲队列;
2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码Key的不同分拣到不同待处理队列中,并将键码Key与待处理队列的映射关系添加至键码分类排队表中;
3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果。
本实施例由三个处理阶段构成,第一阶段为用户请求的接收处理阶段,即前述步骤1);第二阶段为分拣阶段,即前述步骤2);第三阶段为用户请求的并发请求处理阶段,即前述步骤3)。上述三阶段是并行执行的关系,但从功能上构成用户请求处理的流水线,从而实现细粒度并发的Key-Value数据库用户请求处理。
与已有的Key-Value数据库并发请求处理方法不同,本实施例对用户请求实现细粒度并发处理的核心是“先分拣,再并发”。其中,“分拣”是指步骤2)中按照先进先出的顺序从请求缓冲队列中弹出用户请求,根据用户请求中键码Key的不同分拣到不同待处理队列中,并将键码Key与待处理队列的映射关系添加至键码分类排队表中,因此使得其中每个待处理队列与键码Key一一对应,分拣后的不同待处理队列中的用户请求之间不存在任何写后读顺序相关和读后写顺序相关,可以完全被并发地处理。“并发”是指步骤3)中持续弹出各个待处理队列头部的用户请求并加入至请求集合中,使用预设数量的工作者线程并行处理请求集合中的用户请求,并向用户返回处理结果,通过设置工作者线程数量,能够根据CPU数量最大化并发地将不同待处理队列头部的用户请求发送到Key-Value数据库的后端进行并行数据存取,能够始终最大程度地并发处理无读写顺序依赖的用户请求,大大提升Key-Value数据库的系统性能。而且由于并发处理的请求间具有无读写顺序相关的特性,使得待处理的请求可以均匀地分派到不同的处理器核上处理,从而大大提升多核处理器的负载均衡性和处理效能。
参见图2,本实施例中步骤1)接收处理阶段的详细实施步骤如下:
1.1)监控用户指定的网络端口,当有一个新的套接字用户连接(socket用户连接)建立后为对应的用户启动一个接收线程,通过各个用户对应的接收线程分别接收用户发出的用户请求;
1.2)将接收的用户请求附带上用户消息,然后按接收顺序添加到请求缓冲队列的头部。
参见图3所示,用户发出的用户请求(Key-Value请求)格式中:K是具体的键码值(Key值);O是该用户请求的操作类型,即Key-Value请求的操作,可以是读、写、删除等;V是Value的值,即写入Key-Value数据库中对应键码Key对应节点的数据,V根据操作的不同,可以为空,比如读或删除操作的用户请求中Value为空。参见图2,本实施例中步骤1)接收处理阶段接收到3个用户请求:Req1、Req2、Req3,按照接收顺序加入到了请求缓冲队列中,Req1位于最前侧将最先被分拣处理;Req3位于最后侧将最后被分拣处理。
当接收线程接到用户消息后,则需要将<K,O,V>的请求数据转换成Req:<K, O, V, C>请求结构(其中C是代表当前的用户连接,用于返回结果时使用)加入到请求缓冲队列(ReqQueue)中,请求缓冲队列满足先进先出的进出规则。为了描述方便,本实施例中将附带上用户消息的用户请求Reqk定义为一个四元组:Reqk: <Kk, Ok, Vk,Ck>。其中,Reqk表示接收到的用户请求,而下标k表示按照接收时间序的第k个用户请求。本实施例的四元组<Kk, Ok, Vk, Ck>中:Kk字段表示第k个用户请求Reqk的键码值(Key值);Ok字段表示第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个用户请求,且接收顺序为:
Reqi1:<Ki, Oi1, Vi1, Ci1> ,Reqj1:<Kj, Oj1, Vj1, Cj1> ,Reqi2:<Ki, Oi2, Vi2, Ci2>。
为了描述方便,本实施例中假设第一个Reqi1和第三个Reqi2中的键码Key是相同的(都为Ki)。参见图4,本实施例针对上述3个用户请求进行分拣的详细执行步骤如下:
第①步,从缓冲队列中取出第一个用户请求Reqi1:<Ki,Oi1,Vi1,Ci1>,根据Reqi1中的键码Ki在键码分类排队表中进行查找,由于是第一个用户请求,因此键码分类排队表中尚无任何键码Key与待处理队列的映射关系。因此,分拣线程在键码分类排队表中创建Ki→(Reqi1)的映射,其中(Reqi1)表示一个待处理队列,该待处理队列包含一个元素Reqi1
第②步,从缓冲队列中取出第二个用户请求Reqj1:<Kj,Oj1,Vj1,Cj1>,根据Reqj1中的键码Kj在键码分类排队表中进行查找。由于此时仍旧没有键码Kj所对应的待处理队列,因此分拣线程在键码分类排队表中创建Kj→(Reqj1)的映射,其中(Reqj1)表示一个待处理队列,该待处理队列包含一个元素Reqj1
第③步,从缓冲队列中取出第三个用户请求Reqi2:<Ki,Oi2,Vi2,Ci2>,根据Reqi2中的键码Ki在键码分类排队表中进行查找。分拣线程找到了Ki→(Reqi1)的映射,于是,将第三个用户请求Reqi2添加到待处理队列Reqi1的尾部,成为:Ki→(Reqi1,Reqi2)。
通过上述3个步骤,接收的3个请求就分别被分拣完毕,此时键码分类排队表的结构如图4的下部所示,键码分类排队表包含2个待处理队列<(Reqj1)、(Reqi1,Reqi2)>,并通过Kj→(Reqj1)和Ki→(Reqi1,Reqi2)的映射关系分别与键码Kj和Ki相对应。经过分拣阶段后,键码分类排队表根据用户请求中键码Key的不同,把取出的用户请求分类存储在不同待处理队列中,因此不同待处理队列头部的用户请求由于键码Key不同,不会存在读写顺序依赖,从而能够从不同待处理队列的头部弹出并分发给多个工作者线程独立并发处理。
如图5所示,键码分类排队表在正常运行时会包含大量的待处理队列,其中Ki、Kj、…、Kn为所有用户请求中的不重复的键码Key,每一个键码Key都映射有一个待处理队列,例如键码Ki映射的待处理队列为(Reqi1,Reqi2,…)、键码Kj映射的待处理队列为(Reqj1,…)、…、键码Kn映射的待处理队列为(Reqn1,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所示,本实施例并发请求处理阶段将各个待处理队列头部的用户请求Reqi1、Reqj1、…、Reqn1添加到请求集合pset中,通过多个工作者线程进行并发处理。由于Reqi1、Reqj1、…、Reqn1的键码Key均不同,因此能够并行处理而不会相互影响。并发请求处理阶段初始时启动n个工作者线程,n的具体数值由用户根据CPU核心数量自行指定(n>=1)。
本实施例中工作者线程数量n为2。初始情况下,键码分类排队表为空,因此,2个工作者线程都在等待键码分类排队表中有待处理的用户请求加入。
如图7所示,假定T1时刻键码分类排队表(key分类排队表)中累积有待处理的用户请求Reqi1、Reqj1、Reqi2,在并发请求处理阶段时,将首先提取键码分类排队表中所有待处理队列中的头部请求(即键码Ki映射待处理队列(Reqi1,Reqi2)头部的Reqi1、键码Kj映射待处理队列(Reqj1)头部的Reqj1),将Reqi1和Reqj1分别移出待处理队列并添加到请求集合pset中,通过请求集合pset均衡地交给2个工作者线程并发处理。其中,由于Reqj1被移出,Kj所对应的待处理队列为空,因此需要从键码分类排队表中移除Kj→( )的映射关系将空的待处理队列删除。
如图8所示,假设用户请求Reqi1先于用户请求 Reqj1处理完成,记此时刻为T2,T2时刻键码分类排队表(key分类排队表)中待处理的用户请求只剩下Reqi2。在并发请求处理阶段时,检查已完成的用户请求Reqi1中键码Ki是否还对应有待处理队列,此刻由于键码Ki所对应的待处理队列为(Reqi2),即其中仍有一个待处理的用户请求Reqi2,因此此时将取出用户请求Reqi2并添加到请求集合pset并送入空闲的工作者线程中,与尚未完成的用户请求Reqj2并发处理。以此类推,2个工作者线程循环往复地对用户发出的用户请求进行细粒度并发处理。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (4)

1.一种Key-Value数据库用户请求的高速并发处理方法,其特征在于实施步骤如下:
1)接收用户请求并按接收顺序加入请求缓冲队列:1.1)监控用户指定的网络端口,当有一个新的套接字用户连接建立后为对应的用户启动一个接收线程,通过各个用户对应的接收线程分别接收用户发出的用户请求;1.2)将接收的用户请求附带上用户消息,然后按接收顺序添加到请求缓冲队列的头部;
2)首先初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表,然后持续按照先进先出的顺序从所述请求缓冲队列中弹出用户请求,根据用户请求中键码的不同分拣到不同待处理队列中,并将键码与待处理队列的映射关系添加至所述键码分类排队表中;
3)首先初始化用于可并发处理的请求集合,然后持续弹出各个待处理队列头部的用户请求并加入至所述请求集合中,使用预设数量的工作者线程并行处理所述请求集合中的用户请求,并向用户返回处理结果。
2.根据权利要求1所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤2)的详细实施步骤如下:
2.1)初始化用于存储键码与待处理队列之间一一映射关系的键码分类排队表为空,跳转执行下一步;
2.2)判断所述请求缓冲队列是否为空,如果所述请求缓冲队列为空则继续等待直至请求缓冲队列非空,在请求缓冲队列非空时跳转执行下一步;
2.3)按照先进先出的原则,从所述请求缓冲队列的尾部弹出最先进入所述请求缓冲队列的用户请求,跳转执行下一步;
2.4)在所述键码分类排队表中查找是否有与被弹出用户请求的键码相对应的待处理队列,如果有则将被弹出用户请求添加到所述对应的待处理队列尾部,将被弹出用户请求的键码和所述待处理队列的映射关系添加至所述键码分类排队表中;否则,新建一个以被弹出用户请求为头的待处理队列,将被弹出用户请求的键码和新建待处理队列的映射关系添加至所述键码分类排队表中;跳转执行下一步;
2.5)跳转执行步骤2.2)。
3.根据权利要求2所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤3)的详细实施步骤如下:
3.1)初始化用于存储可并发处理用户请求的请求集合为空,跳转执行下一步;
3.2)检查所述键码分类排队表中是否有新增键码与待处理队列之间的映射关系,如果没有则继续等待直到所述键码分类排队表中有新增键码与待处理队列之间的映射关系,在所述键码分类排队表有新增键码与待处理队列之间的映射关系时则跳转执行下一步;
3.3)找出所述新增键码与待处理队列之间的映射关系,将所述新增的映射关系中键码所对应各个待处理队列头部的用户请求弹出并添加到所述请求集合中,跳转执行下一步;
3.4)判断预设数量的工作者线程是否启动,如果没有则启动预设数量的工作者线程;通过所述工作者线程并发执行所述请求集合中用户请求并返回执行结果,在所述请求集合中的所有用户请求被处理完毕后返回执行步骤3.2)。
4.根据权利要求3所述的Key-Value数据库用户请求的高速并发处理方法,其特征在于,所述步骤3.4)中通过工作者线程并发执行所述请求集合中用户请求并返回执行结果的详细实施步骤如下:
3.4.1)判断所述请求集合是否为空,如果请求集合为空则等待;在所述请求集合非空时,跳转执行下一步;
3.4.2)从所述请求集合中随机取出一个用户请求作为当前用户请求发送给Key-Value数据库的后端数据处理引擎进行读写数据;
3.4.3)将Key-Value数据库的后端数据处理引擎输出当前用户请求的执行结果返回给用户,在所述键码分类排队表中检查当前用户请求的键码对应的待处理队列中是否仍有用户请求,如果仍有用户请求则从所述对应的待处理队列的头部弹出一个用户请求并添加到所述请求集合中,如果没有用户请求则将当前用户请求的键码与对应的待处理队列的映射关系从所述键码分类排队表中删除;
3.4.4)跳转执行步骤3.4.1)。
CN201310164022.7A 2013-05-07 2013-05-07 Key-Value数据库用户请求的高速并发处理方法 Active CN103218455B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310164022.7A CN103218455B (zh) 2013-05-07 2013-05-07 Key-Value数据库用户请求的高速并发处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310164022.7A CN103218455B (zh) 2013-05-07 2013-05-07 Key-Value数据库用户请求的高速并发处理方法

Publications (2)

Publication Number Publication Date
CN103218455A CN103218455A (zh) 2013-07-24
CN103218455B true CN103218455B (zh) 2014-04-16

Family

ID=48816242

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310164022.7A Active CN103218455B (zh) 2013-05-07 2013-05-07 Key-Value数据库用户请求的高速并发处理方法

Country Status (1)

Country Link
CN (1) CN103218455B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104378400B (zh) * 2013-08-15 2018-10-02 腾讯科技(深圳)有限公司 数据分散并发方法和装置
CN103543988B (zh) * 2013-10-23 2017-05-10 华为终端有限公司 队列消息的处理方法、控制消息进入队列的方法及装置
CN105337923B (zh) * 2014-05-26 2019-07-12 腾讯科技(北京)有限公司 数据分发方法和系统及数据发送装置和数据接收装置
CN105337896A (zh) * 2014-07-25 2016-02-17 华为技术有限公司 报文处理方法和装置
CN104714900B (zh) * 2015-03-26 2019-07-05 百度在线网络技术(北京)有限公司 数据读取方法和装置
CN104753956B (zh) * 2015-04-13 2020-06-16 网神信息技术(北京)股份有限公司 一种数据处理方法和装置
CN106598474A (zh) * 2015-10-16 2017-04-26 中兴通讯股份有限公司 Scsi命令的并发处理方法及装置
CN105242909B (zh) * 2015-11-24 2017-08-11 无锡江南计算技术研究所 一种基于多版本代码生成的众核循环分块方法
CN105868286B (zh) * 2016-03-23 2019-03-12 中国科学院计算技术研究所 基于分布式文件系统小文件合并的并行追加方法及系统
CN105955895B (zh) * 2016-04-20 2019-04-12 北京小米移动软件有限公司 分布式消息队列的逻辑控制方法和装置、数据处理设备
CN106789335B (zh) * 2017-01-13 2019-12-17 泰康保险集团股份有限公司 一种用于处理信息的方法和系统
CN106844676B (zh) * 2017-01-24 2020-07-07 北京奇虎科技有限公司 数据存储方法及装置
CN107872398A (zh) * 2017-06-25 2018-04-03 平安科技(深圳)有限公司 高并发数据处理方法、装置及计算机可读存储介质
CN109213579A (zh) * 2017-07-06 2019-01-15 贵阳朗玛信息技术股份有限公司 一种异步串行处理消息的方法及装置
CN112804349B (zh) 2017-07-14 2023-07-04 创新先进技术有限公司 区块链共识网络中处理共识请求的方法、装置和电子设备
CN107454167A (zh) * 2017-08-04 2017-12-08 深圳市元征科技股份有限公司 请求处理方法及服务器
CN108804240B (zh) * 2018-04-25 2021-11-19 天津卓盛云科技有限公司 一种队列数据的分发和处理算法
CN111343220B (zh) * 2018-12-18 2024-02-09 北京京东尚科信息技术有限公司 转发器、分布式文件传输方法、系统、介质及电子设备
CN109800074A (zh) * 2019-02-21 2019-05-24 北京致远互联软件股份有限公司 任务数据并发执行方法、装置以及电子设备
CN111221856B (zh) * 2020-01-13 2021-05-25 中科驭数(北京)科技有限公司 面向硬件数据库的多用户请求批处理方法及装置
CN113301104B (zh) * 2021-02-09 2024-04-12 阿里巴巴集团控股有限公司 数据处理系统及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8001332B2 (en) * 2008-04-30 2011-08-16 Siemens Aktiengesellschaft Adaptive caching for high volume extract transform load process
CN102521265B (zh) * 2011-11-21 2013-10-30 华中科技大学 一种海量数据管理中动态一致性控制方法
CN102799628B (zh) * 2012-06-21 2015-10-07 新浪网技术(中国)有限公司 在key-value数据库中进行数据分区的方法和装置
CN102867070A (zh) * 2012-09-29 2013-01-09 瑞庭网络技术(上海)有限公司 更新key-value分布式存储系统缓存的方法

Also Published As

Publication number Publication date
CN103218455A (zh) 2013-07-24

Similar Documents

Publication Publication Date Title
CN103218455B (zh) Key-Value数据库用户请求的高速并发处理方法
US9672235B2 (en) Method and system for dynamically partitioning very large database indices on write-once tables
Lakshman et al. Cassandra: a decentralized structured storage system
US9712646B2 (en) Automated client/server operation partitioning
CN101650646B (zh) 一种共享数据一致性的实现方法及装置
US20160132541A1 (en) Efficient implementations for mapreduce systems
CN107169083A (zh) 公安卡口海量车辆数据存储与检索方法及装置、电子设备
CN101375241A (zh) 集群文件系统中的有效数据管理
CN106570113B (zh) 一种海量矢量切片数据云存储方法及系统
CN101515298A (zh) 基于树形数据结构节点的插入的方法和存储装置
CN106569896B (zh) 一种数据分发及并行处理方法和系统
CN106599091B (zh) 基于键值存储的rdf图结构存储和索引方法
US20180300330A1 (en) Proactive spilling of probe records in hybrid hash join
WO2017148297A1 (zh) 数据表连接方法及装置
US20110196856A1 (en) Processing a data stream
US9813331B2 (en) Assessing response routes in a network
US20150058438A1 (en) System and method providing hierarchical cache for big data applications
WO2023284473A1 (zh) 数据管理方法、装置、计算机设备及存储介质
KR102471966B1 (ko) 스토리지 노드 기반의 키-값 스토어를 이용하는 데이터 입출력 방법
US9703788B1 (en) Distributed metadata in a high performance computing environment
WO2023159976A1 (zh) 数据分段写入方法、数据读取方法及装置
CN104850548B (zh) 一种实现大数据平台输入/输出处理的方法及系统
CN107291541A (zh) 面向Key‑Value系统的compaction粗粒度进程级并行优化方法及系统
CN112307272A (zh) 确定对象之间关系信息的方法、装置、计算设备及存储介质
CN105550284B (zh) 在Presto计算节点混合使用内存和临时表空间的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant