掌桥专利:专业的专利平台
掌桥专利
首页

对象处理方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 11:29:13


对象处理方法、装置、计算机设备和存储介质

技术领域

本申请涉及网络技术领域,特别是涉及一种对象处理方法、装置、计算机设备和存储介质。

背景技术

在网络技术领域,往往需要与数据库等中记录的对象进行交互。例如:在某些时候,需要对数据库中的对象进行变更操作。

传统技术中,是通过强同步的方式实现与对象的交互,即,允许特定的计算节点来集中执行交互语句。这就会导致其他计算节点需要等待集中控制的计算节点的执行结果才能进行后续的处理。导致对象交互处理的效率低下。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

基于此,有必要针对上述技术问题,提供一种对象处理方法、装置、计算机设备和存储介质。

一种对象处理方法,所述方法包括:接收针对目标对象的对象交互请求;响应于所述对象交互请求,获取针对所述目标对象的当前变更操作所在的当前变更阶段;所述当前变更操作包括多个操作步骤,所述当前变更操作根据各个所述操作步骤所对应的冲突操作类型划分为多个变更阶段,所述冲突操作类型为所述操作步骤所对应的冲突操作的类型;根据所述对象交互请求所对应的目标操作类型以及所述当前变更阶段对应的当前相关操作类型,确定所述对象交互请求对应的冲突校验结果,所述当前相关操作类型包括当前冲突操作类型或者当前并行操作类型;当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作。

在一个实施例中,所述当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作,包括:当所述冲突校验结果为不存在冲突时,响应于所述对象交互请求,确定所述目标操作类型所对应的目标操作步骤序列;按照所述目标操作步骤序列对所述目标对象执行对应的交互操作。

一种对象处理装置,所述装置包括:交互请求接收模块,用于接收针对目标对象的对象交互请求;变更阶段获取模块,用于响应于所述对象交互请求,获取针对所述目标对象的当前变更操作所在的当前变更阶段;所述当前变更操作包括多个操作步骤,所述当前变更操作根据各个所述操作步骤所对应的冲突操作类型划分为多个变更阶段,所述冲突操作类型为所述操作步骤所对应的冲突操作的类型;冲突校验模块,用于根据所述对象交互请求所对应的目标操作类型以及所述当前变更阶段对应的当前相关操作类型,确定所述对象交互请求对应的冲突校验结果,所述当前相关操作类型包括当前冲突操作类型或者当前并行操作类型;操作执行模块,用于当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作。

在一个实施例中,变更阶段获取模块,还包括:操作步骤获取子模块,用于获取针对所述目标对象的所述当前变更操作所对应的当前操作步骤;变更阶段确定子模块,用于确定所述当前操作步骤所对应的变更阶段,作为针对所述目标对象的所述当前变更操作所在的所述当前变更阶段,其中,不同的所述冲突操作类型的连续操作步骤划分在不同的所述变更阶段中。

在一个实施例中,对象处理装置,还包括:步骤序列确定模块,用于确定所述当前变更操作所对应的当前操作步骤序列,所述当前操作步骤序列包括多个按照操作顺序进行排列的所述操作步骤;冲突类型确定模块,用于确定所述当前操作步骤序列中各个所述操作步骤所对应的所述冲突操作类型;步骤序列划分模块,用于根据所述操作步骤所对应的所述冲突操作类型对所述当前操作步骤序列进行划分,得到所述当前变更操作所对应的多个所述变更阶段,其中,相同冲突操作类型的连续操作步骤划分在相同的所述变更阶段中。

在一个实施例中,冲突校验模块,包括:第一操作类型确定子模块,用于从所述对象交互请求中提取操作类型标识,根据所提取的所述操作类型标识得到所述对象交互请求对应的目标操作类型;第一冲突校验子模块,用于将所述目标操作类型与所述当前冲突操作类型进行对比,当根据对比结果确定所述当前冲突操作类型包括所述目标操作类型时,确定所述冲突校验结果为存在冲突。

在一个实施例中,冲突校验模块,包括:第二操作类型确定子模块,用于从所述对象交互请求中提取操作类型标识,根据所提取的所述操作类型标识得到所述对象交互请求对应的目标操作类型;第二冲突校验子模块,用于将所述目标操作类型与所述当前并行操作类型进行对比,当根据对比结果确定所述当前并行操作类型不包括所述目标操作类型时,确定所述冲突校验结果为存在冲突。

在一个实施例中,对象处理装置,还包括:操作停止模块,用于当所述冲突校验结果为存在冲突时,停止根据所述对象交互请求对所述目标对象执行对应的交互操作。

在一个实施例中,操作执行模块,包括:步骤序列确定子模块,用于当所述冲突校验结果为不存在冲突时,响应于所述对象交互请求,确定所述目标操作类型所对应的目标操作步骤序列;交互操作执行子模块,用于按照所述目标操作步骤序列对所述目标对象执行对应的交互操作。

在一个实施例中,交互操作执行子模块,包括:第一操作阶段确定单元,用于确定所述目标对象对应的第一操作阶段,所述第一操作阶段为所述对象交互请求对应的下一操作阶段;锁定请求发送单元,用于当所述第一操作阶段所对应的阶段优先级满足优先执行条件时,发送针对所述目标对象的操作锁定请求;操作步骤执行单元,用于当确定接收到针对所述操作锁定请求的锁定响应信息时,执行所述第一操作阶段所对应的所述操作步骤。

在一个实施例中,对象处理装置,还包括:操作阶段确定模块,用于确定所述目标对象对应的第二操作阶段,所述第二操作阶段为所述第一操作阶段对应的下一操作阶段;对象锁维持模块,用于当所述第二操作阶段所对应的阶段优先级满足所述优先执行条件时,维持所述操作锁定请求所请求的对象锁,执行所述第二操作阶段所对应的所述操作步骤。

在一个实施例中,锁定请求发送子模块,包括:内容级别确定单元,用于确定所述第一操作阶段所对应的操作内容的操作内容级别;锁定请求发送单元,用于当所述操作内容级别为对象级别时,确定所述第一操作阶段所对应的阶段优先级满足优先执行条件,发送针对所述目标对象的操作锁定请求。

在一个实施例中,对象处理装置,还包括:目标版本标识确定模块,用于确定所述对象交互请求所对应的目标对象版本标识;当前版本标识确定模块,用于获取根据所述当前变更操作对所述目标对象进行变更后,所述目标对象所对应的当前对象版本标识;版本标识对比模块,用于将所述目标对象版本标识与所述当前对象版本标识进行对比,当对比不一致时,停止响应所述对象交互请求。

在一个实施例中,冲突校验模块,包括:操作类型确定子模块,用于当所述当前变更阶段为阻塞操作信息写入阶段时,确定所述当前变更阶段所对应的当前并行操作类型为删除操作类型;所述阻塞操作信息写入阶段用于写入根据所述当前变更操作对所述目标对象进行变更后,所述目标对象所对应的当前对象版本标识;第三冲突校验子模块,用于当所述目标操作类型与所述删除操作类型不匹配时,确定所述对象交互请求对应的冲突校验结果为存在冲突。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收针对目标对象的对象交互请求;响应于所述对象交互请求,获取针对所述目标对象的当前变更操作所在的当前变更阶段;所述当前变更操作包括多个操作步骤,所述当前变更操作根据各个所述操作步骤所对应的冲突操作类型划分为多个变更阶段,所述冲突操作类型为所述操作步骤所对应的冲突操作的类型;根据所述对象交互请求所对应的目标操作类型以及所述当前变更阶段对应的当前相关操作类型,确定所述对象交互请求对应的冲突校验结果,所述当前相关操作类型包括当前冲突操作类型或者当前并行操作类型;当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收针对目标对象的对象交互请求;响应于所述对象交互请求,获取针对所述目标对象的当前变更操作所在的当前变更阶段;所述当前变更操作包括多个操作步骤,所述当前变更操作根据各个所述操作步骤所对应的冲突操作类型划分为多个变更阶段,所述冲突操作类型为所述操作步骤所对应的冲突操作的类型;根据所述对象交互请求所对应的目标操作类型以及所述当前变更阶段对应的当前相关操作类型,确定所述对象交互请求对应的冲突校验结果,所述当前相关操作类型包括当前冲突操作类型或者当前并行操作类型;当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作。

上述对象处理方法、装置、计算机设备和存储介质,当前变更操作根据各个操作步骤所对应的冲突操作类型划分为多个变更阶段,变更操作被划分为多个变更阶段,使得各个变更阶段都可以进行冲突校验;在接收到对象交互请求时,获取针对目标对象的当前变更操作所在的当前变更阶段,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果;当冲突校验结果为不存在冲突时,根据对象交互请求执行对应的交互操作。通过将变更操作细分为变更阶段,能够在各个变更阶段下进行冲突校验,并据此运行不存在冲突的操作阶段,能在很大程度上降低变更操作对其他交互操作的影响,有效提高对象交互处理的效率。

附图说明

图1为一个实施例中对象处理方法的应用环境图;

图2为另一个实施例中对象处理方法的应用环境图;

图3为一个实施例中对象处理方法的流程示意图;

图4为一个实施例中状态转换矩阵的示意图;

图5为一个实施例中变更操作的流程示意图;

图6为另一个实施例中对象处理方法的流程示意图;

图7为一个实施例中准备操作的流程示意图;

图8为一个实施例中收尾操作的流程示意图;

图9为一个实施例中执行数据定义语言语句的流程示意图;

图10为一个实施例中对象处理装置的结构框图;

图11为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的对象处理方法,可以应用于如图1所示的应用环境中。该应用环境中包含服务器102、第一终端104、第二终端106以及数据库108。其中,第一终端104和第二终端106分别与服务器102通过网络进行通信,数据库108为用于存储各个终端数据的数据库,能够与服务器以及各个终端进行网络通信。在应用过程中,第一终端104向数据库108中的目标对象执行当前变更操作,当前变更操作对应有多个变更阶段,第一终端104在执行各个变更阶段时将每个变更阶段的执行状态发送至服务器。当接收到第二终端106发送的针对目标对象的对象交互请求时,服务器102通过第一终端104发送的各个变更阶段的执行状态获取第一终端104的当前变更操作所对应的当前变更阶段,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果,当冲突校验结果为存在冲突时,停止根据对象交互请求执行对应的交互操作,当冲突校验结果为不存在冲突时,根据对象交互请求对目标对象执行对应的交互操作,并将冲突校验结果发送给第二终端106。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,即内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端(包括第一终端和第二终端)可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。在其他应用场景中,第一终端104和第二终端106也可以通过一个终端设备实现,另外,终端也可以替换为服务器。在一些实施例中,对目标对象进行交互的终端,可以通过计算引擎节点(SQL Engine,也可以称为计算节点或者节点)实现,主要完成SQL(Structured Query Language,结构化查询语言)层计算功能。需要说明的是,本申请实施例中的多个可以为至少两个。

本申请提供的对象处理方法,还可以应用于如图2所示的应用环境中。该应用环境中包含终端202、计算节点集群204、以及数据库206。计算节点集群204可以包括至少一个计算机设备,计算机设备可以称为计算节点,这些计算节点可以通过服务器或中断实现。另外,计算节点集群204中的各个计算节点均可以对同一对象具有交互权限。图2中示出了第一计算节点2042和第二计算节点2044这两个计算节点。在实际的应用场景中,可以包括数量更少或者更多的计算节点。其中,第一计算节点2042和第二计算节点2044分别与数据库206通过网络进行通信,数据库206为用于存储各个计算节点数据的数据库。在应用过程中,第一计算节点2042向数据库206中的目标对象执行当前变更操作,当前变更操作对应有多个变更阶段,第一计算节点2042在执行各个变更阶段时将每个变更阶段的执行状态保存至数据库206中。当第二计算节点2044接收到终端202发送的针对目标对象的对象交互请求时,从数据库中获取第一计算节点2042的当前变更操作下的各个变更阶段的执行状态,基于执行状态确定获取第一计算节点2042的当前变更操作所对应的当前变更阶段,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果,当冲突校验结果为存在冲突时,停止根据对象交互请求执行对应的交互操作,当冲突校验结果为不存在冲突时,根据对象交互请求对目标对象执行对应的交互操作。

本申请提供的各个实施例可以基于云技术(Cloud technology)实现。其中,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。

后台服务所需的存储资源可以通过数据库实现。其中,数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。数据库管理系统(英语:DatabaseManagement System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML(Extensible Markup Language,即可扩展标记语言);或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如:SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。

如本申请所提供的对象处理方法、装置、计算机设备和存储介质,在各实施例运行过程中生成的数据可以保存于区块链上。例如:目标对象的当前变更操作所在的当前变更阶段记录在区块链中;在接收到对象交互请求时,终端或服务器从区块链中获取当前变更阶段,确定当前变更阶段对应的当前相关操作类型,根据目标操作类型和当前相关操作类型确定对象交互请求对应的冲突校验结果;当确定存在冲突时,停止根据对象交互请求执行对应的交互操作;当确定不存在冲突时继续根据对象交互请求执行对应的交互操作,并将交互操作过程中各个阶段的状态信息记录到区块链中,另外,还可以把冲突校验结果记录到区块链中。终端或服务器可以从区块链中获取交互操作过程中各个阶段的状态信息。同时,在运行过程中生成的目标操作类型、当前相关操作类型和冲突校验结果等均可以记录在区块链中。通过将数据记录在区块链中,可以防止这些数据被篡改,保证这些数据的存储可靠性,进而保证对象处理过程的可靠性。

在一个实施例中,如图3所示,提供了一种对象处理方法,本实施例以该方法应用于服务器进行举例说明,可以理解的是,该方法也可以应用于终端,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:

S302,接收针对目标对象的对象交互请求。

其中,对象为网络交互所针对的主体,可以是网络设备、网络设备中的数据、数据库中的数据等中的至少一项。在某些实施例中,目标对象可以是数据库中存储的数据或者元数据等中的至少一项。目标对象具体可以是数据库中的Schema(元数据的一个抽象集合),例如:数据库中的以下至少一项:表、列、索引、约束、存储过程或者函数等等。进一步地,目标对象的数量可以为至少一个。当目标对象为至少两个时,可以分别为各个目标对象进行冲突校验,进而针对性地停止或者继续根据对象交互请求对各个目标对象执行对应的交互操作。

交互可以是对目标对象进行变更或者查询等操作中的至少一种。其中,变更可以是:新建、修改、删除、插入或者更新等中的至少一种。具体地,向表中插入一列可以认为是一次变更操作,插入两列可以认为是两次变更操作。

在一个实施例中,对象交互请求为对目标对象进行特定交互的请求。进一步地,各个对象交互请求可以对应至少一个对象交互操作,在确定对象交互请求后可以确定对应的对象交互操作,得到目标交互操作。一个对象交互请求中可以对应至少一个目标交互操作,例如,对于以下的对象交互请求:alter table t add a int, add b int,对应的目标交互操作为向表t中增加a和b两列,每个增加一列的操作可以认为是一个目标交互操作。当交互为变更操作时,如果接收到对象交互请求,服务器可以确定与对象交互请求对应的目标变更操作。

以目标对象为数据库中的Schema为例,对象交互操作可以为DML(DataManipulation Language,数据操纵语言)、DDL(Data Definition Language,数据定义语言)或者DCL(Data Control Language,数据控制语言)等中的至少一项。其中,DML:可以是select、update、insert以及delete等命令,这4条命令是用来对数据库里的数据进行操作的语言;DDL:DDL的命令类型比DML要多,主要的命令有create、alter或者drop等,DDL主要是用在定义或改变表(table)的结构、数据类型、表之间的链接和约束等初始化工作上,大多在建立表时使用;DCL:是数据库控制功能,是用来设置或更改数据库用户或角色权限的语句,包括grant、deny或者revoke等语句。进一步地,DML、DDL或者DCL等语言是对数据库中的对象进行变更的操作,因此,可以称为对象变更操作,对应的请求可以称为对象变更请求。另外,对象交互操作还可以进行细分,例如:alter还可以细分为:copy(复制)、inplace(替换)或者online(在线)等操作,这些操作也可以基于操作步骤划分为多个变更阶段。进一步地,对象交互请求可以是服务器接收到的终端发送的命令语句,例如,服务器接收到终端发送的DDL语句,该DDL语句为对象交互请求。

在一个实施例中,服务器可以接收终端发送的针对目标对象的对象交互请求。

S304,响应于对象交互请求,获取针对目标对象的当前变更操作所在的当前变更阶段;当前变更操作包括多个操作步骤,当前变更操作根据各个操作步骤所对应的冲突操作类型划分为多个变更阶段,冲突操作类型为操作步骤所对应的冲突操作的类型。

其中,变更操作为对目标对象进行变更的操作,可以是对目标对象的内容、结构等进行变更的操作,具体可以是新建、修改、删除、插入或者更新等中的至少一种。当前变更操作可以为接收到对象交互请求时,特定计算节点正在对目标对象执行的变更操作,也可以是在接收到对象交互请求设定时间段之前或者设定时间段之后特定计算节点对目标对象执行的变更操作。变更操作包括多个变更阶段。其中,变更阶段为执行某一变更操作所细分的执行阶段。各个变更阶段可以包含至少一个操作步骤,同一变更阶段内的各个操作步骤对应的冲突操作类型相同,即,同一变更阶段在执行过程中如果出现计算节点C发出对象交互请求时,服务器做出的响应是唯一的。例如,触发计算节点C进行回滚或者继续执行。在一个实施例中,当前变更操作的执行优先级可以高于或等于对象交互请求对应的目标操作,进一步的,当前变更操作的各个变更阶段的执行优先级也可以高于或等于对象交互请求对应的各个交互阶段。进一步的,当前变更阶段可以为接收到对象交互请求时,特定计算节点正在对目标对象执行的变更阶段,也可以是在接收到对象交互请求设定时间段之前或者设定时间段之后特定计算节点对目标对象执行的变更阶段。

其中,一个操作可以包括多个操作步骤,即一个操作划分为多个操作步骤执行,通过该操作对应的多个操作步骤的执行,能够完成该操作所要达到的功能。操作步骤为操作对应的操作单元,例如一个操作可以包括建立握手连接、接口访问、获取元信息、校验元信息、状态标识更新、读取某个数据记录、数据记录对比或者数据记录修改等中的至少一种步骤。这些操作步骤按照一定的时序执行,以完成对应的变更操作。进一步的,操作步骤所对应的冲突操作为与操作步骤存在冲突的交互操作,即如果某一操作步骤与冲突操作并行运行,则可能导致目标对象对应的信息出现信息混乱,因此,服务器应当防止操作步骤与对应的冲突操作并行运行。进一步的,冲突操作类型为操作步骤所对应的冲突操作的类型。其中,冲突操作可以包括多种类型,可以为新建、修改、删除、插入、更新或者查询等中的至少一种。

在一个实施例中,针对目标对象的当前变更操作可以是目标计算节点对目标对象进行的变更操作。其中,目标计算节点可以为区别于前述服务器的其他计算机设备。

在一个实施例中,对当前变更操作进行变更阶段划分的过程可以是:1、服务器按照一定的方式自动划分的,即,服务器自动根据冲突操作类型将当前变更操作划分为多个变更阶段;2、也可以是预先由人工划分的。

进一步地,对于服务器自动对变更操作划分变更阶段的情况,服务器可以确定各个操作步骤与计算节点集群中其他计算节点是否可以并行运行,当不能并行运行时,确定存在冲突,确定会产生冲突的计算节点对应的操作类型,作为对应操作步骤的冲突操作类型。更进一步地,可以将相同冲突操作类型下的连续的操作步骤划分到同一变更阶段中,还可以将不同冲突操作类型下的操作步骤划分到不同变更阶段中。其中,计算节点集群为计算节点构成的集群,这些计算节点能够与目标对象进行交互。进一步的,目标对象为目标数据库中的对象,目标数据库为服务器所对应的数据库,将能够访问该数据库的终端和服务器确定为计算节点,这些计算节点构成计算节点集群。

在一个实施例中,服务器可以设置状态记录表,状态记录表可以表示为ddl_job或者ddl_jobs。该状态记录表记录有针对目标对象的各个变更操作中各个变更阶段的执行状态,各个变更阶段对应的初始状态可以为未执行,计算节点每执行完一个变更阶段可以将状态从未执行修改为已执行。服务器可以在接收到对象交互请求时,访问状态记录表,以定位到当前变更操作对应的目标状态记录,按照变更阶段的顺序,将目标状态记录中第一个未执行的变更阶段确定为当前变更阶段。进一步的,当当前变更操作的某个变更阶段执行失败时,可以从状态记录表中获取最新执行完成的变更阶段的状态记录,进而基于该状态记录恢复到执行失败前的变更阶段,此时可以重新对执行失败的变更阶段进行执行。其中,状态记录表可以存储在服务器中。也可以存储在执行当前变更操作的计算节点中,还可以存储在服务器以及各个计算节点都可以访问的数据库中。

S306,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果,当前相关操作类型包括当前冲突操作类型或者当前并行操作类型。

在一个实施例中,目标操作类型为目标交互操作的类型,可以为新建、修改、删除、插入、更新或者查询等中的至少一种。对象交互请求对应的目标操作类型可以为至少一种,当目标操作类型为至少两种时,可以分别将各个目标操作类型与当前变更阶段对应的当前相关操作类型进行对比,进而得到冲突校验结果。

在一个实施例中,当前冲突操作类型为不允许与当前变更阶段同步执行的操作类型,当前并行操作类型为允许与当前变更阶段同步执行的操作类型,当前冲突操作类型可以包含至少一个冲突操作类型,当前并行操作类型也可以包含至少一个并行操作类型。进一步地,可以将目标操作类型与当前相关操作类型进行匹配性判断,根据匹配性判断结果得到对象交互请求对应的冲突校验结果。具体地,如果当前冲突操作类型包含目标操作类型,则将冲突校验结果确定为存在冲突,如果当前并行操作类型包含目标操作类型时,则将冲突校验结果确定为不存在冲突。在某些实施例中,也可以将当前冲突操作类型和当前并行操作类型一起确定为当前相关操作类型。

在一个实施例中,当前冲突操作类型和当前并行操作类型可以根据预先确定的各个变更操作对应的操作类型记录表。进一步的,操作类型记录表可以包括冲突操作类型记录表和并行操作类型记录表。更进一步地,服务器在确定当前变更操作时,确定当前变更操作所对应的冲突操作类型记录表,将冲突操作类型记录表中记录的冲突操作类型确定为当前冲突操作类型。同样的,当前并行操作类型可以根据预先确定的各个变更操作的并行操作类型记录表确定。服务器在确定当前变更操作时,确定当前变更操作所对应的并行操作类型记录表,将并行操作类型记录表中记录的并行操作类型确定为当前并行操作类型。

S308,当冲突校验结果为不存在冲突时,根据对象交互请求对目标对象执行对应的交互操作。

其中,根据对象交互请求执行对应的交互操作的实现过程可以为:根据对象交互请求对目标对象执行对应的目标交互操作。具体地,当对象交互请求为对象变更请求时,则对目标对象执行对应的目标变更操作。例如:当接收到DDL语句时,对目标对象执行该DDL语句对应的命令。

当不存在冲突时,说明允许对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型并行运行,可以根据对象交互请求执行对应的交互操作。

在一个实施例中,当冲突校验结果为存在冲突时,停止根据对象交互请求执行对应的交互操作。当不存在冲突时,说明不允许对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型并行运行,可以停止根据对象交互请求执行对应的交互操作。

上述对象处理方法中,通过将变更操作细分为变更阶段,能够在各个变更阶段下进行冲突校验,可以并行运行不存在冲突的操作阶段,同时可以停止运行存在冲突的操作阶段,可以保证操作的原子性,能在很大程度上降低变更操作对其他交互操作的影响,有效提高对象交互处理的效率。另外,将当前变更操作细分为变更阶段,细化了目标交互操作与当前变更操作之间的对比,目标交互操作不需要等到变更操作的所有阶段完全执行完,这种方式不会影响生产环境,能最大程度地降低变更操作对其他交互操作的影响,对于触发对象交互请求的用户来说是无感知的。

在一个实施例中,获取针对目标对象的当前变更操作所在的当前变更阶段包括:获取针对目标对象的当前变更操作所对应的当前操作步骤;确定当前操作步骤所对应的变更阶段,作为针对目标对象的当前变更操作所在的当前变更阶段,其中,不同的冲突操作类型的连续操作步骤划分在不同的变更阶段中。

其中,当前操作步骤可以为接收到对象交互请求时,特定计算节点正在对目标对象执行的操作步骤,也可以是在接收到对象交互请求设定时间段之前或者设定时间段之后特定计算节点对目标对象执行的操作步骤。

在一个实施例中,可以预先设置操作步骤与变更阶段的对应关系,也可以是即时确定操作步骤对应的变更阶段。服务器在接收到对象交互请求时,根据操作步骤与变更阶段的对应关系确定与当前操作步骤对应的当前变更阶段。

上述实施例中,基于当前变更操作所对应的当前操作步骤确定当前变更阶段,进而基于当前变更阶段对对象交互请求进行冲突校验。能通过细化的操作步骤确定出准确的当前变更阶段,进而得到可靠的冲突校验结果。

在一个实施例中,对当前变更操作进行阶段划分的步骤包括:确定当前变更操作所对应的当前操作步骤序列,当前操作步骤序列包括多个按照操作顺序进行排列的操作步骤;确定当前操作步骤序列中各个操作步骤所对应的冲突操作类型;根据操作步骤所对应的冲突操作类型对当前操作步骤序列进行划分,得到当前变更操作所对应的多个变更阶段,其中,相同冲突操作类型的连续操作步骤划分在相同的变更阶段中。

其中,操作步骤序列为多个操作步骤按照执行顺序排序得到的序列。执行顺序相邻的至少两个操作步骤可以认为是连续的操作步骤。即对于相邻的操作步骤,如果对应的冲突操作类型不同,则划分在不同的变更阶段中。

在一个实施例中,变更操作包括多个操作步骤。以新建操作为例,新建操作可以包括以下多个连续的操作步骤:1、获取元信息,2、校验元信息,3、向数据字典中添加新表数据,其中,数据字典可以存储在数据库中,4、状态标识更新等。这些操作步骤构成当前操作步骤序列。各个操作步骤在执行过程中与其他计算节点的交互操作可能存在不同的冲突状态。例如,假设另一操作为插入操作,插入操作的各个操作步骤可以与新建操作中的获取元信息、校验元信息、状态标识更新的操作步骤并行运行,即不存在冲突,而插入操作的各个操作步骤与新建操作中向数据字典中添加新表数据的操作步骤无法并行运行,需插入操作回滚,即存在冲突。进一步的,相互连续的操作步骤1和2对应的冲突操作类型相同,因此,可以将这两个操作步骤划分到同一变更阶段中,作为元信息校验阶段,而操作步骤2和3对应的冲突操作类型不同,因此,可以将这两个操作步骤划分到不同的变更阶段中,同时,操作步骤3和4对应的冲突操作类型不同,因此,可以将这两个操作步骤划分到不同的变更阶段中,分别将操作步骤3和4划分到数据添加阶段和标识更新阶段中。据此,新建操作对应的操作步骤序列被划分为元信息校验阶段、数据添加阶段和标识更新阶段。在实际进行变更操作划分的过程中,所比较的操作的数量可以更多,也可以为计算节点集群中所有对同一对象进行的交互操作。

上述实施例,根据操作步骤序列中各个操作步骤所对应的冲突操作类型来对变更操作进行变更阶段的划分,以将相同冲突操作类型的连续操作步骤划分在相同的变更阶段中,将不同冲突操作类型的连续操作步骤划分在不同的变更阶段中,能基于操作步骤所对应的冲突操作类型准确实现变更阶段的划分。

在一个实施例中,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果包括:从对象交互请求中提取操作类型标识,根据所提取的操作类型标识得到对象交互请求对应的目标操作类型;将目标操作类型与当前冲突操作类型进行对比,当根据对比结果确定当前冲突操作类型包括目标操作类型时,确定冲突校验结果为存在冲突。

其中,计算节点在发送对象交互请求时可以携带目标操作类型的类型标识。服务器从对象交互请求携带的信息中提取类型标识即可以得到目标操作类型。

在一个实施例中,如果当前冲突操作类型为多个,可以将目标操作类型逐个与当前冲突操作类型进行对比。当存在与目标操作类型一致的冲突操作类型时,判定当前冲突操作类型包括目标操作类型,此时,将确定冲突校验结果为存在冲突;当不存在与目标操作类型一致的冲突操作类型时,判定当前冲突操作类型不包括目标操作类型,此时,将确定冲突校验结果为不存在冲突。

上述实施例,基于目标操作类型与当前冲突操作类型的对比结果进行冲突校验,进而可以快速得到冲突校验结果,有效提高对象处理的效率。

在一个实施例中,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果包括:从对象交互请求中提取操作类型标识,根据所提取的操作类型标识得到对象交互请求对应的目标操作类型;将目标操作类型与当前并行操作类型进行对比,当根据对比结果确定当前并行操作类型不包括目标操作类型时,确定冲突校验结果为存在冲突。

在一个实施例中,如果当前并行操作类型为多个,可以将目标操作类型逐个与当前并行操作类型进行对比。当不存在与目标操作类型一致的冲突操作类型时,判定当前并行操作类型不包括目标操作类型,此时,将确定冲突校验结果为存在冲突;同样的,当存在与目标操作类型一致的冲突操作类型时,判定当前并行操作类型包括目标操作类型,此时,将确定冲突校验结果为不存在冲突。

上述实施例,基于目标操作类型与当前并行操作类型的对比结果进行冲突校验,进而可以快速得到冲突校验结果,有效提高对象处理的效率。

在一个实施例中,操作类型记录表可以通过状态转换矩阵来实现,该状态转换矩阵可以记录目标对象的各个状态之间的转换可能性,如果可以转换,则记录为允许转换,如果不可以转换,则记录为不允许转换。进一步地,可以根据状态转换矩阵确定对象交互请求对应的冲突校验结果。其中,目标对象的状态可以为目标对象的数据读写状态,可以为公开(public)、可读(read)、可写(write)、不可读(no write)、不可写(no read)、等待(waiting)或者仅删除(delete only)等中的至少一种状态。其中,公开指的是可以进行读、写以及删除操作的状态。

在一个实施例中,各个操作类型可以对应不同的目标对象的状态。在一个实施例中,可以根据目标操作类型确定目标对象的目标状态,根据当前变更操作的操作类型确定目标对象的当前状态。具体地,如果当前变更操作未执行完,则当前状态可以为执行当前变更操作之前的状态,如果当前变更操作执行完毕,则当前状态可以为执行当前变更操作之后的状态。另外,可以将目标操作类型对目标对象的预期状态确定为目标对象的目标状态。

在一个实施例中,各个变更阶段也可以对应有状态,也可以根据当前变更阶段的执行状态确定目标对象的当前状态,具体过程可以参见上述根据当前变更操作确定当前状态的过程,在此不再赘述。

在一个实施例中,确定根据目标操作类型对目标对象进行交互之后目标对象对应的目标状态,当基于状态转换矩阵确定允许将目标对象从当前状态转换为目标状态时,将冲突校验结果确定为不存在冲突;否则,将对象变更请求对应的冲突校验结果确定为存在冲突。

在一个实施例中,状态转换矩阵可以如图4所示。图4记录的是是否允许将列项的状态转换为行项的状态,其中,表格中的箭头表示的转换方向,Y表示允许,N表示不允许。以第一列的第一个状态转换为第一行的第二个状态为例,目标对象的当前状态为新建-公开,即,当前变更操作为新建操作,该新建操作在执行完毕时对应的状态为公开;目标对象的目标对象为修改-公开,即,目标交互操作为修改操作,该修改操作在执行完毕时对应的状态为公开。通过查询图4中的状态转换矩阵的信息确定允许进行这种转换。因此,将冲突校验结果确定为不存在冲突。

在一个实施例中,所述方法还包括:当所述冲突校验结果为存在冲突时,停止根据所述对象交互请求对所述目标对象执行对应的交互操作。

当存在冲突时,说明不允许对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型并行运行,可以停止根据对象交互请求执行对应的交互操作。

在一个实施例中,当存在冲突时,还可以执行回滚操作,以恢复到接收对象交互请求之前的状态。之后可以实时监测当前变更操作的执行状态,如果当前变更操作执行完毕,获取当前变更操作对目标对象进行变更后的最新状态,可以再次响应对象交互请求,进而基于目标对象的最新状态执行对应的交互操作。

通过这样的方式,能使得交互过程是基于目标对象的最新状态进行的,防止不同计算节点所获取的目标对象的状态存在差异。

在一个实施例中,当冲突校验结果为不存在冲突时,根据对象交互请求对目标对象执行对应的交互操作,包括:当冲突校验结果为不存在冲突时,响应于对象交互请求,确定目标操作类型所对应的目标操作步骤序列;按照目标操作步骤序列对目标对象执行对应的交互操作。

在一个实施例中,可以通过步骤序列记录表记录各种操作类型对应的操作步骤序列。在接收到对象交互请求并确定冲突校验结果为不存在冲突时,基于目标操作类型的操作类型标识从步骤序列记录表确定与操作类型标识对应的操作步骤序列,得到目标操作步骤序列。

上述实施例,确定目标操作类型所对应的目标操作步骤序列,进而按照目标操作步骤序列对目标对象执行对应的交互操作,能够对目标对象执行与对象交互请求对应的交互操作,保证对对象交互请求的可靠响应。

在一个实施例中,按照目标操作步骤序列对目标对象执行对应的交互操作包括:确定目标对象对应的第一操作阶段,第一操作阶段为对象交互请求对应的下一操作阶段;当第一操作阶段所对应的阶段优先级满足优先执行条件时,发送针对目标对象的操作锁定请求;当确定接收到针对操作锁定请求的锁定响应信息时,执行第一操作阶段所对应的操作步骤。

其中,操作锁定请求为触发进行操作锁定的请求。进一步地,向正在与目标对象进行交互的计算节点发送操作锁定请求,触发这些计算节点加上对应的对象锁,以锁定在对目标对象的当前操作中,直到解锁。锁定响应信息可以为计算节点在加上对象锁之后向服务器返回的响应信息,即锁申请成功的反馈。服务器在接收到锁定响应信息时,可以判定对应的计算节点加上了对应的对象锁。

在一个实施例中,确定第一操作阶段所对应的阶段优先级是否满足优先执行条件的过程可以为:获取对目标对象进行交互的各个交互操作中的各个阶段优先级,将第一操作阶段所对应的阶段优先级与前述各个阶段优先级进行对比,当第一操作阶段所对应的阶段优先级最高时,确定第一操作阶段所对应的阶段优先级满足优先执行条件。

在一个实施例中,发送针对目标对象的操作锁定请求的实现过程可以为:向计算节点集群中的其他计算节点发送针对目标对象的操作锁定请求,以使得这些计算节点向服务器返回锁定响应信息。进一步地,可以向计算节点集群中的所有计算节点发送操作锁定请求,此时可以认为是申请全局锁。在某些情况下,也可以向计算节点集群中的部分计算节点发送操作锁定请求,此时可以认为是申请局部锁。在一个实施例中,向计算节点集群中的其他计算节点发送针对目标对象的操作锁定请求之后,可以在接收到部分计算节点的锁定响应信息时执行第一操作阶段所对应的操作步骤;也可以在接收到所有计算节点的锁定响应信息时执行第一操作阶段所对应的操作步骤。

进一步地,按照目标操作步骤序列对目标对象执行对应的交互操作包括:确定所述目标对象对应的下一操作阶段,得到第一操作阶段;向计算节点集群发送操作锁定请求,以使得计算节点集群中的各个计算节点在与操作锁定请求相容时加对象锁并返回锁定响应信息;当接收到计算节点集群中的各个计算节点返回的锁定响应信息时,执行第一操作阶段;当第一操作阶段执行完毕时向计算节点集群发送操作解锁请求,以使得计算节点集群中的各个计算节点解除对象锁并继续运行;返回根据对象变更请求获取对目标对象进行变更的下一变更阶段的步骤,直到对象变更请求对应的各个操作变更阶段执行完毕。

在一个实施例中,将目标交互操作分为多个小操作阶段来执行,可以不对所有的操作阶段都申请锁,在需要进行控制的操作阶段开始时再申请锁,每个操作阶段执行完毕后释放锁即可。具体地,表A中的数据存放在数据表中,正在基于某一对象变更操作删除表A,表A已经被删除,当前正属于删除数据表中表A的数据的过程,如果此时接收到新建一个同名的表的变更操作,由于表A已经被删除了,新建的表与删除的表不会存在冲突,与删除数据表的操作也不会冲突,因此新建表的过程就不需要申请锁。

在一个实施例中,以目标交互操作为DDL语句为例,整个计算节点集群对外可以表现为一个整体,在DDL进入的下一个阶段可能会导致其他DML语句回滚之前,服务器需要申请全局锁,此时可以进行强同步。申请全局锁的具体过程可以为:

1、服务器先向计算节点集群所有节点发送申请锁请求,并等待一段时间;

2、服务器检查是否有其他计算节点反馈已经在持有不相容的锁,如果有则等待,进入3;如果没有持有锁的反馈或者接收到锁定响应信息,则说明可以推进到下一阶段,进入4;

3、服务器等待各个计算节点的锁定响应信息;

4、服务器推进目标对象的状态。由于状态的推进,其他计算节点如果在前面的阶段没有发送反馈,可能会据此发生回滚。

5、服务器执行完成后,向反馈的计算节点发送锁释放消息,继续循环进行上述步骤,直到完成DDL语句。

上述实施例中,服务器在各个操作阶段都请求操作锁定,能使得各个操作阶段作为独立的操作单元,进而可以实现最小单元的冲突校验,尽可能地减少计算节点的等待过程。

在一个实施例中,对象处理方法还包括:确定目标对象对应的第二操作阶段,第二操作阶段为第一操作阶段对应的下一操作阶段;当第二操作阶段所对应的阶段优先级满足优先执行条件时,维持操作锁定请求所请求的对象锁,执行第二操作阶段所对应的操作步骤。

上述实施例中,第一操作阶段申请加锁之后,如果第二操作阶段还是要申请锁,则不释放第一操作阶段所申请的锁,以防止重复进行锁申请操作,能有效提高对象处理的效率。

在一个实施例中,当第一操作阶段所对应的阶段优先级满足优先执行条件时,发送针对目标对象的操作锁定请求包括:确定第一操作阶段所对应的操作内容的操作内容级别;当操作内容级别为对象级别时,确定第一操作阶段所对应的阶段优先级满足优先执行条件,发送针对目标对象的操作锁定请求。

其中,操作内容为交互操作对目标对象所操作的内容,操作内容可以是对象级别的内容,也可以是数据级别的内容。以目标对象为表为例,操作内容可以是对象级别的内容,例如:对表的结构、数据类型、表之间的链接和约束等进行的操作,操作内容可以是数据级别的内容,例如:向表中插入一条记录、对表中的某条记录进行数据修改等。内容级别的交互操作对目标对象的影响程度大于数据级别的交互操作对目标对象的影响程度。

上述实施例,基于操作内容级别来确定操作阶段对应的阶段优先级,进而确定是否发送操作锁定请求。能优先执行内容级别的交互操作,而数据级别的交互操作靠后执行,这样能有效防止执行数据级别的交互操作后,内容级别的交互操作覆盖数据级别的交互操作的影响,出现无效的操作,通过这种方式可以有效提高对象处理的效率。

在一个实施例中,第一操作阶段所对应的阶段优先级也可以根据目标操作类型确定,当目标操作类型符合预设的类型条件,则确定目标交互操作的各个操作阶段对应的阶段优先级均满足优先执行条件。进一步地,当目标交互操作的操作内容级别为对象级别,则判定目标操作类型符合预设的类型条件,并确定目标交互操作的各个操作阶段对应的阶段优先级均满足优先执行条件。具体地,当目标操作类型为DDL语句对应的操作类型时,判定确定目标交互操作的各个操作阶段对应的阶段优先级均满足优先执行条件,即,DDL语句的执行优先于高于DML等语句。

在一个实施例中,对象处理方法还包括:确定对象交互请求所对应的目标对象版本标识;获取根据当前变更操作对目标对象进行变更后,目标对象所对应的当前对象版本标识;将目标对象版本标识与当前对象版本标识进行对比,当对比不一致时,停止响应对象交互请求。

其中,对象交互请求中携带目标对象的版本标识,服务器在接收到对象交互请求之后,确定该请求所携带的目标对象的版本标识,得到目标对象版本标识。

其中,目标对象对应有版本标识,对目标对象进行更新之后,目标对象的版本标识会发生变化,例如:每对目标对象进行一次变更,则目标对象的版本标识+1,据此可以得到目标对象所对应的当前对象版本标识。

上述实施例中,通过对目标对象的版本标识的对比来确定是否响应对象交互请求,只有目标对象版本标识与当前对象版本标识进行对比一致时,才响应对象交互请求。能使得对目标对象进行的交互操作都是以目标对象的最新状态来进行的,防止不同计算节点所获取的目标对象的内容存在差别,可以保证计算节点集群中所有计算节点对于目标对象的数据一致性。

在一个实施例中,对象交互请求为对象变更请求,根据对象交互请求执行对应的交互操作,包括:当下一对象变更阶段为信息校验阶段时,获取与对象交互请求对应的交互基础信息;对交互基础信息进行校验;当交互基础信息校验通过时,对目标对象进行状态变更。

在一个实施例中,对象交互请求为对象变更请求,根据对象交互请求执行对应的交互操作,包括:当下一对象变更阶段为版本标识写入阶段时,对目标对象进行对应的进行状态变更操作;获取进行状态变更操作后目标对象对应的目标状态版本标识;将目标状态版本标识写入存储空间中,以使得存储空间中的存储节点在接收到针对目标对象的新的对象交互请求时,确定新的对象交互请求中携带的状态版本标识,并在对象交互请求中携带的状态版本标识与目标状态版本标识不匹配时,停止响应该新的对象交互请求。其中,存储节点也可以称为存储引擎节点(TD Store),可以为能够运行在存储层中的计算机设备,主要完成事务及存储功能。

在一个实施例中,对象交互请求为对象变更请求,根据对象交互请求执行对应的交互操作,包括:当下一对象变更阶段为状态广播阶段时,对目标对象进行对应的进行状态变更操作;基于状态变更操作生成状态变更广播信息;状态变更广播信息用于触发计算节点集群中的各个计算节点获取状态变更操作后的目标对象。其中,状态变更广播信息为目标对象的状态发生变更时生成的广播信息。各个计算节点在接收到状态变更广播信息能够从状态记录表中获取目标对象对应的最新状态和最新版本信息。进一步的,状态变更广播新可以通过global schema version(全局对象版本标识,GLSV)等表示。

上述实施例中,通过不同的变更阶段来响应对象变更请求,这些变更阶段的执行先后顺序可以根据实际情况调整,另外,不同目标操作类型下的变更阶段的数量和顺序可以不同。通过这种方式,能使得对象变更请求的响应通过多个独立的变更阶段实现,保证变更操作的原子化控制。

在一个实施例中,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果,包括:从存储空间中获取状态记录表,状态记录表用于记录各个对象变更操作对应的状态信息;当状态记录表中不存在冲突对象变更操作的状态信息时,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果;冲突对象变更操作为与对象交互请求相冲突的变更操作。本实施例中进行的冲突校验可以认为是交互操作之间的冲突校验,可以认为是第一级的冲突校验。

在一个实施例中,对象交互请求为对象变更请求,当状态记录表中不存在冲突对象变更操作的状态信息时,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果,包括:获取目标对象的对象标识;基于对象标识向集群管理节点发送对象注册请求,以使得集群管理节点响应于对象注册请求,基于对象标识生成唯一性注册号;当获取到集群管理节点发送的唯一性注册号时,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果。本实施例中进行的冲突校验可以认为是交互操作内的冲突校验,可以认为是第二级的冲突校验。

在一个实施例中,当前变更操作的每个变更阶段可以对应有操作类型,这些操作类型可以基于预先配置的目标对象的状态来确定,例如:对于delete-only状态下的操作阶段,操作类型可以为删除操作类型;对于write状态下的操作阶段,操作类型可以为写操作类型;对于read状态下的操作阶段,操作类型可以为读操作类型;等等。

在一个实施例中,根据对象交互请求所对应的目标操作类型以及当前变更阶段对应的当前相关操作类型,确定对象交互请求对应的冲突校验结果包括:当当前变更阶段为阻塞操作信息写入阶段时,确定当前变更阶段所对应的当前并行操作类型为删除操作类型;阻塞操作信息写入阶段用于写入根据当前变更操作对目标对象进行变更后,目标对象所对应的当前对象版本标识;当目标操作类型与删除操作类型不匹配时,确定对象交互请求对应的冲突校验结果为存在冲突。

其中,阻塞操作信息写入阶段为将阻塞操作信息写入存储空间的阶段,也可以称为write fence(写屏障)阶段。阻塞操作信息可以是用于阻塞不符合条件的操作的信息。其中不符合条件的操作可以是版本标识与目标对象所对应的当前对象版本标识不一致的操作。

其中,删除操作类型为可以进行删除操作的操作类型,具体地,删除操作类型可以为delete-only状态下的操作类型。进一步地,只有目标操作类型对应为删除操作时,才将冲突校验结果确定为不存在冲突,否则将冲突校验结果确定为存在冲突。

在一个实施例中,Schema会带上一个版本号,每执行完一个交互操作,可以将Schema的版本号作为数据存储到存储节点中。在write fence阶段可以将版本号进行+1操作。

在一个实施例中,如果针对某个Schema的DDL语句执行完毕,则其他节点能够基于所广播的全局对象版本知晓针对Schema的DDL语句已执行完毕,因此可以通过ddl_job来获取Schema的最新版本号以及最新状态。当DML语句带着一个版本号去访问Schema时,如果这个版本号比Schema当前的版本号小的话,说明Schema正处于执行DDL语句的流程中且未完成,需要DML语句回滚。通过这种方式,能有效防止对Schema执行DDL语句的过程中,其他语句对Schema进行交互。

上述实施例,在阻塞操作信息写入阶段中,基于操作类型的匹配性判断来确定冲突校验结果,能有效保证冲突校验结果的可靠性。

在一个实施例中,当前变更操作对应的变更阶段可以如图5中的502/504/506/508以及510所示。图5中的各个变更阶段都可以对应有各自的状态,服务器在接收到对象交互请求之后,将对象交互请求对应的目标操作类型与当前变更阶段的当前并行操作类型进行匹配性判断,如果两者相匹配则将冲突校验结果确定为不存在冲突,如果两者不匹配则将冲突校验结果确定为存在冲突。管理节点也可以称为集群管理节点(MC,management ofcluster),可以通过计算机设备实现,以管理整个集群必须的信息。

进一步地,对当前变更操作对应的变更阶段详细说明如下:

1、在接收到DDL语句时,服务器从存储节点中读数据字典,从中获取元信息,并对元信息进行校验。如果元信息校验失败,则终止执行响应对象交互请求(ABORT)。

2、如果元信息校验成功,则服务器确定Schema的当前状态和目标状态,从本地存储空间中获取状态转换矩阵,并基于状态转换矩阵确定是否允许将当前状态转换为目标状态。如果不允许转换,则终止执行响应对象交互请求(ABORT)。

3、如果允许转换,则向存储节点推进write fence,以将Schema的版本号作为数据存储到存储节点中。如果推进失败,则终止执行响应对象交互请求(ABORT)。

4、如果推进成功,则通过存储节点更新数据字典。如果更新失败,则终止执行响应对象交互请求(ABORT)。

5、如果更新成功,则向管理节点推进GLSV,以通知其他计算针对Schema的语句所执行的状态。

6、如果推进GLSV成功,则当前变更操作执行成功(SUCCESS)。

在一个实施例中,当对象交互请求为对象变更请求时,在对目标对象的目标变更操作之前还可以执行准备操作,在对目标对象的目标变更操作之后还可以执行收尾操作。以目标变更操作为DDL对应的操作为例,准备操作可以称为start_ddl_jod,收尾操作可以称为end_ddl_jod,而目标变更操作可以称为push_ddl_jod。准备操作、目标变更操作以及收尾操作一起的执行过程可以如图6所示,图6为一个实施例中对象处理方法的流程示意图。具体的实现过程可以为:执行准备操作,如果准备操作执行成功,则判定开始成功,进入原生DDL流程的执行过程。其中,第一原生DDL流程可以为从准备操作到对象变更操作之间需要执行的DDL流程。在第一原生DDL流程执行结束时,开始执行对象变更操作,如果对象变更操作执行成功,判定推定成功。继续执行第二原生DDL流程。其中,第二原生DDL流程可以为从对象变更操作到收尾操作之间需要执行的DDL流程。在第二原生DDL流程执行结束时,开始执行收尾操作,如果收尾操作执行成功,判定推定成功,可以结束整个流程。另外,如图6所示,在某个操作步骤执行失败时可以判断是否需要恢复,如果需要恢复则执行恢复流程以恢复到执行失败之前的状态,保证对象变更操作的稳定运行。

在一个实施例中,任何类型的DDL都会在开始执行的时候记录ddl record,也即,将状态信息记录到ddl_job中。这样做的目的在于明确系统中已经执行过某DDL。对于恢复线程来说,ddl_job是DDL的现场。

在一个实施例中,为了保证DML在与DDL并发的过程中不会读/写错数据,在DDL执行的流程中就需要根据具体情形不断调整元数据和用户数据的状态。比如说DROP TABLE在没有真正执行删除用户数据之前,应当将元数据状态推进至delete-only状态,以防止新事务读已被删除的用户数据。在分布式数据库中,推进DDL状态的过程可能被任何异常打断,如网络磁盘异常等。而推进过程的任一节点失败都意味着DDL执行失败。这种情形需要后台线程来进行恢复,恢复的语句就是在start_ddl_job记录的ddl_job,ddl_job是随着DDL推进状态不断更新的,ddl_job的实时性可以为恢复线程保留有效现场。当DDL执行完毕时,需要根据DDL执行主流程是否抛出异常决定保留或者删除ddl_job。决定删除ddl_job的场景,即表示DDL执行成功,否则需要后台恢复线程进行二次判断。

具体地,push ddl job这个功能封装了将Schema 状态从一个状态推进到下一个状态的全部必须状态,通过这个功能的执行,将一个DDL变更的执行划分为几个连续的小阶段执行;push_ddl_job用来推进DDL语句小阶段执行的状态,是分段DDL执行的实施者,如图5所示,其主要功能包括:

1、基于最新的数据字典信息做出版本信息的修改,在数据字典中修改Schema的状态和版本,这个过程可以是数据字典常规的修改操作;另外,还包括对元信息进行校验。

2、元信息校验成功时,通过状态转换矩阵检测对象状态转换是否符合逻辑,只有被允许的状态之间才可以进行状态推进。

3、添加/推进write fence阶段。

4、更新数据字典。

5、推进版本标识,以保存推进信息,以备故障恢复。

在一个实施例中,本申请实施例的对象变更操作可以实现异步删除数据,例如:当某一计算节点真正执行针对Schema的插入操作时,另一计算节点可以一步删除Schema中的某一记录。对于DDL语句中的DROP类操作可以瞬间完成,后台线程保证数据删除,并且实际删除动作也不需要与DDL语句在同一个计算节点执行。

在一个实施例中,准备操作的具体实现流程可以如图7所示。start_ddl_job是SQLEngine执行一个DDL语句的开端,如图7所示,其主要功能包括:

1、查询DDL同步结构,即扫描ddl_job,确定集群全局没有在执行与当前ddl冲突的语句。例如:执行ALTER TABLE或者DROP TABLE语句,以根据语句执行结果得到冲突检测结果,这里是利用存储层来做第一次冲突检测,即实现DDL之间的并发控制。如果基于ddl_job的扫描结果确定存在冲突,则终止执行DDL语句(ABORT)。

2、如果基于ddl_job的扫描结果确定无冲突,获取目标对象的库表名形成的key(关键词),并在管理节点进行注册,管理节点在注册过程中不允许两个重复值的注册,MC在注册成功时会输出数据字典锁(dd.table lock),这里是利用集群管理层来做的第二次冲突检测,即实现DDL语句间的并发控制。如果dd.table lock获取失败,即,注册失败,则终止执行DDL语句(ABORT)。

3、如果dd.table lock获取成功,将本次ddl的状态信息存入状态记录表(ddl_job表)中,以进行并发控制与故障恢复。如果存入ddl_job表失败,则终止执行DDL语句(ABORT)。

4、检查3中存入记录的存在性,当存在时,说明存入ddl_job表成功,从管理节点中获取状态锁(jod_id lock,job-id锁)以快速判断当前DDL的执行状态,如果获取不到则说明DDL尚在正常流程中执行或者已经在其他节点上恢复。如果job-id锁获取失败,则终止执行DDL语句(ABORT)。

5、如果job-id锁获取成功,则start_ddl_job执行成功(SUCCESS)。

在一个实施例中,收尾操作的具体实现流程可以如图8所示。具体地,end_ddl_job用来结束DDL执行,进行一些善后工作,具体的实现流程说明如下:

1、服务器本地根据DDL的执行现场决策是否需要从ddl_job表中移除DDL记录。其中,是否需要移除的依据是:是否需要恢复线程来恢复或者继续执行,如果需要恢复线程来恢复或者需要继续执行,则不移除。

2、当决策成功时,通过管理节点推进GLSV(即,推对象版本标识),以通知其他计算针对Schema的语句已经执行结束。

3、当推进GLSV成功时,执行释放锁,即执行release LOCK,通过管理节点释放本DDL执行流程中申请的各种全局锁。如果释放锁执行失败,则通过后台线程来进行恢复。

4、当释放锁执行成功时,执行释放内存,即执行release mem,释放相应的内存。如果释放内存执行失败,则通过后台线程来进行恢复。

5、如果释放内存执行成功,则end_ddl_job执行成功(SUCCESS)。另外,如果有遗留任务未完成,则通过后台线程来进行恢复。

需要说明的是,图5、图6、图7和图8中所划分的各个阶段可以理解为是完整的操作阶段,不同操作类型所需的变更阶段可以针对性删减,例如:删除操作不需要额外修改数据字典信息。

在一个实施例中,通过查询DDL同步结构可以获取DDL语句执行的情况。通过以下查询语句“select * from information_schema.ddl_job where is_history= 1\G”所得到的查询结果可以如下:

mysql> select * from information_schema.ddl_job where is_history=1\G

SCHEMA_NAME: d1

TABLE_NAME: #

TABLE_VERSION: 0

DDL_STATUS: 0

START_TIMESTAMP: 2021-04-07 19:14:14

LAST_TIMESTAMP: 2021-04-07 19:14:14

DDL_SQL: create database d1

INFO: {"exec_addr":{"ip":"127.0.0.1","port":9025},"recov_addr":{"ip":"127.0.0.1","port": 9025}}

其中,“SCHEMA_NAME”表示目标对象的名称,“TABLE_NAME”表示目标对象中某个表的名称,“TABLE_VERSION”表示表的版本,“DDL_STATUS”表示DDL语句的执行状态,“START_TIMESTAMP”表示执行DDL语句的开始时间,“LAST _TIMESTAMP”表示执行DDL语句的结束时间,“DDL_SQL”为正在执行的DDL语句,“INFO”表示所查询的信息:exec_addr表示DDL执行的机器地址,ip表示对应的IP(Internet Protocol,网际互连协议)地址,port表示对应的网络接口,recov_addr表示DDL执行完成的机器的地址,可以包括正常或异常等状态信息。

本申请还提供一种应用场景,该应用场景应用上述的对象处理方法。具体地,该对象处理方法在该应用场景的应用如下:

本申请的实施例可以应用到分布式数据库系统、计算存储分离的多写数据库集群系统等中。执行一次数据定义语言语句(DDL语句)的流程如图9所示。

首先,执行start_ddl_jod阶段。其次执行push_ddl_job阶段。最后执行end_ddl_job阶段。push_ddl_job阶段用于实现以下功能:1、推进状态,保证用户数据的可见性;2、记录ddl推进信息,保证在任意节点可恢复。end_ddl_job阶段用于实现信息保存等善后工作。正常结束的情况下,基于是否需要清理临时表而确定是否保留对应的状态记录,另外,用户数据删除需要后台线程执行,也即,需要DDL线程(DDL thread)执行。

如图9所示,当某一阶段执行失败时,可以生成失败记录,并通过恢复线程来恢复执行失败前的状态。其中,执行失败可以是程序执行失败,也可以是断电等系统无法运行的失败情况。进一步地,当无需恢复线程再次处理时,DDL线程回归到原来的状态,并可以处理其他的任务;当需要恢复线程处理时,通过恢复线程来恢复对应的状态,恢复线程可以访问ddl_job来获取失败执行的状态,进而实现状态的恢复。不需要担心DDL失败带来数据问题,一旦DDL执行失败,后台线程会对异常DDL进行恢复,保证数据一致性状态。

对于DDL语句不要求所有计算节点强同步,所有计算节点通过如下方式感知到某一个计算节点上正在进行DDL语句执行:

1、对于DDL语句,通过集群管理节点与存储节点去检验是否有对于同一Schema的变更语句还在执行。因为变更过程是通过任务的形式存储在存储节点的,查询任务的过程实际上就包括检查的过程。另外存储节点的write fence会保证存储节点阻止DDL过程中不允许的读写操作的执行。

2、对于DDL语句中的每一个小阶段完成,都会更新一个集群级别的变量,集群其他节点在开启新的事务时,会基于当前schema变更所处的阶段进行后续执行的逻辑判断,获得集群级别的变量;根据集群级别的变量值来决定是否进入Schema 变更判断流程,并判断以下内容:是否当前操作的schema发生了Schema 变更,发生了什么变更,目前Schema处于一个什么样的状态,这个状态是否允许当前操作的执行等,处理过程执行完成之后。计算节点的Schema也更新到最新状态。

3、可以在数据字典中增加一个逻辑表,即为前述实施例中的状态记录表。在运行过程中通过同步逻辑表中的状态来确定语句要怎样执行,这个逻辑表可以被计算节点集群中的所有计算节点访问,因此逻辑表中记录的状态可以作为集群级别的变量。其中,逻辑表可以通过ddl_job实现,DDL执行状态可以通过SQL语句的形式进行查询ddl_job,通过ddl_job的记录判定当前DDL是否已经执行完毕,执行到哪一步骤等。另外,逻辑表与数字字典中的同步结构可以不同。

4、假设其他节点在开始执行事务时并没有发生对应的Schema变更,在执行的过程中,可以通过Schema 变更过程(Write fence)中对于Schema状态的持久化更新来防止集群中各个节点在执行过程中因为使用旧版本的Schema 对象进行操作,而导致的数据不一致问题。增加一个在数据写入存储层时判断Schema对象当前版本是否和操作版本兼容的逻辑来决定是否允许数据读写,进而保证数据读写都不会引入数据的一致性与完整性问题。同时支持多种冲突解决机制。

另外,DDL优先,即DDL总是可以推进执行状态,其他DML语句事务会在某些状态下被回滚。具体地,在其他DML语句执行过程中需要执行DDL语句,则等待DDL语句执行完毕后回滚这些DML语句。

传统技术中,在实现分布式数据库DDL的时候仅仅实现了DDL的串行执行,并且只有特定的节点上才允许执行DDL。本实施例,通过执行阶段的细节划分,能允许在多个节点上执行DDL语句,即,可以在任意计算节点上执行DDL,无关DDL可以并行执行,实现多写。

上述实施例,至少具有以下有益效果:

1、能够保证DDL语句在分布式数据库中执行表现基本与单机MySQL(关系型数据库管理系统)执行DDL语句一致。

2、通过将DDL执行分段,同时允许不同计算节点之间的处理对象版本可以有延迟,最大程度的提升了分布式系统执行DDL过程中,对于DML语句的影响。将传统的DDL语句的执行由原来的从变更前直接变化到变更后的模式转变为多个连续独立的小步骤执行,使得集群中不同计算节点能够通过异步方式感知Schema变更的状态,同时在计算层发起读写操作的时候,存储层会判断当前操作对象的版本状态是否与集群Schema最新状态相符合,防止因为DDL变更导致的读写事务出现数据一致性问题。

3、DDL语句分阶段执行,其他节点根据不同阶段能够及时感知到,并且可以根据DDL的当前执行阶段决定是否事务继续执行/回滚,通过对于状态的精细划分可以将回滚事务减少到最低。通过非锁模式让集群中不同的计算节点感知当前系统正在发生DDL变更语句,相对于强同步实现而言,可以使得DDL语句在执行时对于其他计算节点的影响降到最低。

4、用户数据由write fence进行保障,保证即使有跨版本数据突破了分段DDL的限制,也会被存储层通过write fence发现,并拒绝事务的提交,确保不会读/写错数据。

5、通过ddl_job实现全局控制结构,来跟踪DDL执行信息,后台恢复线程实时监听系统表。保证DDL语句在分布式系统中执行失败时,元数据依然可以恢复到一个正确和一致的状态对用户提供服务。

6、一旦发生DDL失败的场景,后台线程能第一时间根据执行信息进行回滚或推进,保证整个分布式数据库系统能够进入到另外一个一致性状态,并恢复对外提供服务的能力。

应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

基于与上述实施例中的对象处理方法相同的思想,本申请还提供对象处理装置,该装置可用于执行上述对象处理方法。为了便于说明,对象处理装置实施例的结构示意图中,仅仅示出了与本申请实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

在一个实施例中,如图10所示,提供了一种对象处理装置1000,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:交互请求接收模块1002、变更阶段获取模块1004、冲突校验模块1006和操作执行模块1008,其中:

交互请求接收模块1002,用于接收针对目标对象的对象交互请求。

变更阶段获取模块1004,用于响应于所述对象交互请求,获取针对所述目标对象的当前变更操作所在的当前变更阶段;所述当前变更操作包括多个操作步骤,所述当前变更操作根据各个所述操作步骤所对应的冲突操作类型划分为多个变更阶段,所述冲突操作类型为所述操作步骤所对应的冲突操作的类型。

冲突校验模块1006,用于根据所述对象交互请求所对应的目标操作类型以及所述当前变更阶段对应的当前相关操作类型,确定所述对象交互请求对应的冲突校验结果,所述当前相关操作类型包括当前冲突操作类型或者当前并行操作类型。

操作执行模块1008,用于当所述冲突校验结果为不存在冲突时,根据所述对象交互请求对所述目标对象执行对应的交互操作。

上述对象处理装置中,通过将变更操作细分为变更阶段,能够在各个变更阶段下进行冲突校验,可以并行运行不存在冲突的操作阶段,同时可以停止运行存在冲突的操作阶段,能在很大程度上降低变更操作对其他交互操作的影响,有效提高对象交互处理的效率。

在一个实施例中,变更阶段获取模块,还包括:操作步骤获取子模块,用于获取针对所述目标对象的所述当前变更操作所对应的当前操作步骤;变更阶段确定子模块,用于确定所述当前操作步骤所对应的变更阶段,作为针对所述目标对象的所述当前变更操作所在的所述当前变更阶段,其中,不同的所述冲突操作类型的连续操作步骤划分在不同的所述变更阶段中。

在一个实施例中,对象处理装置,还包括:步骤序列确定模块,用于确定所述当前变更操作所对应的当前操作步骤序列,所述当前操作步骤序列包括多个按照操作顺序进行排列的所述操作步骤;冲突类型确定模块,用于确定所述当前操作步骤序列中各个所述操作步骤所对应的所述冲突操作类型;步骤序列划分模块,用于根据所述操作步骤所对应的所述冲突操作类型对所述当前操作步骤序列进行划分,得到所述当前变更操作所对应的多个所述变更阶段,其中,相同冲突操作类型的连续操作步骤划分在相同的所述变更阶段中。

在一个实施例中,冲突校验模块,包括:第一操作类型确定子模块,用于从所述对象交互请求中提取操作类型标识,根据所提取的所述操作类型标识得到所述对象交互请求对应的目标操作类型;第一冲突校验子模块,用于将所述目标操作类型与所述当前冲突操作类型进行对比,当根据对比结果确定所述当前冲突操作类型包括所述目标操作类型时,确定所述冲突校验结果为存在冲突。

在一个实施例中,冲突校验模块,包括:第二操作类型确定子模块,用于从所述对象交互请求中提取操作类型标识,根据所提取的所述操作类型标识得到所述对象交互请求对应的目标操作类型;第二冲突校验子模块,用于将所述目标操作类型与所述当前并行操作类型进行对比,当根据对比结果确定所述当前并行操作类型不包括所述目标操作类型时,确定所述冲突校验结果为存在冲突。

在一个实施例中,对象处理装置,还包括:操作停止模块,用于当所述冲突校验结果为存在冲突时,停止根据所述对象交互请求对所述目标对象执行对应的交互操作。

在一个实施例中,操作执行模块,包括:步骤序列确定子模块,用于当所述冲突校验结果为不存在冲突时,响应于所述对象交互请求,确定所述目标操作类型所对应的目标操作步骤序列;交互操作执行子模块,用于按照所述目标操作步骤序列对所述目标对象执行对应的交互操作。

在一个实施例中,交互操作执行子模块,包括:第一操作阶段确定单元,用于确定所述目标对象对应的第一操作阶段,所述第一操作阶段为所述对象交互请求对应的下一操作阶段;锁定请求发送单元,用于当所述第一操作阶段所对应的阶段优先级满足优先执行条件时,发送针对所述目标对象的操作锁定请求;操作步骤执行单元,用于当确定接收到针对所述操作锁定请求的锁定响应信息时,执行所述第一操作阶段所对应的所述操作步骤。

在一个实施例中,对象处理装置,还包括:操作阶段确定模块,用于确定所述目标对象对应的第二操作阶段,所述第二操作阶段为所述第一操作阶段对应的下一操作阶段;对象锁维持模块,用于当所述第二操作阶段所对应的阶段优先级满足所述优先执行条件时,维持所述操作锁定请求所请求的对象锁,执行所述第二操作阶段所对应的所述操作步骤。

在一个实施例中,锁定请求发送子模块,包括:内容级别确定单元,用于确定所述第一操作阶段所对应的操作内容的操作内容级别;锁定请求发送单元,用于当所述操作内容级别为对象级别时,确定所述第一操作阶段所对应的阶段优先级满足优先执行条件,发送针对所述目标对象的操作锁定请求。

在一个实施例中,对象处理装置,还包括:目标版本标识确定模块,用于确定所述对象交互请求所对应的目标对象版本标识;当前版本标识确定模块,用于获取根据所述当前变更操作对所述目标对象进行变更后,所述目标对象所对应的当前对象版本标识;版本标识对比模块,用于将所述目标对象版本标识与所述当前对象版本标识进行对比,当对比不一致时,停止响应所述对象交互请求。

在一个实施例中,冲突校验模块,包括:操作类型确定子模块,用于当所述当前变更阶段为阻塞操作信息写入阶段时,确定所述当前变更阶段所对应的当前并行操作类型为删除操作类型;所述阻塞操作信息写入阶段用于写入根据所述当前变更操作对所述目标对象进行变更后,所述目标对象所对应的当前对象版本标识;第三冲突校验子模块,用于当所述目标操作类型与所述删除操作类型不匹配时,确定所述对象交互请求对应的冲突校验结果为存在冲突。

关于对象处理装置的具体限定可以参见上文中对于对象处理方法的限定,在此不再赘述。上述对象处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储冲突校验结果等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种对象处理方法。

本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

相关技术
  • 对象处理方法、系统及计算机可读存储介质和计算机设备
  • 对象排序处理方法、装置、计算机设备和存储介质
技术分类

06120112941772