CN115599532A - 一种访问索引的方法以及计算机集群 - Google Patents
一种访问索引的方法以及计算机集群 Download PDFInfo
- Publication number
- CN115599532A CN115599532A CN202110766287.9A CN202110766287A CN115599532A CN 115599532 A CN115599532 A CN 115599532A CN 202110766287 A CN202110766287 A CN 202110766287A CN 115599532 A CN115599532 A CN 115599532A
- Authority
- CN
- China
- Prior art keywords
- index information
- server
- client
- lock table
- key value
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种访问索引的方法以及计算机集群,该方法可以应用于存算一体的存储系统或者存算分离的存储系统。在该方法中,客户端根据第一锁表判断第一索引信息是否处于加锁状态;若未处于加锁状态,客户端向第一服务器发送访问请求;第一服务器接收所述访问请求之后,根据第二锁表判断第一索引信息是否处于加锁状态;当确定第一索引信息未处于加锁状态时,第一服务器执行访问请求。通过本申请,当客户端发送的多个访问请求皆用于访问第一索引信息时,第一服务器仅响应其中的一个访问请求,客户端在本地尝试对第一锁表中的第一索引信息进行加锁操作,无需再次向第一服务器发送其余加锁失败的访问请求,能够减少网络资源的开销。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种访问索引的方法以及计算机集群。
背景技术
远程直接内存访问(remote direct memory access,RDMA)是一种绕过远程主机操作系统内核访问其内存中数据的技术。由于RDMA技术不经过操作系统,不仅节省中央处理器(central processing unit,CPU)资源,还可以提高系统吞吐量、降低系统通信时延,广泛应用于数据中心内部,构建了各种新型的分布式系统,如基于RDMA的分布式索引、基于RDMA的数据库、或基于RDMA的文件系统等等。
基于RDMA的分布式索引能够支持对大规模数据的索引,并将索引信息分散至不同的服务器中,以达到访问均衡和内存均衡的目的。目前,客户端可以通过以下方式访问服务器中的索引信息:客户端向服务器发送访问请求,访问请求包括比较和替换(compare andswap,CAS)原语;服务器接收访问请求后,通过高速串行计算机扩展中心总线标准(peripheral component interconnect express,PCIe)消息尝试对内存中的目标索引信息进行加锁操作;若加锁成功,客户端将目标索引信息读取到缓存区中,更新目标索引信息,再将更新后的目标索引信息写入服务器,并通过CAS原语解锁;若加锁失败,客户端再次向服务器发送访问请求,以尝试访问目标索引信息。
一个客户端可以向服务器发送多个访问请求,当该多个访问请求同时访问目标索引信息时,服务器仅响应其中的一个访问请求,对目标索引信息进行加写锁操作。在目标索引处于加锁状态的期间,客户端会再次向服务器发送其余访问失败的访问请求以尝试访问目标索引信息,导致网络资源的浪费。
发明内容
本申请实施例提供一种访问索引的方法以及计算机集群,用以减少网络资源的开销。
第一方面,本申请实施例提供一种访问索引的方法,该方法可以用于存算一体的存储系统中,或者用于存算分离的存储系统中。该方法具体包括:客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态;若未处于加锁状态,所述客户端向第一服务器发送访问请求以访问所述第一索引信息;所述第一服务器接收所述访问请求之后,根据所述第一服务器本地存储的第二锁表判断所述第一索引信息是否处于加锁状态;当所述第一服务器根据所述第二锁表判断所述第一索引信息未处于加锁状态时,所述第一服务器执行所述访问请求。
在上述实施例中,客户端在发出访问请求之前,根据本地存储的第一锁表判断待访问的第一索引信息的加锁状态;若判断出第一索引信息未处于加锁状态,则客户端向第一服务器发送访问请求;否则,客户端在本地再次尝试对第一锁表中的第一索引信息进行加锁操作。这样,当客户端向第一服务器发送多个访问请求,且这多个访问请求皆用于访问第一索引信息时,第一服务器仅响应其中的一个访问请求,对第一索引信息进行加锁操作,在第一索引信息处于加锁状态的期间,客户端在本地再次尝试对第一锁表中的第一索引信息进行加锁操作,无需向第一服务器发送其余加锁失败的访问请求,可以减少网络资源的开销。
在一种可能的设计中,客户端可以包括多个线程,该多个线程包括第一线程;客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态,可以为第一线程根据客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态。
通过上述设计,当客户端的多个线程同时访问第一索引信息时,该多个线程中的一个线程能够对第一锁表的第一索引信息加锁成功,其余线程则加锁失败。加锁成功的这个线程通过网络尝试访问第一索引信息,而加锁失败的线程则继续尝试对第一锁表的第一索引信息进行加锁。加锁失败的线程是在客户端本地继续尝试对第一锁表的第一索引信息进行加锁操作的,不存在网络访问,从而能够减少网络资源的开销,提高网络资源的利用率,可以提高系统的并发性能。
在一种可能的设计中,该第一锁表用于记录所述客户端的多个线程对多个服务器中每个服务器的至少一个索引信息中的每个索引信息的访问情况。其中,该多个服务器包括所述第一服务器。
在一种可能的设计中,该方法还可以包括:所述客户端获取多个服务器中每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息;所述客户端根据所述每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息构建初始化的第一锁表,所述初始化的第一锁表中每个索引信息未处于加锁状态。
通过上述设计,客户端可以获得初始化的第一锁表。
在一种可能的设计中,在所述第一线程根据所述第一锁表判断所述第一索引信息未处于加锁状态时,该方法还可以包括:所述第一线程更新所述第一锁表,更新后的所述第一锁表中所述第一索引信息处于加锁状态。
通过上述设计,在确定第一锁表中的第一索引信息未处于加锁状态时,第一线程可以将第一锁表中的第一索引信息从未处于加锁状态更改为加锁状态,以使得其它访问第一索引信息的线程确定第一锁表中的第一索引信息处于加锁状态。
在一种可能的设计中,该第二锁表存储于所述第一服务器的远程直接内存访问RDMA网卡中。
通过上述设计,当第一服务器的RDMA网卡接收到客户端的访问请求后,第一服务器就可以在RDMA网卡内确定待访问的索引信息是否处于加锁状态,若待访问的索引信息处于加锁状态,第一服务器可以通过RDMA网卡向客户端返回加锁失败的消息,第一服务器的RDMA网卡无需向第一服务器的内存发送PCIe消息,也就减少了第一服务器的RDMA网卡与第一服务器的内存之间的交互次数,能够提高第一服务器的RDMA网卡的吞吐量,降低延迟。
在一种可能的设计中,所述第二锁表用于记录多个客户端对所述第一服务器的至少一个索引信息中的每个索引信息的访问情况。
在一种可能的设计中,该方法还可以包括:所述第一服务器根据所述第一服务器的至少一个索引信息的标识信息构建初始化的第二锁表,所述初始化的第二锁表中每个索引信息未处于加锁状态。
通过上述设计,第一服务器可以获得初始化的第二锁表。
在一种可能的设计中,第一服务器执行所述访问请求,可以为:所述第一服务器更新所述第二锁表,更新后的所述第二锁表中所述第一索引信息处于加锁状态。
通过上述设计,在确定第二锁表中的第一索引信息未处于加锁状态时,第一服务器可以将第二锁表中的第一索引信息从未处于加锁状态更改为加锁状态,以使得其它访问第一索引信息的客户端确定第二锁表中的第一索引信息处于加锁状态。
在一种可能的设计中,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间。进一步,所述第一索引信息包括第一键值,所述第一键值对应于第一键值校验值和第二键值校验值;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。
在一种可能的设计中,在所述第一服务器执行所述访问请求之后,该方法还可以包括:所述第一线程将所述第一键值校验值、所述第一键值以及所述第二键值校验值读取到所述客户端的缓存区中;所述第一线程对所述第一键值校验值增加第一值,更新所述第一键值,以及对所述第二键值校验值增加所述第一值;所述第一线程将增加所述第一值后的所述第一键值校验值、更新后的所述第一键值、以及增加所述第一值后的所述第二键值校验值写回所述第一服务器中。
通过上述方式,当客户端需要对索引信息的一个键值进行更新时,可以将目标键值,以及目标键值对应的两个键值校验值读取到本地,再将更新后的键值,以及增加第一值的两个键值校验值写回服务器中,无需将整个索引信息读取到本地,也就无需将整个索引信息写回服务器中,减少了写放大。
第二方面,本申请实施例提供一种访问索引的方法,该方法可以用于存算一体的存储系统中,或者用于存算分离的存储系统中。该方法可以由客户端执行,或者由客户端的部件(如芯片系统等)执行。该方法具体包括:客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态;若未处于加锁状态,所述客户端向第一服务器发送访问请求以访问所述第一索引信息。
在一种可能的设计中,客户端可以包括多个线程,该多个线程包括第一线程;客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态,可以为:客户端的第一线程根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态。
在一种可能的设计中,该第一锁表用于记录所述客户端的多个线程对多个服务器中每个服务器的至少一个索引信息中的每个索引信息的访问情况。其中,多个服务器包括第一服务器。
在一种可能的设计中,该方法还可以包括:所述客户端获取多个服务器中每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息;所述客户端根据所述每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息构建初始化的第一锁表,所述初始化的第一锁表中每个索引信息未处于加锁状态。
在一种可能的设计中,在所述第一线程根据所述第一锁表判断所述第一索引信息未处于加锁状态时,该方法还可以包括:所述第一线程更新所述第一锁表,更新后的所述第一锁表中所述第一索引信息处于加锁状态。
在一种可能的设计中,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。
第三方面,本申请实施例提供一种访问索引的方法,该方法可以用于存算一体的存储系统中,或者用于存算分离的存储系统中。该方法可以由服务器执行,或者由服务器的部件(如芯片系统)执行。该方法具体包括:第一服务器接收来自客户端的访问请求,所述访问请求为所述客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息未处于加锁状态后发送的,所述访问请求用于访问所述第一索引信息;第一服务器根据所述第一服务器本地存储的第二锁表判断所述第一索引信息是否处于加锁状态;当所述第一服务器根据所述第二锁表判断所述第一索引信息未处于加锁状态时,所述第一服务器执行所述访问请求。
在一种可能的设计中,客户端可以包括多个线程,该多个线程包括第一线程,第一服务器接收来自客户端的访问请求,可以为第一服务器接收来自所述第一线程的访问请求。
在一种可能的设计中,该第一锁表用于记录所述客户端的多个线程对多个服务器中每个服务器的至少一个索引信息中的每个索引信息的访问情况。其中,多个服务器中包括第一服务器。
在一种可能的设计中,该第二锁表存储于所述第一服务器的远程直接内存访问RDMA网卡中。
在一种可能的设计中,所述第二锁表用于记录多个客户端对所述第一服务器的至少一个索引信息中的每个索引信息的访问情况。
在一种可能的设计中,该方法还可以包括:所述第一服务器根据所述第一服务器的至少一个索引信息的标识信息构建初始化的第二锁表,所述初始化的第二锁表中每个索引信息未处于加锁状态。
在一种可能的设计中,第一服务器执行所述访问请求,可以为:所述第一服务器更新所述第二锁表,更新后的所述第二锁表中所述第一索引信息处于加锁状态。
在一种可能的设计中,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。
进一步,所述第一索引信息包括第一键值,所述第一键值对应于第一键值校验值和第二键值校验值;在所述第一服务器执行所述访问请求之后,该方法还可以包括:所述第一线程将所述第一键值校验值、所述第一键值以及所述第二键值校验值读取到所述客户端的缓存区中;所述第一线程对所述第一键值校验值增加第一值,更新所述第一键值,以及对所述第二键值校验值增加所述第一值;所述第一线程将增加所述第一值后的所述第一键值校验值、更新后的所述第一键值、以及增加所述第一值后的所述第二键值校验值写回所述第一服务器中。
第四方面,本申请实施例提供一种通信装置,该通信装置可以部署在电子设备,用于实现上述第一方面或第一方面任一项可能的设计中所述客户端所实现的功能,或者用于实现上述第二方面或第二方面任一项可能的设计中所述客户端所实现的功能。所述通信装置所实现的功能可以过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块(或单元),如包括处理模块、收发模块以及存储模块。
第五方面,本申请实施例提供一种通信装置,该通信装置可以部署在电子设备,用于实现上述第一方面或第一方面任一项可能的设计中所述第一服务器所实现的功能,或者用于实现上述第三方面或第三方面任一项可能的设计中所述第一服务器所实现的功能。所述通信装置所实现的功能可以过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块(或单元),如包括处理模块、收发模块以及存储模块。
第六方面,本申请实施例提供一种电子设备,该电子设备可以是服务器等。该电子设备可以包括一个或多个处理器,存储器以及通信接口。其中,存储器,用于存储计算机程序和数据。该存储器与该一个或多个处理器耦合,该一个或多个处理器可以执行该存储器中存储的计算机程序,用于实现上述第一方面或第一方面任一项可能的设计中所述客户端所实现的功能,或者用于实现上述第二方面或第二方面任一项可能的设计中所述客户端所实现的功能。
第七方面,本申请实施例提供一种电子设备,该电子设备可以是服务器等。该电子设备可以包括一个或多个处理器,存储器以及通信接口。其中,存储器,用于存储计算机程序和数据。该存储器与该一个或多个处理器耦合,该一个或多个处理器可以执行该存储器中存储的计算机程序,用于实现上述第一方面或第一方面任一项可能的设计中所述第一服务器所实现的功能,或者用于实现上述第三方面或第三方面任一项可能的设计中所述第一服务器所实现的功能。
第八方面,本申请实施例提供一种计算机集群,包括客户端和多个服务器,所述多个服务器包括第一服务器,所述客户端用于实现上述第一方面或第一方面任一项可能的设计中客户端所实现的功能,或者用于实现上述第二方面或第二方面任一项可能的设计中客户端所实现的功能。所述第一服务器用于实现上述第一方面或第一方面任一项可能的设计中第一服务器所实现的功能,或者用于实现上述第三方面或第三方面任一项可能的设计中所述第一服务器所实现的功能。
第九方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行上述第二方面或第二方面任一项可能的设计中所述的方法,或者执行上述第三方面或第三方面任一项可能的设计中所述的方法。
第十方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行上述第三方面或第三方面任一项可能的设计中所述的方法。
第十一方面,本申请实施例提供一种计算机程序产品,包括指令,当所述指令在电子设备上运行时,使得所述电子设备执行上述第二方面或第二方面任一项可能的设计中所述的方法。
第十二方面,本申请实施例提供一种计算机程序产品,包括指令,当所述指令在电子设备上运行时,使得所述电子设备执行上述第三方面或第三方面任一项可能的设计中所述的方法。
第十三方面,本申请实施例还提供一种芯片系统,该芯片系统包括至少一个处理器和接口电路,所述处理器用于通过所述接口电路执行指令和/或数据的交互,使得所述芯片系统所在的装置执行上述第二方面或第二方面任一项可能的设计中所述的方法。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
第十四方面,本申请实施例还提供一种芯片系统,该芯片系统包括至少一个处理器和接口电路,所述处理器用于通过所述接口电路执行指令和/或数据的交互,使得所述芯片系统所在的装置执行上述第三方面或第三方面任一项可能的设计中所述的方法。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
上述第二方面至第十四方面及其可能的设计的有益效果请参照上述第一方面及其任一项可能的设计所能达到的技术效果,这里不再重复赘述。
附图说明
图1为本申请实施例提供的存储系统的一种结构示意图;
图2A为本申请实施例提供的第二锁表的一种示意图;
图2B为本申请实施例提供的第一锁表的一种示意图;
图3为本申请实施例提供的存储系统的又一种结构示意图;
图4为本申请实施例提供的一种访问索引的方法的流程示意图;
图5为本申请实施例中的索引信息的结构示意图;
图6为本申请实施例提供的一种索引信息的结构示意图;
图7为本申请实施例提供的通信装置的一种结构示意图;
图8为本申请实施例提供的通信装置的又一种结构示意图。
具体实施方式
首先,先对本申请实施例中涉及的部分用语进行解释说明,以便于本领域技术人员容易理解。
(1)索引信息,又可以称为索引数据结构的节点、或数据结构节点等,为文件系统中的一种数据结构。每个索引信息包括文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名。
(2)CAS原语,一种原子指令,用于对服务器的索引信息进行读、写等操作。该CAS原语包括三个参数,即addr,compare,swap。这三个参数的语义为:当地址addr中的值等于compare时,地址addr中的值被置为swap,并返回成功;否则,返回失败。
应理解的是,客户端可以通过CAS原语对服务器的索引信息进行读、写等操作,还可以通过其它原语实现对服务器的索引信息的读、写等操作,本申请实施例以CAS原语为例进行描述。
(3)本地锁,可以理解为一个标记,用于实现同一个客户端的多个线程同时访问同一个索引信息时,只能该多个线程中的一个线程执行该访问。
全局锁,也可以理解为一个标记,用于实现多个客户端同时访问同一个索引信息时,只能该多个客户端中的一个客户端执行该访问。
(4)本申请实施例的描述中,“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本申请中所涉及的至少一个是指一个或多个;多个,是指两个或两个以上。
以及,除非有相反的说明,本申请实施例提及“第一”、“第二”、“第三”等序数词是用于对多个对象进行区分,不用于限定多个对象的大小、内容、顺序、时序、优先级或者重要程度等。例如,第一信息、第二信息和第三信息等,只是为了区分不同的信息,而并不是表示这三个信息的大小、内容、发送顺序、优先级或者重要程度等的不同。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于理解本申请实施例,接下来对本请的应用场景进行介绍,本申请实施例描述的网络架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
图1所示为本申请实施例提供的存储系统的一种结构示意图。如图1所示,该存储系统100为存算一体的分布式存储系统,包括存储集群和客户端集群。下面分别对存储集群和客户端集群进行介绍。
(1)存储集群
存储集群包括一个或多个服务器110(图1中示出了三个服务器110,但不限于三个服务器110),各个服务器110之间可以相互通信。服务器110是一种既具有计算能力又具有存储能力的设备,如服务器、台式计算机等。示例性的,随机存取存储器(random accessmemory,RAM)服务器或者X86服务器都可以作为这里的服务器110。在硬件上,如图1所示,服务器110至少包括处理器112、内存113、网卡114和硬盘115。处理器112、内存113、网卡114和硬盘115之间通过总线连接。其中,处理器112和内存113用于提供计算资源。
具体地,处理器112是一个CPU,用于处理来自服务器110外部(客户端120、应用服务器或者其他服务器110)的数据访问请求,也用于处理服务器110内部生成的请求。示例性的,处理器112接收写数据请求时,会将这些写数据请求中的数据暂时保存在内存113中。当内存113中的数据总量达到一定阈值时,处理器112将内存113中存储的数据发送给硬盘115进行持久化存储。除此之外,处理器112还用于数据进行计算或处理,例如元数据管理、重复数据删除、数据压缩、数据校验、虚拟化存储空间以及地址转换等。图1中仅示出了一个CPU112,在实际应用中,CPU 112的数量往往有多个,其中,一个CPU 112又具有一个或多个CPU核。本申请实施例不对CPU的数量,以及CPU核的数量进行限定。
内存113是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。在本申请实施例中内存113存储有一个或多个索引信息。在下文中,每个服务器110包括的索引信息的数量可以记为N,N为大于0的正整数。应理解的是,每个服务器110包括的索引数量可以不同,本申请实施例对每个服务器100所包括的索引信息的数量并不限定。
内存113包括至少两种存储器,例如内存113既可以是随机存取存储器,也可以是只读存储器(read only memory,ROM)。举例来说,随机存取存储器是动态随机存取存储器(dynamic random access memory,DRAM),或者存储级存储器(storage class memory,SCM)。DRAM是一种半导体存储器,与大部分RAM一样,属于一种易失性存储器(volatilememory)设备。SCM是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但存取速度上比DRAM慢,在成本上也比DRAM更为便宜。然而,DRAM和SCM在本申请实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(static random access memory,SRAM)等。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,PROM)、可抹除可编程只读存储器(erasable programmable read only memory,EPROM)等。另外,内存113还可以是双列直插式存储器模块或双线存储器模块(dual in-line memorymodule,DIMM),即由DRAM组成的模块,还可以是固态硬盘(solid state disk,SSD)。实际应用中,服务器110中可配置多个内存113,以及不同类型的内存113。本实施例不对内存113的数量和类型进行限定。此外,可对内存113进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存113中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。
硬盘115用于提供存储资源,例如存储数据。它可以是磁盘或者其他类型的存储介质,例如固态硬盘或者叠瓦式磁记录硬盘等。
网卡114用于与其他应用服务器110、客户端120通信。在本申请实施例中,网卡114存储有第二锁表,该第二锁表用于记录多个客户端120对服务器110所包括的一个或多个索引信息的访问情况。以服务器110包括三个索引信息为例,表1为第二锁表的一种示例,如表1所示,索引信息1处于加锁状态,索引信息2处于未加锁状态,索引信息3处于加锁状态,索引信息4处于加锁状态。
表1
索引信息 | 是否处于加锁状态 |
索引信息1 | 是 |
索引信息2 | 否 |
索引信息3 | 是 |
索引信息4 | 是 |
在一种可能的实施方式中,该第二锁表还可以包括客户端的标识信息,以标识索引信息是由哪个客户端加锁的。表2为第二锁表的又一种示例,如表2所示,索引信息1是由客户端1加锁的,索引信息2是由客户端2加锁的,索引信息4是由客户端1加锁的。不同的索引信息可以由同一个客户端的不同线程加锁。可选的,该第二索引还可以包括线程的标识信息,以标识索引信息是由客户端的哪个线程加锁的。
表2
索引信息 | 是否处于加锁状态 | 客户端 |
索引信息1 | 是 | 客户端1 |
索引信息2 | 否 | |
索引信息3 | 是 | 客户端2 |
索引信息4 | 是 | 客户端1 |
可以理解的是,表1、表2中的各项数据仅为一种示例,并不对第二锁表进行限定。第二锁表可以是表格,如表1、表2所示,也可以是文本,还可以数组结构等,本申请实施例对第二锁表的具体实现形式并不限定于此。当第二锁表为数组结构时,该数组结构中的每64位的元素可以对应一个全局锁,一个全局锁对应一个索引信息。以存储集群包括M个服务器为例,图2A示出了每个服务器110的第二锁表的一种结构示意图。如图2A所示,服务器1的第二锁表中包括N1个全局锁,服务器M的第二锁表中包括Nm个全局锁,M为大于2的整数。在下文中以第二锁表为数组结构为例进行介绍。
内存113与网卡114之间通过PCIe进行通信。索引信息存储在内存113中,网卡114接收到来自客户端120的包括CAS原语的加锁消息后,需要通过PCIe消息将CAS原语发送给内存113,由内存113对目标索引信息进行读、写等操作。若多个线程同时对同一个目标索引信息进行加锁操作,则网卡114需要多次发送PCIe消息,使得网卡114的吞吐量降低,且延迟高。
在本申请实施例中,第二锁表存储在网卡114中,这样当网卡114接收到来自客户端120的包括CAS原语的加锁消息后,服务器110可以根据该第二锁表确定目标索引信息是否处于加锁状态。如果服务器110根据第二锁表确定目标索引信息未处于加锁状态,则网卡114通过PCIe消息将CAS原语发送给内存113,由内存113对目标索引信息执行读、写等操作;否则,服务器110直接向客户端120返回加锁失败的消息,网卡114无需向内存113发送PCIe消息,减少了网卡114与内存113之间的交互次数,从而可以提高网卡114的吞吐量,降低延迟。
(2)客户端集群
客户端集群包括一个或多个客户端120(图1中示出了三个客户端120,但不限于三个客户端120),各个服务器120之间可以相互通信。客户端120是一种既具有计算能力又具有存储能力的设备,如服务器、台式计算机等。示例性的,RAM服务器或者X86服务器都可以作为这里的客户端120。在硬件上,如图1所示,客户端120至少包括处理器122、内存123、网卡124和硬盘125。处理器122、内存123、网卡124和硬盘125之间通过总线连接。其中,处理器122和内存123用于提供计算资源。
处理器122的具体实现方式与服务器110的处理器112的具体实现方式类似,请参考前述有关处理器112的描述,在此不再赘述。在本申请实施例中,处理器122可以运行至少一个线程(图1包括多个线程),这些线程可用于访问服务器110的索引信息,当然本申请实施例对线程的具体实现方式并不限定于此。应理解的是,每个客户端120的处理器122中的线程的数量可以不同,本申请实施例对此不作限定。
内存123的具体实现方式与服务器110的内存113的具体实现方式类型,请参考前述有关内存113的描述,在此不再赘述。在本申请实施例中,内存123存储有第一锁表,该第一锁表用于记录客户端120的多个线程对存储集群中每个服务器110的至少一个索引信息中的每个索引信息的访问情况。以存储集群包括三个服务器为例,表3为第一锁表的一种示例,如表3所示,服务器1包括索引信息1和索引信息2,索引信息1处于加锁状态,索引信息2未处于加锁状态;服务器2包括索引信息3,索引信息3处于加锁状态;服务器3包括索引信息4、索引信息5以及索引信息6,索引信息4、索引信息5以及索引信息6皆处于未加锁状态。
表3
在一种可能的实施方式中,该第一锁表还可以包括线程的标识信息,以标识索引信息是由哪个线程加锁的。以客户端120包括三个线程为例,表4为第一锁表的又一种示例,如表4所示,服务器1的索引信息1是由客户端的线程1加锁的,索引信息3是由客户端的线程2加锁的。
表4
可以理解的是,表3、表4中的各项数据仅为一种示例,并不对第一锁表进行限定。第一锁表可以是表格,如表3、表4所示,也可以是文本,还可以是数组结构等,本申请实施例对第一锁表的具体实现形式并不限定于此。示例性的,当第一锁表为数组结构时,该数组结构中的每64位的元素可以对应一个本地锁。以存储集群包括M个服务器为例,图2B示出了每个客户端120的第一锁表的结构示意图。如图2B所示,服务器1对应N1个本地锁,服务器M对应Nm个本地锁,M为大于2的整数。在下文中以第一锁表为数组结构为例进行介绍。
硬盘125用于提供存储资源,例如存储数据。它可以是磁盘或者其他类型的存储介质,例如固态硬盘或者叠瓦式磁记录硬盘等。网卡124用于与服务器110、其它客户端120通信。
前面介绍了本申请实施例提供的存储系统可以为存算一体的分布式存储系统中。在一种可能的实现方式中,本申请实施例提供的方法还可以应用于存算分离的分布式存储系统。
图3所示为本申请实施例提供的存储系统的又一种结构示意图。如图3所示,该存储系统300为存算分离的分布式存储系统,包括计算节点集群和存储节点集群。
计算节点集群包括一个或多个计算节点210(图3中示出了三个计算节点210,但不限于三个计算节点210),各个计算节点210之间可以相互通信。计算节点210是一种计算设备,如服务器、台式计算机或者存储阵列的控制器等。如图3所示,计算节点210至少包括一个或多个CPU 212(图3中示出了一个CPU 212,但不限于一个CPU 212)、内存213和网卡214。CPU 212以及内存213的具体实现方式与图1中的客户端120的处理器122以及内存123的具体实现方式类型,请参考前述有关处理器122以及内存123的描述,在此不再赘述。例如,CPU212可以运行一个或多个线程(图3包括多个线程),这些线程用于访问存储节点220的索引信息。又例如,内存213存储有第一锁表,用于记录计算节点210的多个线程,对存储节点集群中每个存储节点220的至少一个索引信息中的每个索引信息的访问情况。网卡214用于与存储节点220通信。
任意一个计算节点210可通过网络访问存储节点集群中的任意一个存储节点220。存储节点集群包括多个存储节点220(图3中示出了三个存储节点220,但不限于三个存储节点220)。一个存储节点220包括一个或多个控制单元221、网卡224与多个硬盘225。
其中,控制单元221用于根据计算节点210发送的读/写数据请求,往硬盘225中写入数据或者从硬盘225中读取数据。在读写数据的过程中,控制单元221需要将读/写数据请求中携带的地址转换为硬盘能够识别的地址。该控制单元221还用于存储一个或多个索引信息。网卡224用于与计算节点210通信。该网卡224还存储有第二锁表,该第二锁表用于记录计算节点集群中的多个计算节点210对控制单元221存储的至少一个索引信息的访问情况,第二锁表的具体实现方式请参考前面相关内容,在此不再赘述。硬盘225用于存储数据,可以是磁盘或者其他类型的存储介质,例如固态硬盘或者叠瓦式磁记录硬盘等。
另外,图1、图3中的网卡(如网卡124、网卡114、网络214、网卡224)可以为RDMA网卡。
前面介绍了本申请实施例提供的存储系统,接下来介绍本申请实施例提供访问索引的方法。
图4为本申请实施例提供的访问索引的方法的一种流程示意图。该方法可以应用于图1所示的存储系统100中,或者也可以应用于图3所示的存储系统300中。当该方法应用于存储系统100时,客户端可以为客户端120,或者为客户端120的部件(如芯片系统等),第一服务器可以为服务器110,或者为服务器110的部件(如芯片系统等)。当该方法应用于存储系统300时,客户端可以为计算节点210,或者为计算节点210的部件(如芯片系统等),第一服务器可以为存储节点220,或者为存储节点220的部件(如芯片系统等)。如图4所示,该方法包括如下内容。
S401:客户端根据第一锁表判断第一索引信息是否处于加锁状态。
客户端在发出访问请求之前,可以根据本地存储的第一锁表判断待访问的第一索引信息是否处于加锁状态。例如,客户端的第一线程根据本地存储的第一锁表判断待访问的第一索引信息是否处于加锁状态。为了便于理解本申请实施例,在下文中以客户端的第一线程访问第一索引信息为例进行描述。
客户端包括一个或多个线程,该一个或多个线程中包括第一线程。该一个或多个线程可用于访问服务器中的索引信息。第一锁表用于记录客户端的至少一个线程,对多个服务器中的每个服务器的至少一个索引信息中的每个索引信息的访问情况,如表3、或表4、或图2A所示。该多个服务器中包括第一服务器。该多个服务器为与客户端位于同一个存储系统的服务器。例如,当客户端为存储系统100中的一个客户端120时,该多个服务器可以为该存储系统100的存储集群中的全部服务器110。又例如,当客户端为存储系统300的计算节点210时,该多个服务器可以为该存储系统300的存储节点集群中的全部存储节点220。在没有特殊说明的情况下,本申请实施例以客户端包括多个线程为例进行描述。
在一种可能的实施方式中,客户端可以获取多个服务器中每个服务器的标识信息以及每个服务器包括的至少一个索引信息的标识信息。例如,在存储系统部署时,客户端可以通过该存储系统的拓扑结构、配置信息等获取该存储系统中的全部服务器的标识信息,以及每个服务器包括的至少一个索引信息的标识信息。进一步,客户端可以根据该每个服务器的标识信息以及每个服务器包括的至少一个索引信息的标识信息构建初始化的第一锁表。该初始化的第一锁表中每个索引信息的加锁状态皆为未加锁。其中,服务器的标识信息可以为服务器的地址,或者为其它用于区别于其它服务的信息。索引信息的标识信息可以是索引信息的地址,或者为其它用于区别于其它索引信息的信息。为了便于理解本申请实施例,下文中以服务器的标识信息为服务器的地址,索引信息的标识信息为索引信息的地址为例进行描述。
在第一线程发送访问请求之前,第一线程可以根据客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态。具体的,第一线程获取第一索引信息的标识信息(如第一索引信息的地址),根据第一索引信息的地址和第一锁表判断第一索引信息是否处于加锁状态。例如,在第一服务器的索引信息的数量大于1时,即N>1时,第一线程可以按照如下步骤判断第一索引信息是否处于加锁状态:A1,第一线程可以对第一索引信息的地址进行哈希运算;A2,第一线程对哈希运算后的第一索引信息的地址进行N的取余运算,得到第一索引信息在N个索引信息中的索引值;A3,第一线程根据第一索引信息在N个索引信息中的索引值查询第一锁表,以获取第一索引信息在第一锁表中的加锁状态。
如果第一线程根据第一锁表确定第一索引信息处于加锁状态,则执行步骤S401所示的内容,即第一线程继续尝试对第一索引信息进行加锁操作;否则,执行步骤S402所示的内容,并更新第一锁表,更新后的第一锁表中第一索引信息处于加锁状态。也就是说,第一线程根据第一锁表确定第一索引信息未处于加锁状态时,第一线程将第一锁表中第一索引信息的加锁状态从未加锁状态更改为加锁状态。例如,第一索引信息的索引值为i,第一线程可以获取第一锁表中的第i个本地锁。如果获取成功,则第一线程确定第一索引信息未处于加锁状态,并对第一索引信息进行加锁操作,使得第一锁表的第一索引信息处于加锁状态;如果获取失败,则第一线程确定第一索引信息处于加锁状态,并再次获取第一锁表的第i个本地锁。
通过上述方式,当有客户端的多个线程同时访问第一索引信息时,该多个线程中的一个线程能够对第一锁表的第一索引信息加锁成功,其余线程则加锁失败。加锁成功的这个线程通过网络尝试访问第一服务器的第一索引信息,而加锁失败的线程则继续尝试对第一锁表的第一索引信息进行加锁。加锁失败的线程是在客户端本地继续尝试对第一锁表的第一索引信息进行加锁操作的,不存在网络访问,能够减少网络资源的开销,提高网络资源的利用率,可以提高系统的并发性能。
S402:客户端向第一服务器发送访问请求。相应的,第一服务器接收该访问请求。
客户端可以根据第一服务器的地址向第一服务器发送访问请求以访问第一索引信息。其中,访问请求包括第一索引信息的标识信息和CAS原语。例如,客户端的RDMA网卡将访问请求发送给第一服务器的RDMA网卡,相应的,第一服务器的RDMA网卡接收该访问请求。
S403:第一服务器根据第二锁表判断第一索引信息是否处于加锁状态。
第一服务器包括至少一个索引信息,该至少一个索引信息包括第一索引信息。第二锁表用于记录第一服务器的至少一个索引信息对至少一个索引信息中每个索引信息的访问情况,如表1、或表2所示。
在一种可能的实施方式中,第一服务器可以根据自身的一个或多个索引信息的标识信息构建初始化的第二锁表,初始化的第二锁表中每个索引信息的加锁状态皆为未加锁。例如,在存储系统部署时,第一服务器根据自身的至少一个索引信息的标识信息构建该初始化的第二锁表。
第一服务器响应于访问请求,根据第二锁表判断第一索引信息是否处于加锁状态。具体的,第一服务器可以根据访问请求包括的第一索引信息的地址和第二锁表判断第一锁表是否处于加锁状态。例如,第一服务器可以根据第一索引信息的地址确定第一索引信息的索引值,并根据第一索引信息的索引值查询第二锁表,以获取第一索引信息在一锁表中的加锁状态。
如果第一服务器根据第二锁表确定第一索引信息处于加锁状态,则执行步骤S404所示的内容,即第一服务器向客户端发送访问响应,该访问响应用于指示加锁失败。如果第一服务器根据第二锁表确定第一索引信息未处于加锁状态,则执行步骤S405所示的内容,并更新第二锁表,更新后的第二锁表中第一索引信息处于加锁状态。也就是说,第一服务器根据第二锁表确定第一索引信息未处于加锁状态时,第一服务器将第二锁表中第一索引信息的加锁状态从未加锁状态更改为加锁状态。例如,第一索引信息的索引值为i,第一服务器可以获取第二锁表中的第i个全局锁。如果获取成功,则第一服务器确定第一索引信息未处于加锁状态,并对第一索引信息进行加锁操作,使得第二锁表的第一索引信息处于加锁状态;如果获取失败,则第一服务器确定第一索引信息处于加锁状态,向客户端返回加锁失败的消息。
在本申请实施例中,第二锁表可以存储在第一服务器的RDMA网卡中。当第一服务器的RDMA网卡接收到客户端的访问请求后,第一服务器就可以在RDMA网卡内确定待访问的索引信息是否处于加锁状态,若待访问的索引信息处于加锁状态,第一服务器可以通过RDMA网卡向客户端返回加锁失败的消息,第一服务器的RDMA网卡无需向第一服务器的内存发送PCIe消息,也就减少了第一服务器的RDMA网卡与第一服务器的内存之间的交互次数,能够提高第一服务器的RDMA网卡的吞吐量,降低延迟。
S404:第一服务器向客户端发送访问响应。相应的,客户端接收访问响应。
第一服务器根据第二锁表确定第一索引信息处于加锁状态时,第一服务器可以生成访问响应,并将该访问响应发送给客户端。该访问响应用于指示加锁失败。客户端接收该访问响应后,执行步骤S402所示的内容,即再次向第一服务器发送访问请求,以尝试访问第一索引信息。
S405:第一服务器执行访问请求。
第一服务器根据第二锁表确定第一索引信息未处于加锁状态时,第一服务器执行该访问请求。其中,第一索引信息中包括一个或多个键值,该一个或多个键值位于两个索引校验值之间,如图5所示,该两个索引校验值记为索引校验值1和索引校验值2。具体的,第一服务器响应于访问请求的CAS原语,将第一索引信息发送给客户端。相应的,第一线程通过RDMA读原语将整个第一索引信息读取到客户端的缓存区中,对索引校验值1加1,更新该的一个或多个键值中的部分或全部,对索引校验值2加1,然后通过RDMA写原语将包括索引校验值1加1,更新后的键值,以及索引校验值2加1的第一索引信息写回第一服务器。在此期间,若有其它客户端(记为第二客户端)对该第一索引信息进行无锁的读操作,该第二客户端可以检测索引校验值1和索引校验值2是否一致;若一致,则该第二客户端在第一索引信息内搜索目标键值并读取;否则,该第二客户端再次对第一索引信息执行读操作。
在上述方式中,即使客户端是对第一索引信息中的一个键值进行写操作,客户端也需要将整个第一索引信息读取到本地缓存区内,执行写操作后再将整个第一索引信息写回第一服务器中,造成了写放大。
鉴于此,本申请实施例提供了索引信息的一种结构。具体的,索引信息包括多个键值,该多个键值位于两个索引校验值之间,多个键值中的每个键值对应于两个键值校验值,且每个键值位于两个键值校验值之间,如图6所示。其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。键值校验值的大小可以为8比特,但本申请实施例并不限定于此。索引校验值的大小也可以为8比特,但本申请实施例并不限于此。
以待更新的键值为第一索引信息中的键值j为例,第一服务器执行访问请求之后,可以包括如下步骤:B1,第一线程通过RDMA读原语将键值校验值1、键值j以及键值校验值2读取到客户端的缓存区中;B2,第一线程对键值校验值1增加第一值,更新键值j,以及对键值校验值2增加第一值;B3,第一线程将增加第一值后的键值校验值1、更新后的键值j、以及增加第一值后的键值校验值2写回第一服务器中。其中,第一值的取值可以为1,但本申请实施例并不限定于此。在此期间,若有其它客户端(记为第三客户端)对该第一索引信息进行无锁的读操作,该第三客户端可以先检测索引校验值1与索引校验值2是否一致;若不一致,则该第三客户端再次对第一索引信息进行读操作;否则,该第三客户端在第一索引信息内搜索待读取的目标键值(如根据目标键值的索引值搜索该目标键值),并检测该目标键值对应的两个键值校验值是否一致;若两个键值校验值一致,则该客户端读取该目标键值;否则,该客户端再次对第一索引信息进行读操作。
在第一线程将更新后的第一索引信息(或者更新后的目标键值)写回第一服务器,即第一服务器接收到更新后的第一索引信息(或者更新后的目标键值)之后,第一服务器更新第二锁表,更新后的第二锁表中的第一索引信息未处于加锁状态;以及客户端更新第一锁表,更新后的第一锁表中的第一索引信息未处于加锁状态。
通过上述方式,当客户端需要对索引信息的一个键值进行更新时,可以将目标键值,以及目标键值对应的两个键值校验值读取到本地,再将更新后的键值,以及增加第一值的两个键值校验值写回服务器中,无需将整个索引信息读取到本地,也就无需将整个索引信息写回服务器中,减少了写放大。
上述本申请提供的实施例中,分别从客户端与服务器之间的交互的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,客户端、服务器可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。
图7示出了一种通信装置700的结构示意图,该通信装置可以部署在电子设备中,能够实现本申请实施例提供的方法中客户端所实现的功能。通信装置700可以是硬件结构、软件模块、或硬件结构加软件模块。通信装置700可以由芯片系统实现。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
通信装置700可以包括处理模块701、收发模块702以及存储模块703。
示例性的,处理模块701用于根据存储模块703存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态;若未处于加锁状态,收发模块702向第一服务器发送访问请求以访问所述第一索引信息。
在一种可能的实施方式中,该第一锁表用于记录所述客户端的多个线程对多个服务器中每个服务器的至少一个索引信息中的每个索引信息的访问情况。其中,多个服务器包括第一服务器。
在一种可能的实施方式中,处理模块701进一步用于获取多个服务器中每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息;以及根据所述每个服务器的标识信息以及所述每个服务器包括的至少一个索引信息的标识信息构建初始化的第一锁表,所述初始化的第一锁表中每个索引信息未处于加锁状态。
在一种可能的实施方式中,在所述第一线程根据所述第一锁表判断所述第一索引信息未处于加锁状态时,处理模块701进一步用于:更新所述第一锁表,更新后的所述第一锁表中所述第一索引信息处于加锁状态。
在一种可能的实施方式中,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。
收发模块702用于通信装置700和其它模块进行通信,其可以是电路、器件、接口、总线、软件模块、收发器或者其它任意可以实现通信的装置。
其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
图8示出了一种通信装置800的结构示意图,该通信装置可以部署在电子设备中,能够实现本申请实施例提供的方法中服务器所实现的功能。通信装置800可以是硬件结构、软件模块、或硬件结构加软件模块。通信装置800可以由芯片系统实现。本申请实施例中,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
通信装置800可以包括处理模块801、收发模块802以及存储模块803。
示例性的,收发模块802用于接收来自客户端的访问请求,所述访问请求为所述客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息未处于加锁状态后发送的,所述访问请求用于访问所述第一索引信息。处理模块801用于根据存储模块803存储的第二锁表判断所述第一索引信息是否处于加锁状态;当所述第一服务器根据所述第二锁表判断所述第一索引信息未处于加锁状态时,所述处理模块801用于执行所述访问请求。
在一种可能的设计中,客户端可以包括多个线程,该多个线程包括第一线程,收发模块802具体用于接收来自所述第一线程的访问请求。
在一种可能的设计中,该第一锁表用于记录所述客户端的多个线程对多个服务器中每个服务器的至少一个索引信息中的每个索引信息的访问情况。其中,多个服务器中包括通信装置800。
在一种可能的实施方式中,该第二锁表存储于所述第一服务器的远程直接内存访问RDMA网卡中。
在一种可能的实施方式中,所述第二锁表用于记录多个客户端对所述第一服务器的至少一个索引信息中的每个索引信息的访问情况。
在一种可能的实施方式中,处理模块801进一步用于:根据所述第一服务器的至少一个索引信息的标识信息构建初始化的第二锁表,所述初始化的第二锁表中每个索引信息未处于加锁状态。
在一种可能的实施方式中,处理模块801具体用于:更新所述第二锁表,更新后的所述第二锁表中所述第一索引信息处于加锁状态。
在一种可能的实施方式中,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。进一步,所述第一索引信息包括第一键值,所述第一键值对应于第一键值校验值和第二键值校验值;处理模块801进一步用于:将所述第一键值校验值、所述第一键值以及所述第二键值校验值读取到所述客户端的缓存区中;对所述第一键值校验值增加第一值,更新所述第一键值,以及对所述第二键值校验值增加所述第一值;以及增加所述第一值后的所述第一键值校验值、更新后的所述第一键值、以及增加所述第一值后的所述第二键值校验值写回所述第一服务器中。
收发模块802用于通信装置800和其它模块进行通信,其可以是电路、器件、接口、总线、软件模块、收发器或者其它任意可以实现通信的装置。
其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
本申请实施例提供的方法中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,简称DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,简称DVD))、或者半导体介质(例如,SSD)等。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (16)
1.一种访问索引的方法,其特征在于,包括:
客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态;
若未处于加锁状态,所述客户端向第一服务器发送访问请求以访问所述第一索引信息;
所述第一服务器接收所述访问请求之后,根据所述第一服务器本地存储的第二锁表判断所述第一索引信息是否处于加锁状态;
当所述第一服务器根据所述第二锁表判断所述第一索引信息未处于加锁状态时,所述第一服务器执行所述访问请求。
2.根据权利要求1所述的方法,其特征在于,所述客户端包括多个线程;
客户端根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态,包括:
所述多个线程中的第一线程根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态。
3.根据权利要求2所述的方法,其特征在于,
所述第一锁表用于记录所述多个线程对所述第一服务器的至少一个索引信息中的每个索引信息的访问情况。
4.根据权利要求2或3所述的方法,其特征在于,所述方法还包括:
所述客户端获取所述第一服务器的标识信息以及所述第一服务器包括的至少一个索引信息的标识信息;
所述客户端根据所述第一服务器的标识信息以及所述第一服务器包括的至少一个索引信息的标识信息构建初始化的第一锁表,所述初始化的第一锁表中每个索引信息未处于加锁状态。
5.根据权利要求2至4中任一项所述的方法,其特征在于,在所述第一线程根据所述第一锁表判断所述第一索引信息未处于加锁状态时,所述方法还包括:
所述第一线程更新所述第一锁表,更新后的所述第一锁表中所述第一索引信息处于加锁状态。
6.根据权利要求2至5中任一项所述的方法,其特征在于,
所述第二锁表存储于所述第一服务器的远程直接内存访问RDMA网卡中。
7.根据权利要求2至6中任一项所述的方法,其特征在于,
所述第二锁表用于记录多个客户端对所述第一服务器的至少一个索引信息中的每个索引信息的访问情况。
8.根据权利要求2至7中任一项所述的方法,其特征在于,所述方法还包括:
所述第一服务器根据所述第一服务器的至少一个索引信息的标识信息构建初始化的第二锁表,所述初始化的第二锁表中每个索引信息未处于加锁状态。
9.根据权利要求2至8中任一项所述的方法,其特征在于,所述第一服务器执行所述访问请求,包括:
所述第一服务器更新所述第二锁表,更新后的所述第二锁表中所述第一索引信息处于加锁状态。
10.根据权利要求2至9中任一项所述的方法,其特征在于,所述第一索引信息包括多个键值,所述多个键值位于两个索引校验值之间,所述多个键值中的每个键值对应于两个键值校验值,所述每个键值位于所述两个键值校验值之间;其中,所述两个索引校验值用于确定所述多个键值中的至少两个键值是否更新完成,所述两个键值校验值用于确定位于所述两个键值校验值之间的键值是否更新完成。
11.根据权利要求10所述的方法,其特征在于,所述第一索引信息包括第一键值,所述第一键值对应于第一键值校验值和第二键值校验值;
在所述第一服务器执行所述访问请求之后,所述方法还包括:
所述第一线程将所述第一键值校验值、所述第一键值以及所述第二键值校验值读取到所述客户端的缓存区中;
所述第一线程对所述第一键值校验值增加第一值,更新所述第一键值,以及对所述第二键值校验值增加所述第一值;
所述第一线程将增加所述第一值后的所述第一键值校验值、更新后的所述第一键值、以及增加所述第一值后的所述第二键值校验值写回所述第一服务器中。
12.一种计算机集群,其特征在于,包括客户端和多个服务器,所述多个服务器包括第一服务器;
所述客户端,用于根据所述客户端本地存储的第一锁表判断待访问数据的第一索引信息是否处于加锁状态;以及,若未处于加锁状态,所述客户端向第一服务器发送访问请求以访问所述第一索引信息;
所述第一服务器,用于接收所述访问请求之后,根据所述第一服务器本地存储的第二锁表判断所述第一索引信息是否处于加锁状态;以及,当所述第一服务器根据所述第二锁表判断所述第一索引信息未处于加锁状态时,所述第一服务器执行所述访问请求。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备实现如权利要求1至11中任一项所述方法中所述客户端实现的功能。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备实现如权利要求1至11中任一项所述方法中所述第一服务器实现的功能。
15.一种计算机程序产品,其特征在于,包括指令,当所述指令在电子设备上运行时,使得所述电子设备实现如权利要求1至11中任一项所述方法中所述客户端实现的功能。
16.一种计算机程序产品,其特征在于,包括指令,当所述指令在电子设备上运行时,使得所述电子设备实现如权利要求1至11中任一项所述方法中所述第一服务器实现的功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110766287.9A CN115599532A (zh) | 2021-07-07 | 2021-07-07 | 一种访问索引的方法以及计算机集群 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110766287.9A CN115599532A (zh) | 2021-07-07 | 2021-07-07 | 一种访问索引的方法以及计算机集群 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115599532A true CN115599532A (zh) | 2023-01-13 |
Family
ID=84840640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110766287.9A Pending CN115599532A (zh) | 2021-07-07 | 2021-07-07 | 一种访问索引的方法以及计算机集群 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115599532A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117539408A (zh) * | 2024-01-09 | 2024-02-09 | 华中科技大学 | 一种存算一体索引系统及键值对存储系统 |
-
2021
- 2021-07-07 CN CN202110766287.9A patent/CN115599532A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117539408A (zh) * | 2024-01-09 | 2024-02-09 | 华中科技大学 | 一种存算一体索引系统及键值对存储系统 |
CN117539408B (zh) * | 2024-01-09 | 2024-03-12 | 华中科技大学 | 一种存算一体索引系统及键值对存储系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7318076B2 (en) | Memory-resident database management system and implementation thereof | |
US9251003B1 (en) | Database cache survivability across database failures | |
US10599677B2 (en) | Methods and systems of splitting database indexes and digests | |
CN104346317B (zh) | 共享资源访问方法和装置 | |
US11113316B2 (en) | Localized data affinity system and hybrid method | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
US20100169289A1 (en) | Two Phase Commit With Grid Elements | |
US10733101B2 (en) | Processing node, computer system, and transaction conflict detection method | |
US20130290636A1 (en) | Managing memory | |
US11269772B2 (en) | Persistent memory storage engine device based on log structure and control method thereof | |
CN112015820A (zh) | 分布式图数据库实现的方法、系统、电子装置和存储介质 | |
US20230305724A1 (en) | Data management method and apparatus, computer device, and storage medium | |
CN112867999A (zh) | 基于版本的表锁定 | |
US10082978B2 (en) | Distributed shared log storage system having an adapter for heterogenous big data workloads | |
US20210191777A1 (en) | Memory Allocation in a Hierarchical Memory System | |
CN115599532A (zh) | 一种访问索引的方法以及计算机集群 | |
Luo et al. | {SMART}: A {High-Performance} Adaptive Radix Tree for Disaggregated Memory | |
CN116414735A (zh) | 数据存储方法、系统、存储访问配置方法及相关设备 | |
US20240012800A1 (en) | Data processing method, server, and system | |
WO2016131175A1 (zh) | 多核系统中数据访问者目录的访问方法及设备 | |
US10101999B2 (en) | Memory address collision detection of ordered parallel threads with bloom filters | |
Wang et al. | A server bypass architecture for hopscotch hashing key–value store on DRAM-NVM memories | |
CN111611223A (zh) | 非易失性数据的访问方法、系统、电子设备和介质 | |
Du et al. | Fast one-sided RDMA-based state machine replication for disaggregated memory | |
CN112130747A (zh) | 分布式对象存储系统及数据读写方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |