CN106897278B - 用于键值数据库的数据读写处理方法及设备 - Google Patents

用于键值数据库的数据读写处理方法及设备 Download PDF

Info

Publication number
CN106897278B
CN106897278B CN201510953552.9A CN201510953552A CN106897278B CN 106897278 B CN106897278 B CN 106897278B CN 201510953552 A CN201510953552 A CN 201510953552A CN 106897278 B CN106897278 B CN 106897278B
Authority
CN
China
Prior art keywords
request
read
write
thread
input
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
CN201510953552.9A
Other languages
English (en)
Other versions
CN106897278A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510953552.9A priority Critical patent/CN106897278B/zh
Publication of CN106897278A publication Critical patent/CN106897278A/zh
Application granted granted Critical
Publication of CN106897278B publication Critical patent/CN106897278B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请的目的是提供一种用于键值数据库的数据读写处理方法及设备,用以避免在数据写入时线程排队等待的现象,提高处理性能。具体地,利用输入输出线程对待处理的请求进行解码;若待处理的请求为写入请求,则利用输入输出线程根据写入请求中的键确定写入请求对应的数据库实例;利用输入输出线程将写入请求分配至与数据库实例绑定的写工作线程;利用写工作线程将写入请求中的键和值写入数据库实例。与现有技术相比,通过对数据库实例访问的工作线程读写分离,并为每个数据库实例都绑定固定的一个写工作线程,保证不会有两个工作线程同时对一个数据库实例进行写入,避免工作线程排队等待的现象,从而提高处理性能。

Description

用于键值数据库的数据读写处理方法及设备
技术领域
本申请涉及计算机领域,尤其涉及一种用于键值数据库的数据读写处理方法及设备。
背景技术
leveldb(level数据库)是一种高效的键值(key-value)数据库,但它只是一个程序库,不包含网络服务封装,所以无法像一般意义的存储服务器(如MySQL)那样,直接用客户端来连接它,完成数据读写的处理。leveldb需要封装成的网络服务程序,以实现数据读写处理。
图1为现有技术中以leveldb作为底层存储进行数据读写处理的原理图。该方案中涉及x个leveldb实例,每个leveldb实例都可以存储大量数据,并且各个leveldb实例之间相互独立;n个输入输出线程(IO线程),待处理的请求(request)由输入输出线程解码(decode)成读取请求(read request)或者写入请求(write request),并分配给工作线程(work线程)进行处理;m个工作线程,处理具体的读取请求和写入请求,确定每个请求对应的leveldb实例,对于读取请求,在对应的leveldb实例中读出键(key)对应的值(value),而对于写入请求,则把键和值写入对应的leveldb实例。
以某一待处理的请求write request key1-value1为例,该请求为写入请求,键和值分别为key1和value1。
第一步:输入输出线程a1将请求解码,随机分配给任意一个工作线程进行处理,这里假设是工作线程b2。
第二步:工作线程b2处理写入请求,确定该写入请求是属于leveldb实例c2。
第三步:工作线程b2找到leveldb实例c2,将key1-value1写入到leveldb实例2。
由于在处理过程中输入输出线程会将写入请求随机分配给任意一个工作线程,因此有可能出现多个工作线程同时写入某一leveldb实例的情况。由于leveldb采用了RCU(Read-Copy Update,读-拷贝修改)锁机制,对于1个leveldb实例,允许多个工作线程同时读取,仅允许1个工作线程同时写入。当多个工作线程同时写同一个leveldb实例,则多个工作线程只有一个可以写入,其他的需要等待,造成线程排队,不能充分利用处理性能。
申请内容
本申请的一个目的是提供一种用于键值数据库的数据读写处理方法及设备,用以避免在数据写入时线程排队等待的现象,提高处理性能。
为实现上述目的,本申请提供了一种用于键值数据库的数据读写处理方法,该方法包括:
利用输入输出线程对待处理的请求进行解码;
若所述待处理的请求为写入请求,则利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例;
利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程;
利用所述写工作线程将所述写入请求中的键和值写入所述数据库实例。
基于本申请的另一方面,还提供了一种用于键值数据库的数据读写处理设备,该设备包括:
解码装置,用于利用输入输出线程对待处理的请求进行解码;
判断装置,用于在所述待处理的请求为写入请求时,利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例;
分配装置,用于利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程;
读写装置,用于利用所述写工作线程将所述写入请求中的键和值写入所述数据库实例。
与现有技术相比,本申请实施例中对数据库实例访问的工作线程读写分离,并为每个数据库实例都绑定固定的一个写工作线程,使得所述输入输出线程在向工作线程分配写入请求时会将该写入请求分配至数据库实例绑定的写工作线程,由此保证不会有两个工作线程同时对一个数据库实例进行写入,避免工作线程排队等待的现象,从而提高处理性能。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为现有技术中以leveldb作为底层存储进行数据读写处理的原理图;
图2为本申请实施例提供的一种用于键值数据库的数据读写处理方法的流程图;
图3(a)为采用申请实施例提供的一种方案进行数据读写处理的原理图;
图3(b)为采用申请实施例提供的另一种方案进行数据读写处理的原理图;
图4为本申请实施例提供的一种优选的用于键值数据库的数据读写处理方法的流程图;
图5为本申请实施例提供的另一种用于键值数据库的数据读写处理方法的流程图;
图6为本申请实施例提供的一种的用于键值数据库的数据读写处理设备的结构示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图2示出了本申请实施例提供的一种用于键值数据库的数据读写处理方法的流程图,该数据读写处理方法包括以下步骤:
步骤S201,利用输入输出线程对待处理的请求进行解码。所述输入输出线程可以将待处理的请求解码为读取请求或者写入请求,并基于解码结果将其分配至用于写入数据的写工作线程或者用于读取数据的读工作线程。
步骤S202,若所述待处理的请求为写入请求,则利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例。对于写入请求,可以采用如下形式表示:write request key2-value2,利用所述输入输出线程根据key2的值确定所述写入请求对应的数据库实例时,可以对key2进行哈希(hash)计算,由得到的哈希值确定具体所述写入请求对应的数据库实例。
由此,步骤202中利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例,具体包括:利用所述输入输出线程对所述写入请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述写入请求对应的数据库实例。以leveldb为例,假设leveldb实例的数量为2,即包括leveldb实例C1和leveldb实例C2,对key2进行hash计算后得到的hash值为528929252085459,对hash值取leveldb实例数量的模,即528929252085459%2=1,由此确定该写入请求write request key-value对应的数据库实例为leveldb实例C2。在另一种情形下,若key2进行hash计算后得到的hash值为528929252085452,对hash值取leveldb实例数量的模的结果为0时,则可以确定写入请求对应的数据库实例为leveldb实例C1。在实际应用中,除leveldb之外,也可以采用rocksdb作为底层存储。
步骤S203,利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程。仍以前述leveldb为例,leveldb实例C1和leveldb实例C2分别绑定了一个固定的写工作线程,专门用于处理对两个数据库实例的写入操作,图3(a)中的工作线程B1和工作线程B4分别为与leveldb实例C1和leveldb实例C2绑定的写工作线程。若根据key确定的该写入请求对应的数据库实例为leveldb实例C2,那么所述输入输出线程会将所述写入请求分配至与工作线程B4,而不会分配至其它任何工作线程。
步骤S204,利用所述写工作线程将所述写入请求中的键和值写入所述数据库实例。接上例,工作线程B4会将key2-value2写入到leveldb实例C2中,由此完成数据写入的处理。
通过对数据库实例访问的工作线程读写分离,并为个数据库实例都绑定固定的一个写工作线程,使得所述输入输出线程在向工作线程分配写入请求时会将该写入请求分配至数据库实例绑定的写工作线程,由此保证不会有两个工作线程同时对一个数据库实例进行写入,避免工作线程排队等待的现象,从而提高处理性能。
在现有技术中,所有工作线程均可以用于写入或者读取,以图1所示的场景为例,其读取过程具体为:
以某一待处理的请求read request key3为例,该请求为读取请求,键为key。
第一步:输入输出线程a1将该请求解码,随机交给任意一个工作线程,这里假设是工作线程b1。
第二步:工作线程b1处理read request key3,确定该读取请求属于leveldb实例c2。
第三步:工作线程b1找到leveldb实例c2,从leveldb实例c2中读取key3对应的值。
而本申请实施例提供的一种优选的用于键值数据库的数据读写处理方法中,除了为个数据库实例都绑定固定的一个写工作线程之外,还可以绑定读工作线程,专门用于处理对数据库实例的读取操作。该方法的处理流程如图4所示,除图2所示的步骤外,还包括:
步骤S205,若所述待处理的请求为读取请求,则利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例。
对于读取请求,可以采用如下形式表示:read request key4,利用所述输入输出线程根据key4的值确定所述写入请求对应的数据库实例的具体方式与写入请求类似,可以对key4进行哈希(hash)计算,由得到的哈希值确定具体所述读取请求对应的数据库实例。
由此,步骤205中利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例,具体包括:利用所述输入输出线程对所述读取请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述读取请求对应的数据库实例。以leveldb为例,假设leveldb实例的数量为2,即包括leveldb实例C1和leveldb实例C2,对key4进行hash计算后得到的hash值为528929252085459,对hash值取leveldb实例数量的模,即528929252085459%2=1,由此确定该读取请求read request key4对应的数据库实例为leveldb实例C2。
步骤S206,利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程。在实际应用中,由于leveldb等数据库采用了RCU锁机制,对于1个leveldb实例,允许多个工作线程同时读取,因此每个leveldb实例绑定的读工作线程的数量可以设置多个,例如根据实际读取处理的需求设置2、3、4或者更多。而所述输入输出线程在分配读取请求时,会随机分配至与所述数据库实例绑定的多个读工作线程中的任一读工作线程。
仍以前述leveldb为例,leveldb实例C1和leveldb实例C2分别绑定了两个固定的读工作线程,专门用于处理对两个数据库实例的读取操作,图3(a)中的工作线程B2、B3为与leveldb实例C1绑定的读工作线程,而工作线程B5、B6为与leveldb实例C2绑定的读工作线程。若根据key确定的该读取请求对应的数据库实例为leveldb实例C2,那么所述输入输出线程会将所述读取请求随机分配至工作线程B5和工作线程B6之中的一个,而不会分配给其它工作线程。
步骤S207,利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。接上例,若步骤S206中利用所述输入输出线程将所述读取请求分配至工作线程B5中,那么工作线程B5会根据key4由leveldb实例C2读取对应的value。
在实际应用中,针对各个数据库实例的读取请求的数量可能会有较大差别。例如在某一时刻,有3个针对leveldb实例C2的读取请求,而仅有1个针对leveldb实例C1,由于leveldb实例C1和C2绑定的读工作线程的数量均为两个,此时工作线程B5和工作线程B6无法同时处理3个读取请求。因此,其中针对leveldb实例C2的其中一个读取请求需要等处理队列前面的读取请求完成处理之后才可以进行处理,而工作线程B5和工作线程B3由于仅需要处理一个读取请求,因此会由一个工作线程空闲,由此造成了计算资源的浪费,降低了处理效率。
为避免上述问题,本申请实施例还提供了另一种用于键值数据库的数据读写处理方法,该方法在对线程进行读写分离的前提下,仅将写工作线程与数据库实例进行绑定,而每个读工作线程可以用于处理任意数据库实例的读取请求。具体地,该方法的处理流程如图5所示,除图2所示的步骤外,还包括:
步骤S205’,若所述待处理的请求为读取请求,则利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例。
步骤S206’,利用所述输入输出线程将所述读取请求随机分配至所有读工作线程中的任一读工作线程。
步骤S207’,利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
如图3(b)所示,工作线程B2、B3、B5和B6均为读工作线程,且均可以处理针对leveldb实例C1或C2的读取请求。若在当前时刻,有3个针对leveldb实例C2的读取请求,而仅有1个针对leveldb实例C1,可以由4个读工作线程同时处理,由此避免计算资源浪费,提高处理效率。
图6示出了本申请实施例提供的一种用于键值数据库的数据读写处理设备的结构示意图,该数据读写处理设备6包括解码装置610、判断装置620、分配装置630和读写装置640。所述数据读写处理设备6的具体实现可以包括但不限于用户设备、网络设备或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于个人计算机、触控终端等实现;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
具体的,所述解码装置610利用输入输出线程对待处理的请求进行解码。所述输入输出线程可以将待处理的请求解码为读取请求或者写入请求,并基于解码结果将其分配至用于写入数据的写工作线程或者用于读取数据的读工作线程。
所述判断装置620在所述待处理的请求为写入请求时,利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例。对于写入请求,可以采用如下形式表示:write request key2-value2,利用所述输入输出线程根据key2的值确定所述写入请求对应的数据库实例时,可以对key2进行哈希(hash)计算,由得到的哈希值确定具体所述写入请求对应的数据库实例。
由此,所述判断装置620具体用于在所述待处理的请求为写入请求时,利用所述输入输出线程对所述写入请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述写入请求对应的数据库实例。以leveldb为例,假设leveldb实例的数量为2,即包括leveldb实例C1和leveldb实例C2,对key2进行hash计算后得到的hash值为528929252085459,对hash值取leveldb实例数量的模,即528929252085459%2=1,由此确定该写入请求write request key-value对应的数据库实例为leveldb实例C2。在另一种情形下,若key2进行hash计算后得到的hash值为528929252085452,对hash值取leveldb实例数量的模的结果为0时,则可以确定写入请求对应的数据库实例为leveldb实例C1。在实际应用中,除leveldb之外,也可以采用rocksdb作为底层存储。
所述分配装置630利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程。仍以前述leveldb为例,leveldb实例C1和leveldb实例C2分别绑定了一个固定的写工作线程,专门用于处理对两个数据库实例的写入操作,图3(a)中的工作线程B1和工作线程B4分别为与leveldb实例C1和leveldb实例C2绑定的写工作线程。若根据key确定的该写入请求对应的数据库实例为leveldb实例C2,那么所述输入输出线程会将所述写入请求分配至与工作线程B4,而不会分配至其它任何工作线程。
所述读写装置640利用所述写工作线程将所述写入请求中的键和值写入所述数据库实例。接上例,工作线程B4会将key2-value2写入到leveldb实例C2中,由此完成数据写入的处理。
通过对数据库实例访问的工作线程读写分离,并为个数据库实例都绑定固定的一个写工作线程,使得所述输入输出线程在向工作线程分配写入请求时会将该写入请求分配至数据库实例绑定的写工作线程,由此保证不会有两个工作线程同时对一个数据库实例进行写入,避免工作线程排队等待的现象,从而提高处理性能。
本申请实施例提供的一种优选的用于键值数据库的数据读写处理设备中,除了为个数据库实例都绑定固定的一个写工作线程之外,还可以绑定读工作线程,专门用于处理对数据库实例的读取操作。
在图6所示设备的基础上,所述判断装置620还用于在所述待处理的请求为读取请求时,利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例。
对于读取请求,可以采用如下形式表示:read request key4,利用所述输入输出线程根据key4的值确定所述写入请求对应的数据库实例的具体方式与写入请求类似,可以对key4进行哈希(hash)计算,由得到的哈希值确定具体所述读取请求对应的数据库实例。
由此,对于读取请求,所述判断装置620具体用于利用所述输入输出线程对所述读取请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述读取请求对应的数据库实例。以leveldb为例,假设leveldb实例的数量为2,即包括leveldb实例C1和leveldb实例C2,对key4进行hash计算后得到的hash值为528929252085459,对hash值取leveldb实例数量的模,即528929252085459%2=1,由此确定该读取请求read request key4对应的数据库实例为leveldb实例C2。
所述分配装置630还用于利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程。在实际应用中,由于leveldb等数据库采用了RCU锁机制,对于1个leveldb实例,允许多个工作线程同时读取,因此每个leveldb实例绑定的读工作线程的数量可以设置多个,例如根据实际读取处理的需求设置2、3、4或者更多。而所述输入输出线程在分配读取请求时,会随机分配至与所述数据库实例绑定的多个读工作线程中的任一读工作线程。
仍以前述leveldb为例,leveldb实例C1和leveldb实例C2分别绑定了两个固定的读工作线程,专门用于处理对两个数据库实例的读取操作,图3(a)中的工作线程B2、B3为与leveldb实例C1绑定的读工作线程,而工作线程B5、B6为与leveldb实例C2绑定的读工作线程。若根据key确定的该读取请求对应的数据库实例为leveldb实例C2,那么所述输入输出线程会将所述读取请求随机分配至工作线程B5和工作线程B6之中的一个,而不会分配给其它工作线程。
所述读写装置640还用于利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。接上例,若所述分配装置630利用所述输入输出线程将所述读取请求分配至工作线程B5中,那么工作线程B5会根据key4由leveldb实例C2读取对应的value。
在实际应用中,针对各个数据库实例的读取请求的数量可能会有较大差别。例如在某一时刻,有3个针对leveldb实例C2的读取请求,而仅有1个针对leveldb实例C1,由于leveldb实例C1和C2绑定的读工作线程的数量均为两个,此时工作线程B5和工作线程B6无法同时处理3个读取请求。因此,其中针对leveldb实例C2的其中一个读取请求需要等处理队列前面的读取请求完成处理之后才可以进行处理,而工作线程B5和工作线程B3由于仅需要处理一个读取请求,因此会由一个工作线程空闲,由此造成了计算资源的浪费,降低了处理效率。
为避免上述问题,本申请实施例还提供了另一种用于键值数据库的数据读写处理设备,该设备在对线程进行读写分离的前提下,仅将写工作线程与数据库实例进行绑定,而每个读工作线程可以用于处理任意数据库实例的读取请求。具体地,在图1所示设备的基础上,所述判断装置620还用于在所述待处理的请求为读取请求时,利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例。所述分配装置630还用于利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程。所述读写装置640还用于利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
如图3(b)所示,工作线程B2、B3、B5和B6均为读工作线程,且均可以处理针对leveldb实例C1或C2的读取请求。若在当前时刻,有3个针对leveldb实例C2的读取请求,而仅有1个针对leveldb实例C1,可以由4个读工作线程同时处理,由此避免计算资源浪费,提高处理效率。
综上所述,本申请实施例通过对数据库实例访问的工作线程读写分离,并为每个数据库实例都绑定固定的一个写工作线程,使得所述输入输出线程在向工作线程分配写入请求时会将该写入请求分配至数据库实例绑定的写工作线程,由此保证不会有两个工作线程同时对一个数据库实例进行写入,避免工作线程排队等待的现象,从而提高处理性能。
此外,在对线程进行读写分离的前提下,仅将写工作线程与数据库实例进行绑定,而每个读工作线程可以用于处理任意数据库实例的读取请求,由此避免计算资源浪费,提高处理效率。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (10)

1.一种用于键值数据库的数据读写处理方法,其中,该方法包括:
利用输入输出线程对待处理的请求进行解码;
若所述待处理的请求为写入请求,则利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例;
利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程;
利用所述写工作线程根据所述写入请求中的键将所述写入请求中的值写入所述数据库实例;
若所述待处理的请求为读取请求,则利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例;
利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程;
利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
2.根据权利要求1所述的方法,其中,所述与所述数据库实例绑定的读工作线程的数量为多个;
利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程,包括:
利用所述输入输出线程将所述读取请求随机分配至与所述数据库实例绑定的多个读工作线程中的任一读工作线程。
3.根据权利要求1所述的方法,其中,利用输入输出线程对待处理的请求进行解码之后,还包括:
若所述待处理的请求为读取请求,则利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例;
利用所述输入输出线程将所述读取请求随机分配至所有读工作线程中的任一读工作线程;
利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
4.根据权利要求1至3中任一项所述的方法,其中,利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例,包括:
利用所述输入输出线程对所述写入请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述写入请求对应的数据库实例。
5.根据权利要求1至3中任一项所述的方法,其中,利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例,包括:
利用所述输入输出线程对所述读取请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述读取请求对应的数据库实例。
6.一种用于键值数据库的数据读写处理设备,其中,该设备包括:
解码装置,用于利用输入输出线程对待处理的请求进行解码;
判断装置,用于在所述待处理的请求为写入请求时,利用所述输入输出线程根据所述写入请求中的键确定所述写入请求对应的数据库实例,在所述待处理的请求为读取请求时,利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例;
分配装置,用于利用所述输入输出线程将所述写入请求分配至与所述数据库实例绑定的写工作线程,利用所述输入输出线程将所述读取请求分配至与所述数据库实例绑定的读工作线程;
读写装置,用于利用所述写工作线程根据所述写入请求中的键将所述写入请求中的值写入所述数据库实例,利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
7.根据权利要求6所述的设备,其中,所述与所述数据库实例绑定的读工作线程的数量为多个;
所述分配装置,用于利用所述输入输出线程将所述读取请求随机分配至与所述数据库实例绑定的多个读工作线程中的任一读工作线程。
8.根据权利要求6所述的设备,其中,所述判断装置,还用于在所述待处理的请求为读取请求时,利用所述输入输出线程根据所述读取请求中的键确定所述读取请求对应的数据库实例;
所述分配装置,还用于利用所述输入输出线程将所述读取请求随机分配至所有读工作线程中的任一读工作线程;
所述读写装置,还用于利用所述读工作线程根据所述读取请求中的键由所述数据库实例读取对应的值。
9.根据权利要求6至8中任一项所述的设备,其中,所述判断装置,用于利用所述输入输出线程对所述写入请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述写入请求对应的数据库实例。
10.根据权利要求6至8中任一项所述的设备,其中,所述判断装置,用于利用所述输入输出线程对所述读取请求中的键进行哈希计算,获取哈希值,并根据所述哈希值确定所述读取请求对应的数据库实例。
CN201510953552.9A 2015-12-17 2015-12-17 用于键值数据库的数据读写处理方法及设备 Active CN106897278B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510953552.9A CN106897278B (zh) 2015-12-17 2015-12-17 用于键值数据库的数据读写处理方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510953552.9A CN106897278B (zh) 2015-12-17 2015-12-17 用于键值数据库的数据读写处理方法及设备

Publications (2)

Publication Number Publication Date
CN106897278A CN106897278A (zh) 2017-06-27
CN106897278B true CN106897278B (zh) 2020-10-30

Family

ID=59189757

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510953552.9A Active CN106897278B (zh) 2015-12-17 2015-12-17 用于键值数据库的数据读写处理方法及设备

Country Status (1)

Country Link
CN (1) CN106897278B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115878301A (zh) * 2021-09-27 2023-03-31 华为技术有限公司 一种数据库网络负载性能的加速框架、加速方法及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102929951A (zh) * 2012-10-08 2013-02-13 深圳市博瑞得科技有限公司 一种数据绑定批量入库方法和装置
CN103246696A (zh) * 2013-03-21 2013-08-14 宁波公众信息产业有限公司 高并发数据库的访问方法及应用于多服务器系统的方法
CN104503989A (zh) * 2014-12-03 2015-04-08 中建材国际贸易有限公司 一种完成异构数据库归集的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7296067B2 (en) * 2002-12-19 2007-11-13 Research In Motion Limited Wireless/LAN router queuing method and system
CN103513932B (zh) * 2012-06-28 2016-04-13 深圳市腾讯计算机系统有限公司 一种数据处理方法及装置
CN103853504B (zh) * 2014-02-12 2017-04-26 上海爱数信息技术股份有限公司 一种缓存系统数据存取方法
CN104391662B (zh) * 2014-12-12 2018-02-09 北京奇虎科技有限公司 一种数据读写方法及装置
CN104536724B (zh) * 2014-12-25 2017-07-07 华中科技大学 一种多核环境下哈希表并发访问性能优化方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102929951A (zh) * 2012-10-08 2013-02-13 深圳市博瑞得科技有限公司 一种数据绑定批量入库方法和装置
CN103246696A (zh) * 2013-03-21 2013-08-14 宁波公众信息产业有限公司 高并发数据库的访问方法及应用于多服务器系统的方法
CN104503989A (zh) * 2014-12-03 2015-04-08 中建材国际贸易有限公司 一种完成异构数据库归集的方法

Also Published As

Publication number Publication date
CN106897278A (zh) 2017-06-27

Similar Documents

Publication Publication Date Title
US10324832B2 (en) Address based multi-stream storage device access
US9720740B2 (en) Resource management in MapReduce architecture and architectural system
US11216187B2 (en) Data writing and reading method and apparatus, and distributed object storage cluster
JP5932043B2 (ja) 不揮発性記憶装置セットの揮発メモリ表現
WO2017020637A1 (zh) 一种分布式数据计算的任务分配方法和任务分配装置
US8677366B2 (en) Systems and methods for processing hierarchical data in a map-reduce framework
CN107124271B (zh) 一种数据加密、解密方法和设备
US8868576B1 (en) Storing files in a parallel computing system based on user-specified parser function
US9460009B1 (en) Logical unit creation in data storage system
US9798482B1 (en) Efficient and secure memory allocation in virtualized computer systems
US10983909B2 (en) Trading off cache space and write amplification for Bε-trees
CN112988066B (zh) 一种数据处理方法及装置
US20140115581A1 (en) Affinity of virtual processor dispatching
WO2023124217A1 (zh) 一种获取多列数据的综合排列数据的方法与设备
CN107408132B (zh) 跨越多个类型的存储器移动分层数据对象的方法和系统
CN111737212A (zh) 一种分布式文件系统提升性能的方法和设备
US20140115599A1 (en) Submitting operations to a shared resource based on busy-to-success ratios
US11385814B2 (en) Method and device for allocating resource of hard disk in distributed storage system
CN103049546B (zh) 一种管理、访问系统日志的方法和装置
CN104679575A (zh) 输入输出流的控制系统及其方法
CN106897278B (zh) 用于键值数据库的数据读写处理方法及设备
US20180095690A1 (en) Creating virtual storage volumes in storage systems
US11487731B2 (en) Read iterator for pre-fetching nodes of a B-tree into memory
US9176910B2 (en) Sending a next request to a resource before a completion interrupt for a previous request
US8966132B2 (en) Determining a mapping mode for a DMA data transfer

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant