操作请求的处理方法、装置、设备、可读存储介质及系统与流程

文档序号:22929251发布日期:2020-11-13 16:26阅读:115来源:国知局
本说明书涉及数据库
技术领域
:,尤其涉及操作请求的处理方法、装置、设备、可读存储介质及系统。
背景技术
::随着云计算和大数据的发展,用户的数据规模越来越大,业务场景越来越多复杂,传统的云数据库由于自身架构的原因会遇到很多问题,如读写计算节点和只读计算节点各自有一份独立的数据,存储和计算成本较高;数据量大时备份时间较长;只读实例搭建较慢;空间受物理磁盘大小限制等。为了用户业务的扩展以及更快的故障恢复,计算和存储分离架构应运而生,且符合云计算弹性和可扩展性的特点。为了实现存储和计算分离,需要在计算节点间共享同一份存储数据,在共享存储的架构下,读写计算节点执行数据操作时需要参考只读计算节点的行为。基于此,需要提供效率更高的处理方案。技术实现要素:为克服相关技术中存在的问题,本说明书提供了操作请求的处理方法、装置、设备、可读存储介质及系统。根据本说明书实施例的第一方面,提供一种操作请求的处理方法,所述方法应用于共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点;所述方法包括:针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;由监控处理进程基于所述状态记录中加锁日志的状态信息,监控到确定所有只读节点都回放至所述重做日志文件中所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。可选的,所述监控处理进程按照设定周期监控所有只读节点是否都回放至所述加锁日志。可选的,所述加锁日志的状态信息包括所述加锁日志的标识;所述监控所有只读节点是否都回放至所述加锁日志,包括:接收所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识确定所有只读节点是否都回放至所述加锁日志。可选的,所述状态记录写入有多条操作请求对应的加锁日志的状态信息;所述在状态记录中写入所述加锁日志的状态信息,包括:写入表征所述加锁日志的未完成回放的状态标识;所述监控处理进程在接收到所述只读节点发送的已回放日志的标识后,将所述加锁日志的未完成回放的状态标识更新为所述加锁日志的完成回放的状态标识;或,删除所述加锁日志的标识及所述加锁日志的未完成回放的状态标识。可选的,所述在状态记录中写入所述加锁日志的状态信息后,还包括:对所述数据表进行解锁操作。可选的,所述操作请求有多条,每条所述操作请求对应有加锁日志,所述监控处理进程用于监控每条操作请求的加锁日志是否都被所有只读节点回放。可选的,所述操作请求有多条,所述方法还包括:针对每条操作请求创建一个操作处理进程,每个所述操作处理进程在执行所述响应于所述操作请求,将所述数据表进行加锁操作后,向所述请求方返回请求处理完成消息,并在重做日志文件中写入对所述数据表的加锁日志后则进程结束。可选的,所述状态记录为持久化存储文件。可选的,所述操作请求包括:数据库模式定义语言ddl事务的操作请求。可选的,所述操作请求包括:对所述数据库表结构对象进行删除的操作请求;所述基于所述操作请求对所述数据表进行相应操作,包括:基于所述操作请求对所述数据库表结构对象进行删除。根据本说明书实施例的第二方面,提供一种操作请求的处理装置,所述装置应用于共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点;所述装置包括:请求处理模块,用于:针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;监控处理模块,用于:基于所述状态记录中加锁日志的状态信息,监控到确定所有只读节点都回放至所述重做日志文件中所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。可选的,所述监控处理模块按照设定周期监控所有只读节点是否都回放至所述加锁日志。可选的,所述加锁日志的状态信息包括所述加锁日志的标识;所述监控处理模块还用于:接收所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识确定所有只读节点是否都回放至所述加锁日志。可选的,所述状态记录写入有多条操作请求对应的加锁日志的状态信息;所述请求处理模块在状态记录中写入所述加锁日志的状态信息时,具体用于:写入表征所述加锁日志的未完成回放的状态标识;所述监控处理模块还用于:在接收到所述只读节点发送的已回放日志的标识后,将所述加锁日志的未完成回放的状态标识更新为所述加锁日志的完成回放的状态标识;或,删除所述加锁日志的标识及所述加锁日志的未完成回放的状态标识。可选的,所述请求处理模块还用于:在状态记录中写入所述加锁日志的状态信息后,对所述数据表进行解锁操作。可选的,所述操作请求有多条,每条所述操作请求对应有加锁日志,所述监控处理模块具体用于监控每条操作请求的加锁日志是否都被所有只读节点回放。可选的,所述操作请求有多条,所述请求处理模块还用于:针对每条操作请求创建一个操作处理进程,每个所述操作处理进程在执行所述响应于所述操作请求,将所述数据表进行加锁操作后,向所述请求方返回请求处理完成消息,并在重做日志文件中写入对所述数据表的加锁日志后则进程结束。可选的,所述状态记录为持久化存储文件。可选的,所述操作请求包括:数据库模式定义语言ddl事务的操作请求。可选的,所述操作请求包括:对所述数据库表结构对象进行删除的操作请求;所述监控处理模块还用于:基于所述操作请求对所述数据库表结构对象进行删除。根据本说明书实施例的第三方面,提供一种计算机设备,所述计算机设备为共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点;所述计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现前述操作请求的处理方法的实施例。根据本说明书实施例的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现前述操作请求的处理方法的实施例。根据本说明书实施例的第五方面,提供一种数据库系统,包括至少一个所述读写节点、至少一个只读节点以及共享存储节点;所述共享存储节点用于存储数据、状态文件和日志文件;所述只读节点用于回放日志;所述读写节点用于针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态文件中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;由监控处理进程基于所述状态记录中加锁日志的状态信息,监控到所有所述只读节点都回放至所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。本说明书的实施例提供的技术方案可以包括以下有益效果:本说明书实施例中,读写节点在获取对数据表的操作请求后,可以不等待所有只读节点、及时向所述请求方返回请求处理完成消息;将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,以及在状态记录中写入加锁日志的状态信息后,监控处理进程可以利用状态记录和加锁日志来实现对所有只读节点的日志回放监控,从而实现了异步处理机制,提升了操作请求执行的稳定性和效率。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。图1是本说明书根据一示例性实施例示出的一种数据库系统的示意图。图2a是本说明书根据一示例性实施例示出的一种操作请求的处理方法的流程图。图2b是本说明书根据一示例性实施例示出的一种操作请求的处理方法应用场景示意图。图3是本说明书操作请求的处理装置所在计算机设备的一种硬件结构图。图4是本说明书根据一示例性实施例示出的一种操作请求的处理装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。如图1所示,是本说明书根据一示例性实施例示出的一种基于共享存储架构的数据库系统示意图,图1中示出了一个读写计算节点(以下简称读写节点,primary),以及两个只读计算节点(以下简称只读节点,replica);图1中读写节点与只读节点的个数只是示意,本说明书对读写节点与只读节点的个数不进行限制。本实施例的数据库系统还包括共享存储节点,共享存储架构可以实现存储和计算分离,各计算节点间共享同一份存储数据,即图1中示出的s1、s2至sn份文件。所述的s1、s2至sn份文件由共享存储节点进行存储,图1以一个共享存储节点进行示意,本说明书对读写节点与只读节点的个数不进行限制。本实施例中,primary节点即主节点,对外提供读写服务,replica节点可以是primary的灾备节点,也可以是对外提供只读服务的节点,它们共享一份底层数据和日志。在共享存储的架构下,primary执行的一些数据表操作需要参考replica的行为。例如,primary会接收到ddl(datadefinitionlanguage,数据库模式定义语言)事务,ddl事务是有关表结构本身的操作,例如增减数据列,建表,删表等操作。primary执行ddl事务的操作需要参考replica的行为,即primary在执行ddl操作时,需要等待所有的replica都完成已有的操作。具体来说,primary对数据表执行的操作都会记录在redo日志文件中,replica通过回放所述redo(重做)日志文件中的各条日志,来实现内存中的数据与primary的数据保持一致。其中,回放的意思是,replica读取根据redo日志文件中的日志执行与primary相应的操作。作为例子,在primary需要对某个数据表进行操作之前,primary需要确定其他replica已经完成在此数据表操作之前的其他所有操作。假设当前primary需要对数据表a进行列增加操作,而在当前的列增加操作之前数据表a还涉及其他列的删除操作,此时其他replica日志回放的过程中还未完成之前的列删除操作,那么primary需要等待其他replica都完成之前的操作后,才可执行当前的列增加操作,从而防止数据错误。以数据表删除操作为例,如果primary读写节点当前需要删除一个数据表,反映到存储上就是删除对应的文件。在只读节点上,可能此时还有事务需要访问,因此primary需要等待其他replica都完成访问操作后,才可执行当前的删除操作,以防止只读节点的事务访问存储出错。由此可见,如果采用同步方案,同步等待所有replica,则primary的操作处理效率可能会受到主备延迟的影响;比如replica数量比较多、某些replica延迟比较大,则同步等待的时间是不确定的,用户的操作请求执行性能不稳定,处理效率较低,可能给用户带来较大影响。基于此,本说明书实施例提出一种操作请求的处理方法,读写节点在获取对数据表的操作请求后,可以不等待所有只读节点、及时向所述请求方返回请求处理完成消息;通过将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,利用加锁日志来实现对所有只读节点的日志回放监控,从而实现了异步处理机制,提升了操作请求执行的稳定性和效率。如图2a所示,是本说明书根据一示例性实施例示出的一种操作请求的处理方法的流程图,所述方法应用于共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点,所述读写节点与所述只读节点共享同一份存储数据,本实施例方法可包括如下步骤:在步骤202中,针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;在步骤204中,由监控处理进程基于所述状态记录中加锁日志的状态信息,监控到所有只读节点都回放至所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。由上述实施例可见,为了提高处理效率,本说明书实施例提供了一种异步处理方案,在本说明书实施例的应用场景下,异步处理通过监控处理进程及状态记录实现。具体的,primary节点会接收到请求方发起的对数据表的操作请求,响应于所述操作请求,将所述数据表进行加锁操作后,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;由此可知,primary没有等待所有replica的日志回放、而是快速地向用户返回处理完成消息,primary不再同步等待所有replica的回放状态,从而可以显著提高处理效率。进一步的,由于对被操作的数据表进行了加锁操作,可以使该数据表处于锁定状态,通过锁机制屏蔽对数据表的其他操作请求,防止当前有其他操作请求造成的处理冲突;另一方面,执行加锁操作还有更多的作用,执行加锁操作后需要在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息,监控处理进程通过该状态记录来监控只读节点的日志回放状态。具体的,只读节点需要读取重做日志文件中的各条日志对内存中数据进行操作,从而保证内存中数据与读写节点的内存数据保持一致。重做日志中的每条日志按操作的时间顺序写入,因此本实施例中监控处理进程在后台持续运行,通过状态记录中记录的加锁日志的状态信息来监控所有只读节点的日志回放状态,以判断所有只读节点是否已经处理至当前操作,从而确定是否可以对该数据表进行相应操作,只有在所有只读节点都已经处理至当前操作了,才可基于对数据表的操作请求对数据表进行相应操作。其中,加锁日志写入有本次操作请求的具体的操作信息,例如操作请求的时间、操作哪个数据表,具体如何操作等等。因此在确定所有只读节点都回放至该加锁日志,根据重做日志中加锁日志的记录,异步执行该操作请求所要求的相应操作。由上述实施例可见,读写节点在获取对数据表的操作请求后,可以不等待所有只读节点、及时向所述请求方返回请求处理完成消息;通过将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,以及在状态记录中写入加锁日志的状态信息后,监控处理进程可以利用状态记录和加锁日志来实现对所有只读节点的日志回放监控,从而实现了异步处理机制。本说明书实施例中,由于日志回放存在滞后性,只读节点从获取到操作请求到真正完成相应操作具有一定时间,监控处理进程可以按照设定周期,周期性检查所有只读节点是否都回放至所述加锁日志。其中,步骤202可以由其他进程执行,本实施例称为操作处理进程,该操作处理进程处理完成步骤202后则进程结束,读写节点无需等待只读节点的日志回放过程。其中,primary会接收到很多操作请求,由于每个操作请求后续都要执行响应的操作,基于此,本实施例针对每条操作请求创建一个操作处理进程,每个所述操作处理进程执行所述响应于所述操作请求,将所述数据表进行加锁操作后,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息,则该进程结束。接着由监控处理进程监控所有只读节点是否都回放至所述加锁日志,监控处理进程可以周期性检查状态记录中未完成回放的加锁日志的标识,监控处理进程还可以接收所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识监控所有只读节点是否都回放至所述加锁日志。本说明书实施例中,日志文件可能有很多份,但日志的写入过程一般是依次追加到当前最新的日志文件中的,每个日志文件中有很多条日志,每条日志都有一个唯一的标识编号,日志文件中日志标识是递增的。另一方面,primary在产生日志后,可以通知日志发送进程(或者该进程定期检查是否有新产生的日志),将日志发送给replica,replica收到日志后,会给primary回复消息,在回复的消息中,会告知当前的replica的回放位点,即replica回复primary当前回放好的日志标识。基于此,监控处理进程可以接收到所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识确定所有只读节点是否都回放至所述加锁日志。其中,由于操作请求可能很多,所述状态记录写入有多条加锁日志的标识;所述状态记录写入有多条加锁日志的标识;所述在状态记录中写入所述加锁日志的标识时,还写入所述加锁日志的未完成回放的状态标识;基于此,监控处理进程可以定期检查哪些加锁日志未完成回放,在接收到只读节点发送的已回放日志的标识时,也可以通过状态标识读取到未完成回放的加锁日志的标识,以与接收的已回放日志的标识进行对比。本实施例的监控处理进程可以只有一个,监控处理进程可以通过状态记录来监控所有的操作请求的加锁日志。状态记录是持久化存储文件,即状态记录文件存储在可永久保存的存储设备中(如磁盘),因此可以解决节点设备重启等异常情况下可能发生数据丢失等问题。进一步的,在接收到所述只读节点发送的已回放日志的标识后,可以在状态记录中清除相应的状态标识;可选的,可以是将所述加锁日志的未完成回放的状态标识更新为所述加锁日志的完成回放的状态标识;或者,还可以是删除所述加锁日志的标识及所述加锁日志的未完成回放的状态标识。由前述描述可知,本实施例在响应所述操作请求时,会将所述数据表进行加锁操作,在写好加锁日志及状态记录后,则进行解锁操作;后续的,监控处理进程在监控到所有只读节点已经回放到该加锁日志后,则可以通过读取加锁日志执行相应的操作;其中,针对不同类型的操作请求会有不同的处理方式。可选的,在一些例子中,所述操作请求包括:对所述数据库表结构对象进行删除的操作请求;所述基于所述操作请求对所述数据表进行相应操作,包括:基于所述操作请求对所述数据库表结构对象进行删除。本实施例中由于是删除操作,则可以基于所述操作请求将所述数据库表结构对象进行删除后直接结束处理。接下来结合图2b对本说明书实施例的方案再次进行说明。本实施例以primary节点接收到一个有关删除数据表droptable的操作请求为例进行说明,过程如下:(1)primary节点配置有操作处理进程(图中的backend),用于接收请求方发起的ddl语句请求;接收到ddl语句后,写一条获取表锁的redo(重做)日志,假设日志号为100;(2)事务提交时,将当前ddl操作的日志号和状态写入ddl状态文件,用状态0表示未完成,即[100,0];接着执行解锁操作,随后该ddl执行完成,并不会真正去文件系统中删除数据,也不会同步等待replica的回放状态。(3)监控处理进程(图中的backgroundworker)读取ddl状态文件,判断其中的redo日志的状态,若存在状态为0的日志,则判断是否所有的replica都已经回放到该日志,以上图为例,即判断是否所有replica都已经回放到日志100。(4)如果所有replica都已经回放到该条redo日志,则读取并解析该redo日志,执行该日志对应的文件操作,如将该redo日志对应的文件删除,并将ddl状态文件中该redo日志的状态设置为1。本实施例中,操作处理进程(backend)在接收到ddl请求后,对数据表加锁,接着写加锁日志、写ddl状态信息至状态记录文件;本实施例的状态信息格式可以为[lsn,status],其中lsn为日志标识,status为日志的状态;在写入完成后可以释放锁,返回请求处理完成消息。至此,ddl执行结束。本实施例中通过在持久化的状态记录文件中写入ddl状态信息,因此可以不用等待所有replica回放到该加锁日志。本实施例中,由backgroundworker定期检查ddl状态文件,以检测replica是否回放到对应的ddllsn,如果回放到,则根据ddl状态文件中记录的ddl加锁日志的lsn,从redo日志中读取日志内容,并从中解析ddl的信息,并执行相关的文件操作(以本实施例的droptable操作为例,对应的处理操作即删除对应文件)。由上述实施例可见,在异步ddl的过程中,操作处理进程不再同步等待所有replica,只要将ddl的redo日志及其状态写入ddl状态文件即可。监控处理进程可以定期、异步判断ddl状态文件中记录的redo日志是否已经被所有replica回放,若都已经回放到,则解析redo日志,执行相关文件操作,该异步过程对用户无感知。与前述操作请求的处理方法的实施例相对应,本说明书还提供了操作请求的处理装置及其所应用的计算机设备的实施例。本说明书操作请求的处理装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书操作请求的处理装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中装置331所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。如图4所示,图4是本说明书根据一示例性实施例示出的一种操作请求的处理装置的框图,所述装置应用于共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点;所述装置包括:请求处理模块41,用于:针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态记录中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;监控处理模块42,用于:由监控处理进程基于所述状态记录中加锁日志的状态信息,监控到所有只读节点都回放至所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。可选的,所述监控处理模块按照设定周期监控所有只读节点是否都回放至所述加锁日志。可选的,所述加锁日志的状态信息包括所述加锁日志的标识;所述监控处理模块还用于:接收所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识确定所有只读节点是否都回放至所述加锁日志。可选的,所述状态记录写入有多条操作请求对应的加锁日志的状态信息;所述请求处理模块用于:在状态记录中写入所述加锁日志的状态信息时,还写入表征所述加锁日志的未完成回放的状态标识;所述监控处理模块还用于:在接收到所述只读节点发送的已回放日志的标识后,将所述加锁日志的未完成回放的状态标识更新为所述加锁日志的完成回放的状态标识;或,删除所述加锁日志的标识及所述加锁日志的未完成回放的状态标识。可选的,所述请求处理模块还用于:在状态记录中写入所述加锁日志的状态信息后,对所述数据表进行解锁操作。可选的,所述操作请求有多条,每条所述操作请求对应有加锁日志,所述监控处理模块具体用于监控每条操作请求的加锁日志是否都被所有只读节点回放。可选的,所述操作请求有多条,所述请求处理模块还用于:针对每条操作请求创建一个操作处理进程,每个所述操作处理进程在执行所述响应于所述操作请求,将所述数据表进行加锁操作后,向所述请求方返回请求处理完成消息,并在重做日志文件中写入对所述数据表的加锁日志后则进程结束。可选的,所述状态记录为持久化存储文件。可选的,所述操作请求包括:数据库模式定义语言ddl事务的操作请求。可选的,所述操作请求包括:对所述数据库表结构对象进行删除的操作请求;所述监控处理模块还用于:基于所述操作请求对所述数据库表结构对象进行删除。上述操作请求的处理装置中各个模块的功能和作用的实现过程具体详见上述操作请求的处理方法中对应步骤的实现过程,在此不再赘述。相应的,本说明书实施例还提供一种计算机设备,所述计算机设备为共享存储服务集群中的读写节点,所述服务集群包括有至少一个所述读写节点以及至少一个只读节点;所述计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现前述操作请求的处理方法的实施例。相应的,本说明书实施例还提供一种数据库系统,包括至少一个所述读写节点、至少一个只读节点以及共享存储节点;所述共享存储节点用于存储数据、状态文件和日志文件;所述只读节点用于回放日志;所述读写节点用于针对请求方发起的对数据表的操作请求,将所述数据表进行加锁操作,在重做日志文件中写入对所述数据表的加锁日志,并在状态文件中写入所述加锁日志的状态信息后,向所述请求方返回请求处理完成消息;由监控处理进程基于所述状态记录中加锁日志的状态信息,监控到所有所述只读节点都回放至所述加锁日志后,基于所述操作请求对所述数据表执行相应操作。可选的,所述监控处理进程按照设定周期监控所有只读节点是否都回放至所述加锁日志。可选的,所述加锁日志的状态信息包括所述加锁日志的标识;所述监控所有只读节点是否都回放至所述加锁日志,包括:接收所述只读节点发送的已回放日志的标识,通过对比所述已回放日志的标识与所述加锁日志的标识确定所有只读节点是否都回放至所述加锁日志。可选的,所述状态记录写入有多条操作请求对应的加锁日志的状态信息;所述在状态记录中写入所述加锁日志的状态信息,包括:写入表征所述加锁日志的未完成回放的状态标识;所述监控处理进程在接收到所述只读节点发送的已回放日志的标识后,将所述加锁日志的未完成回放的状态标识更新为所述加锁日志的完成回放的状态标识;或,删除所述加锁日志的标识及所述加锁日志的未完成回放的状态标识。可选的,所述在状态记录中写入所述加锁日志的状态信息后,还包括:对所述数据表进行解锁操作。可选的,所述操作请求有多条,每条所述操作请求对应有加锁日志,所述监控处理进程用于监控每条操作请求的加锁日志是否都被所有只读节点回放。可选的,所述操作请求有多条,针对每条操作请求创建一个操作处理进程,每个所述操作处理进程在执行所述响应于所述操作请求,将所述数据表进行加锁操作后,向所述请求方返回请求处理完成消息,并在重做日志文件中写入对所述数据表的加锁日志后则进程结束。可选的,所述状态记录为持久化存储文件。可选的,所述操作请求包括:数据库模式定义语言ddl事务的操作请求。可选的,所述操作请求包括:对所述数据库表结构对象进行删除的操作请求;所述基于所述操作请求对所述数据表进行相应操作,包括:基于所述操作请求对所述数据库表结构对象进行删除。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1