数据处理方法以及系统与流程

文档序号:26139274发布日期:2021-08-03 14:22阅读:100来源:国知局
数据处理方法以及系统与流程

本说明书实施例涉及计算机技术领域,特别涉及一种资源处理方法。本说明书一个或者多个实施例同时涉及一种资源处理系统,一种计算设备,以及一种计算机可读存储介质。



背景技术:

通过rdma网络访问远程共享内存是云原生分布式架构的一个发展趋势,在云原生架构的数据库中,b+tree作为一种基础的数据组织形式,应用场景非常广泛,比如在数据库中作为默认的索引结构。目前b+tree并发访问技术,在单机环境下已经非常成熟,但是在分布式环境下,因为多机间的并发控制,以及远程的网络访问开销,会给跨机并发访问带来新的挑战,尤其是在多机间的读写操作中,可能会发生数据读写数据不准确,跨节点并发访问不安全的问题,同时,也会浪费计算机资源。



技术实现要素:

有鉴于此,本说明书施例提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理系统,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。

根据本说明书实施例的第一方面,提供了一种数据处理方法,包括:数据写入节点以及数据共享节点,

所述数据写入节点接收初始数据的数据写入请求,基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定所述查询路径中存在加数据锁状态的处理节点的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且为所述查询路径中未加锁的处理节点进行加数据锁;

所述数据共享节点基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

根据本说明书实施例的第二方面,提供了一种数据处理系统,包括:数据写入节点以及数据共享节点,

所述数据写入节点,被配置为接收初始数据的数据写入请求,基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定所述查询路径中存在加数据锁状态的处理节点的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且为所述查询路径中未加锁的处理节点进行加数据锁;

所述数据共享节点,被配置为基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

根据本说明书实施例的第三方面,提供了一种计算设备,包括:

存储器和处理器;

所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,其中,所述处理器执行所述计算机可执行指令时实现所述数据处理方法的步骤。

根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现任意一项所述数据处理方法的步骤。

本说明书一个实施例通过所述数据写入节点接收初始数据的数据写入请求,基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径;在确定所述查询路径中存在加数据锁状态的处理节点的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且为所述查询路径中未加锁的处理节点进行加数据锁;所述数据共享节点基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

基于此,数据写入节点通过判定数据写入节点的初始数据的查询路径中是否存在加数据锁的处理节点,对已加锁的处理节点无需再次加锁,也不需要远程在数据共享节点中再次加数据锁,而是将初始数据共享至数据共享节点之后,为查询路径中未加数据锁的处理节点进行加数据锁,通过上述加锁的优化方式,不仅能够保证分布式数据库数据读写的准确性,或者数据访问的安全性,而对于数据加锁的优化方式,对于已经加锁的处理节点,无需再向数据共享节点再次加数据锁,避免了节点内并发访问时的重复加锁过程,减少计算机资源的浪费。

附图说明

图1是本说明书一个实施例提供的一种数据处理过程的系统结构图;

图2是本说明书一个实施例提供的一种数据处理方法的流程图;

图3是本说明书一个实施例提供的一种数据处理方法的整体架构示意图;

图4是本说明书一个实施例提供的一种数据处理方法的基础加锁流程示意图;

图5是本说明书一个实施例提供的一种数据处理方法的延迟释放数据锁的优化过程示意图;

图6是本说明书一个实施例提供的一种数据处理方法的释放数据锁的流程示意图;

图7是本说明书一个实施例提供的一种数据处理方法的乐观数据查询场景示意图;

图8是本说明书一个实施例提供的一种数据处理方法的乐观与数据加锁重试的数据查询场景示意图;

图9是本说明书一个实施例提供的一种数据处理系统的结构示意图;

图10是本说明书一个实施例提供的一种计算设备的结构框图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

首先,对本说明书一个或多个实施例涉及的名词术语进行解释。

mysql:流行的开源数据库。

sharedmemeory/共享内存:linux内核支持的进程间通信功能,多个同一物理机内的进程可以访问同一片内存空间。

bufferpool:数据库中用于缓存数据库页面的内存缓存池。

latch:数据库中用于控制内部数据结构并发访问的同步机制。

rdma:通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能.它消除了外部存储器复制和文本交换操作,因而能腾出总线空间和cpu周期用于改进应用系统性能。

在本说明书中,提供了一种数据处理方法,本说明书同时涉及一种数据处理系统,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。

参见图1,图1示出了根据本说明书一个实施例提供的一种数据处理过程的系统结构图。

图1中a部分为数据写入节点,b部分为数据共享节点,数据写入节点a与数据共享节点b通过rdma相连接通信,数据写入节点a接收到初始数据的数据写入请求之后,基于数据写入请求中携带的数据属性信息确定初始数据的查询路径,在数据写入节点a可确定在该查询路径中存在加数据锁状态的处理节点的情况下,将初始数据写入查询路径中的未加数据锁的目标处理节点中,同时,数据写入节点a将初始数据基于查询路径共享至数据共享节点,在将初始数据共享存储于数据共享节点b之后,数据写入节点a为该查询路径中未加锁的处理节点进行加数据锁;数据共享节点基于该查询路径存储初始数据,并未该查询路径中未加数据锁的处理节点进行加数据锁。

本说明书实施例提供的数据处理方法,通过在数据写入节点写入数据的过程中,将查询路径中的节点进行数据加锁,并同时也要同步至数据共享节点进行加数据锁,在数据写入节点已经存在数据加锁的处理节点的情况下,无需向数据共享节点再次发送加数据锁的请求,减少对数据共享节点的重复访问,也可保证在多个节点进行读写访问时,可查询到的数据为最新更新的数据,提高数据的准确性。

参见图2,图2示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,具体包括如下步骤。

需要说明的是,本说明书实施例提供的数据处理方法,可应用于分布式数据库集群,为了保证分布式数据库集群中,多节点间数据的写入、读取的准确性,可在分布式数据节点中使用加数据锁或者释放数据锁的方式,控制数据的写入和读取,以实现数据处理的准确性。

下面可参见图3,图3示出了本说明书实施例提供的数据处理方法的整体架构示意图。

图3中包括远程共享内存池(即本说明书的数据共享节点),一个写计算节点(即数据写入节点),两个以上读计算节点(即数据读取节点),其中,远程共享内存池可提供远程内存访问和分布式锁服务,写计算节点可对数据做更新和读取操作,读计算节点只能对数据做读取操作,在分布式数据节点中,可通过b+tree并发访问技术,存储数据的数据索引,将数据存储至相应的存储位置;实际应用中,每个分布式数据库集群中,只有一个写计算节点,可以有多个读计算节点,计算节点于共享内存池之间,以及写计算节点与读计算节点之间,都通过rdma网络互联,且所有的内存都以页为单位进行管理,内存访问也是以页为单位,一个b+tree是有多个页节点,组成的多层树结构。计算节点内部的并发访问,由原生的页面锁(pagelatch)来保证,而计算节点之间的并发访问,通过新增的全局物理锁(globalphysicallatch)来保证。

为了保证数据跨节点并发访问安全,会在每次对节点加数据锁的过程中,都需要去远程加全局锁,可能会增加b+tree查找的延迟。为了减少全局加锁带来的代价,利用rdmacas特性,极大限度优化远程加锁性能,每个加锁操作都先尝试用rdmaoneside乐观加锁,如果失败再回退到相对较慢的rpc加锁逻辑。

下面基于上述的系统结构,对数据加锁过程的描述,可参见图4,图4示出了本说明书实施例提供的数据处理方法的基础加锁流程示意图。

图4中具有远程共享内存池、写计算节点、读计算节点,计算节点与远程共享内存池通过rdma通信连接,实际应用中,在没有远程共享内存池的架构中,在写计算节点中,从上到下查找数据写入的位置,可在写计算节点中确定相应的查询路径之后,首先对写计算节点中的根节点1进行加局部锁,并同步在远程共享内存池中,然后,再对中间节点2进行加局部锁,并释放根节点的局部锁,同步在远程共享内存池中,最后,对目标叶子节点3进行加局部锁,同步在远程共享内存池中,同时释放中间节点局部锁。

那么,在本说明书实施例提供的数据处理方法,在共享内存架构中,可通过请求远程共享内存池的处理节点加全局锁的方式,实现在分布式的共享内存架构中,跨节点并发访问的安全性。实际应用中,在写计算节点从上到下查找数据写入的位置,可在写计算节点中确定相应的查询路径之后,首先在写计算节点中对根节点加局部锁,并请求远程共享内存池对同步的根节点加全局锁;然后对写计算节点中的中间节点加局部锁,释放根节点的局部锁,请求远程共享内存池对同步的中间节点加全局锁,并释放远程共享内存池中的根节点的全局锁;最后对写计算节点中的目标叶子节点加全局锁,释放写计算节点的中间节点的局部锁,并请求远程共享内存池对同步的目标叶子节点进行加全局锁,同时释放远程共享内存池中的中间节点的全局锁。

上述为对加数据锁本身对操作优化,此外,本说明书实施例在对计算节点侧,对全局锁做了延迟释放和聚合,计算节点的全局锁,并不会马上释放,而是异步后台释放,或者在其他计算节点需要时才能释放,通过这样的优化过程,本说明书实施例提供的数据处理方法可减少了全局锁的远程请求频率。具体可参见下述实施例的描述:

步骤202:所述数据写入节点接收初始数据的数据写入请求,基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径。

其中,初始数据可以理解为用户写入分布式数据库中的写计算节点的数据,且数据写入请求中携带的数据属性信息可以理解为该初始数据的数据类型、数据状态等属性信息。

实际应用中,数据写入节点在接收到初始数据的数据写入请求之后,可基于该数据写入请求中携带的数据属性信息确定初始数据的查询路径,需要说明的是,该查询路径可以理解为在数据写入节点查询初始数据应写入的具体位置的查找路径,在写计算节点中,根据b+tree的结构,确定带有多个数据处理节点的查询路径。

步骤204:在确定所述查询路径中存在加数据锁状态的处理节点的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且为所述查询路径中未加锁的处理节点进行加数据锁。

其中,数据锁可以理解为在数据写入节点的处理节点中加的局部锁,目标处理节点可以理解为初始数据所应存储的具体位置的处理节点。

实际应用中,数据写入节点在确定查询路径中存在加数据锁状态的处理节点的情况下,继续向下查找未加数据锁的处理节点,并在该初始数据写入至数据写入节点确定的查询路径中未加数据锁的目标处理节点中,在初始数据写入目标处理节点之后,可将该初始数据共享至数据共享节点中,在此之后,对写入初始数据的目标处理节点进行加数据锁处理,在后续对该初始数据进行更新操作后,保证其他节点再次进行数据写入时的准确性。

步骤206:所述数据共享节点基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

实际应用中,在数据共享节点共享存储到数据写入节点存储到初始数据的情况下,数据共享节点可基于该查询路径存储初始数据,并对该查询路径中未加数据锁的处理节点进行加数据锁。

进一步地,本说明书实施例提供的数据处理方法,不仅包括数据写入节点以及数据共享节点,还包括数据读取节点,

所述数据读取节点接收所述初始数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定所述查询路径中存在加数据锁状态的处理节点的情况下,向所述数据共享节点发送数据获取请求,其中,所述数据获取请求中携带有目标处理节点标识;

所述数据共享节点基于所述目标处理节点标识向所述数据写入节点中的目标处理节点发送数据锁释放指令;

所述数据写入节点基于所述数据锁释放指令释放所述目标处理节点的数据锁,并将所述目标处理节点的数据锁释放结果返回至所述数据共享节点;

所述数据共享节点基于所述数据锁释放结果释放所述目标处理节点的数据锁,并将所述数据写入节点发送的数据锁释放结果同步至所述数据读取节点;

所述数据读取节点基于所述数据共享节点发送的数据锁释放结果读取所述初始数据。

实际应用中,在用户向数据读取节点发送数据读取请求的过程中,数据读取节点基于数据读取请求中携带的数据属性信息确定初始数据的查询路径,并在数据读取节点中根据查询路径查询相应的初始数据,但在上述数据共享节点中已经对处理节点加了全局锁,那么,在数据读取节点中,由于全局锁并未释放,因此不能读取相应的初始数据;基于此,数据读取节点向数据共享节点发送数据获取请求,其中,数据获取请求中携带有目标处理节点标识,数据共享节点根据确定的目标处理节点标识向数据写入节点中的目标处理节点发送数据锁释放指令,在数据写入节点根据该数据锁释放指令释放目标处理节点的数据锁的情况下,数据共享节点即可将该释放数据锁的结果同步至数据读取节点中,进而数据读取节点才能够读取初始数据。

本说明书实施例提供的数据处理方法,通过对数据写入节点释放全局锁,使得数据读取节点可以读取到相应的初始数据,不仅能够保证读取到的初始数据的准确性,而且在此过程中,并未主动释放全局锁,是在接收到了数据读取请求之后而释放全局锁,以减少不必要的计算资源的浪费。

参见图5,图5示出了本说明书实施例提供的数据处理方法的延迟释放数据锁的优化过程示意图。

需要说明的是,本实施例提供的数据处理方法的延迟释放数据锁的方式,可在上述实施例的基础加锁流程的基础上,对数据锁延迟释放的过程,通过对数据锁的优化,在计算节点上的b+tree并发访问,就可能不需要向远程共享内存池加全局锁,避免了节点内并发访问时的重复加数据锁。

图5中具有远程共享内存池、写计算节点、读计算节点,计算节点与远程共享内存池通过rdma通信连接,实际应用中,在写计算节点进行查找的过程中,首先,对写计算节点的根节点进行加数据锁处理,因为在基础加锁流程中,远程共享内存池已经持有根节点的全局锁,不需要重新加全局锁;然后,再对中间节点进行加数据锁,并释放根节点的局部锁,因为在基础加锁流程中,远程共享内存池已经持有中间节点的全局锁,不需要重新加全局锁;最后,再对目标叶子节点3进行加局部锁,释放中间节点的局部锁,在远程共享内存池中对目标叶子节点3.1加全局锁。

基于此,通过在计算节点中延迟释放全局锁,可避免了节点内并发访问时的重复加数据锁的操作。

为了对数据锁延迟释放的过程进行详细描述,参见图6,图6示出了本说明书实施例提供的数据处理方法的释放数据锁的流程示意图。

图6中具有远程共享内存池、写计算节点、读计算节点,计算节点与远程共享内存池通过rdma通信连接,实际应用中,因为全局锁延迟释放,在该处理节点查询结束之后并没有立即释放局部锁,真正的释放时机时其他节点请求数据锁的时候,在图6中,读计算节点在访问根节点的过程中,会向远程共享内存节点发起数据锁请求,远程共享内存节点控制写计算节点释放掉数据锁,并将该数据锁授权给读计算节点,则读计算节点可再次进行数据读取,具体参见如下步骤。

步骤602:读计算节点向远程共享内存节点发起全局锁请求。

步骤604:远程共享内存节点基于接收的全局锁请求中携带的处理节点标识,可确定该全局锁被写计算节点持有,则向写计算节点发起数据锁释放请求。

步骤606:写计算节点将数据锁释放之后,将该数据锁释放结果发送至远程共享内存节点。

步骤608:远程共享内存节点接收到数据锁释放结果之后,将该数据锁授权给读计算节点,便于数据读取节点可读取数据。

上述实施例为本说明书提供的数据处理方法的数据加锁的优化过程,进一步地,在数据写入节点基于该数据写入请求中携带的数据属性信息确定初始数据的查询路径之后,在判定该查询路径之后的处理节点均处于未加数据锁状态的情况下,可对未加数据锁的处理节点进行加数据锁处理,具体的,所述基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径之后,还包括:

所述数据写入节点在确定所述查询路径中的处理节点均处于未加数据锁状态的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且对所述查询路径中所有未加数据锁的处理节点进行加数据锁;

所述数据共享节点基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

实际应用中,在共享内存池的系统架构中,数据写入节点在确定查询路径中的处理节点均处于未加数据锁状态的情况下,将初始数据写入该查询路径中未加数据锁的目标处理节点中,在初始数据写入数据写入节点的过程中,要将初始数据共享至数据共享节点,再对查询路径中所有未加数据锁的处理节点进行加数据锁;在数据写入节点加上数据锁之后,可以防止其他用户同步进行数据写入的操作,出现的数据异常的现象,在数据共享节点基于查询路径存储初始数据时,也对数据共享节点中的未加锁的处理节点,进行加数据锁。

本说明书实施例提供的数据处理方法,通过对数据写入节点的处理节点进行加数据锁的方式,保证每次写入的数据不被篡改性,保持写入数据的准确性。

进一步地,在将初始数据存储至目标处理节点之后,还可通过释放数据锁的方式,保证再次查询数据时,可以随时对除了目标处理节点的其他处理节点进行写入处理;具体的,还包括:

所述数据写入节点将所述查询路径中的除所述目标处理节点的其他处理节点的数据锁进行释放。

实际应用中,在数据写入节点将初始数据存储至相应的目标处理节点中之后,还可将该查询路径中的除目标处理节点之外的其他处理节点的数据锁进行释放。

本说明书实施例提供的数据处理方法,通过对查询路径中除了目标处理节点的其他处理节点的数据锁进行释放,以保证后续再次进行数据写入时,可快速地在处理节点中查询,且能够进行数据写入操作。

此外,本说明书实施例提供的数据处理方法,还包括:数据读取节点,

相应地,所述数据共享节点基于所述查询路径存储所述初始数据,并基于所述查询路径为未加锁的处理节点进行加数据锁,包括:

所述数据读取节点接收针对所述初始数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定从所述查询路径的目标处理节点读取所述初始数据失败的情况下,向所述数据共享节点发送数据锁释放请求;

所述数据共享节点基于所述数据锁释放请求中携带的目标处理节点标识,向所述数据写入节点发送数据锁释放指令,并将所述数据写入节点发送的数据锁释放结果发送至所述数据读取节点;

所述数据读取节点基于所述数据锁释放结果读取所述目标处理节点的初始数据。

实际应用中,该数据读取节点的数据读取过程,在无法读取到相应目标处理节点的数据时,可向数据共享节点发送数据锁释放请求,具体的数据锁释放过程可参见上述实施例,本实施例对此不做过多赘述。

基于此,本说明书实施例提供的数据处理方法,基于基础的数据加锁流程,对数据锁进行优化,通过聚合和延迟释放数据锁的方式,减少了远程加数据锁的请求次数,不仅能够保证数据写入或者读取的准确性,也能够降低计算机的处理资源的浪费。

此外,本说明书另一实施例提供的数据处理方法,对数据库的访问,通常是读多写少,而对于分布式数据库架构,写计算节点只有一个,读计算节点可以有多个,因此,本说明书实施例提供的数据处理方法对数据读取路径也做了优化,b+tree的并发访问安全,本质是避免并发访问到smo(structuremodificationoperation)中间过程状态,smo中间状态会导致数据访问出错。传统是通过lockcouping技术,按照一定的加锁策略,来避访问到b+treesmo中间状态。而全局锁可以看作是单机锁的跨机延伸,全局锁按照单机锁的加锁顺序,就可以避免跨机下读节点看到写节点smo中间状态,这是一种悲观的跨机并发控制。这里提出一种乐观的并发控制,读节点不需要每次访问页面,都加全局锁,只在发现有smo发生时,才加全局锁。

具体的,本说明书提供的数据处理方法,还包括:

所述数据读取节点接收针对目标数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述目标数据的查询路径;

在确定所述查询路径中处理节点对应的初始版本号小于所述目标数据对应的查询版本号的情况下,从所述查询路径中的目标处理节点获取所述目标数据,并对所述查询路径中的未加锁的处理节点进行加数据锁。

其中,初始版本号可以理解为b+tree的版本号,在每次smo发生时,都会递增该版本号(记做smo_rw);查询版本号可以理解为在每个内存页中,也会有一个版本(记做smo_page)。

实际应用中,为了能够发现rw上的smo事务,b+tree会有一个版本号,每次smo发生时,都会递增这个版本号(记做smo_rw)。每个page上,也会有一个版本号(记做smo_page),smo发生时,smo涉及的page,会将自己的版本号,更新为smo_rw。rw节点的查询,也有一个版本号,记做smo_query,在查询开始时,会将最新的smo_rw作为自己的smo_query。在数据读取节点确定查询路径中处理节点对应的初始版本号小于目标数据对应的查询版本号的情况下,从该查询路径中的目标处理节点获取目标数据,并对该查询路径中的未加锁的处理节点进行加数据锁。

参见图7,图7示出了本说明书实施例提供的数据处理方法乐观数据查询场景示意图。

需要说明的是,若读计算节点在查询b+tree过程中,涉及的所有内存页,smo_page都不大于smo_query,那么就不需要加全局锁。

实际应用中,读计算节点发起要查询b+tree,读计算节点的smo_rw作为本次查询的smo_query,读计算节点对根节点加本地锁,比较内存页上的版本smo_page,发现小于smo_query,不需要请求远程的全局锁,对中间节点加本地锁,比较内存页上的版本smo_page,发现小于smo_query,不需要请求远程的全局锁,对叶子节点加本地锁,比较内存页上的版本smo_page,发现小于smo_query,不需要请求远程的全局锁。

本说明书实施例提供的数据处理方法,在内存页上的版本号均小于查询版本号的情况下,不需要远程加局部锁,即在该种情况下,数据读取节点并不会读取到数据访问的中间过程,保证了分布式并发数据访问时的数据准确性。

具体的,本说明书提供的另一种数据处理方法,还包括:

所述数据读取节点接收针对目标数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述目标数据的查询路径;

在确定所述查询路径中处理节点对应的初始版本号大于等于所述目标数据对应的查询版本号的情况下,从目标处理节点中读取目标数据,并向所述数据共享节点发送基于所述查询路径的数据加数据锁请求。

实际应用中,在查询路径中处理节点对应的初始版本号大于等于目标数据对应的查询版本号的情况下,可从目标处理节点中读取目标数据,并像数据共享节点发送基于查询路径的数据加数据锁请求,进而实现对上述实施例中的基础加锁流程的步骤,具体实施步骤本实施例对此不做过多限定。

进一步地,所述向所述数据共享节点发送基于所述查询路径的数据加锁请求之后,还包括:

所述数据共享节点基于所述数据加锁请求对所述目标数据的查询路径中的处理节点进行加数据锁。

需要说明的是,数据共享节点基于该数据加数据锁请求对目标数据的查询路径中的处理节点进行加数据锁,具体的加数据锁的过程可参考上述实施例的加锁流程,在此不做过多限定。

参见图8,图8示出了本说明书实施例提供的数据处理方法的乐观与数据加锁重试的数据查询场景示意图。

需要说明的是,若读计算节点在查询b+tree过程中,某个内存页,smo_page大于smo_query,那么就需要执行数据加全局锁的流程。

实际应用中,读计算节点发起要查询b+tree,读取计算节点的smo_rw作为本次查询的smo_query,对根节点加本地锁,比较内存页上的版本smo_page,发现小于smo_query,不需要请求远程的全局锁,对中间节点加本地锁,比较内存页上的版本smo_page,发现大于smo_query,说明查询b+tree的过程中,写计算节点发生了smo,并且smo和访问内存页相关,则从根节点开始重试,继续进行全局加锁流程,具体流程可参考上述实施例对全局锁进行加数锁的过程。

基于此,本说明书实施例提供的数据处理方法,包括数据写入节点、数据读取节点以及数据共享节点,

所述数据写入节点、数据读取节点以及数据共享节点之间通过预设数据传输通道进行通信。

实际应用中,预设数据传输通道可以为rdma通道,但本说明书实施例对数据传输通道不做具体的限制。

综上,本说明书实施例提供的数据处理方法,可适用于分布式共享内存b+tree并发访问的场景,通过共享内存池的全局锁的实现,可以使得在并发访问时,保证数据写入或者读取的准确性,在此基础上,又对全局锁进行延迟释放进行优化,以减少计算机资源的浪费,在一写多读的场景下,优化全局锁的特点,保证并发访问的安全性,并且性能不会因为远程通信延迟而造成严重退化。

与上述方法实施例相对应,本说明书还提供了数据处理系统实施例,图9示出了本说明书一个实施例提供的一种数据处理系统的结构示意图。如图9所示,该系统包括:数据写入节点902以及数据共享节点904,

所述数据写入节点902接收初始数据的数据写入请求,基于所述数据写入请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定所述查询路径中存在加数据锁状态的处理节点的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且为所述查询路径中未加锁的处理节点进行加数据锁;

所述数据共享节点904基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

可选地,所述数据写入节点902,进一步被配置为:

在确定所述查询路径中的处理节点均处于未加数据锁状态的情况下,将所述初始数据写入所述查询路径中未加数据锁的目标处理节点中,并将所述初始数据基于所述查询路径共享至所述数据共享节点,且对所述查询路径中所有未加数据锁的处理节点进行加数据锁;

可选地,所述数据共享节点904,进一步被配置为:

基于所述查询路径存储所述初始数据,并基于所述查询路径为未加数据锁的处理节点进行加数据锁。

可选地,所述数据写入节点902,进一步被配置为:

所述数据写入节点将所述查询路径中的除所述目标处理节点的其他处理节点的数据锁进行释放。

可选地,所述系统,还包括:

所述数据读取节点,被配置为接收所述初始数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定所述查询路径中存在加数据锁状态的处理节点的情况下,向所述数据共享节点发送数据获取请求,其中,所述数据获取请求中携带有目标处理节点标识;

所述数据共享节点904,进一步配置为:

基于所述目标处理节点标识向所述数据写入节点中的目标处理节点发送数据锁释放指令;

所述数据写入节点902,进一步被配置为:

基于所述数据锁释放指令释放所述目标处理节点的数据锁,并将所述目标处理节点的数据锁释放结果返回至所述数据共享节点;

所述数据共享节点904,进一步配置为:

基于所述数据锁释放结果释放所述目标处理节点的数据锁,并将所述数据写入节点发送的数据锁释放结果同步至所述数据读取节点;

所述数据读取节点基于所述数据共享节点发送的数据锁释放结果读取所述初始数据。

可选地,所述数据读取节点,进一步配置为接收针对目标数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述目标数据的查询路径;

在确定所述查询路径中处理节点对应的初始版本号小于所述目标数据对应的查询版本号的情况下,从所述查询路径中的目标处理节点获取所述目标数据,并对所述查询路径中的未加锁的处理节点进行加数据锁。

可选地,所述数据读取节点,进一步被配置为接收针对目标数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述目标数据的查询路径;

在确定所述查询路径中处理节点对应的初始版本号大于等于所述目标数据对应的查询版本号的情况下,从目标处理节点中读取目标数据,并向所述数据共享节点发送基于所述查询路径的数据加数据锁请求。

可选地,所述数据共享节点904,进一步配置为基于所述数据加锁请求对所述目标数据的查询路径中的处理节点进行加数据锁。

可选地,所述数据写入节点902、数据读取节点以及数据共享节点904之间通过预设数据传输通道进行通信。

可选地,所述数据共享节点904,进一步被配置为基于所述查询路径存储所述初始数据,并基于所述查询路径为未加锁的处理节点进行加数据锁,包括:

所述数据读取节点,进一步配置为接收针对所述初始数据的数据读取请求,基于所述数据读取请求中携带的数据属性信息确定所述初始数据的查询路径;

在确定从所述查询路径的目标处理节点读取所述初始数据失败的情况下,向所述数据共享节点发送数据锁释放请求;

所述数据共享节点,进一步被配置为基于所述数据锁释放请求中携带的目标处理节点标识,向所述数据写入节点发送数据锁释放指令,并将所述数据写入节点发送的数据锁释放结果发送至所述数据读取节点;

所述数据读取节点,进一步被配置为基于所述数据锁释放结果读取所述目标处理节点的初始数据。

本说明书实施例提供的数据处理系统,数据写入节点通过判定数据写入节点的初始数据的查询路径中是否存在加数据锁的处理节点,对已加锁的处理节点无需再次加锁,也不需要远程在数据共享节点中再次加数据锁,而是将初始数据共享至数据共享节点之后,为查询路径中未加数据锁的处理节点进行加数据锁,通过上述加锁的优化方式,不仅能够保证分布式数据库数据读写的准确性,或者数据访问的安全性,而对于数据加锁的优化方式,对于已经加锁的处理节点,无需再向数据共享节点再次加数据锁,避免了节点内并发访问时的重复加锁过程,减少计算机资源的浪费。

上述为本实施例的一种数据处理系统的示意性方案。需要说明的是,该数据处理系统的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理系统的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

图10示出了根据本说明书一个实施例提供的一种计算设备1000的结构框图。该计算设备1000的部件包括但不限于存储器1010和处理器1020。处理器1020与存储器1010通过总线1030相连接,数据库1050用于保存数据。

计算设备1000还包括接入设备1040,接入设备1040使得计算设备1000能够经由一个或多个网络1060通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备1040可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。

在本说明书的一个实施例中,计算设备1000的上述部件以及图10中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图10所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。

计算设备1000可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备1000还可以是移动式或静止式的服务器。

其中,处理器1020用于执行如下计算机可执行指令,所述处理器用于执行所述计算机可执行指令,其中,所述处理器执行所述计算机可执行指令时实现所述数据处理方法的步骤。

上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现所述数据处理方法的步骤。

上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或系统、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1