一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

处理预写日志的方法、装置及系统与流程

2022-06-05 12:04:42 来源:中国专利 TAG:
1.本说明书实施例涉及计算机
技术领域
:,特别涉及一种处理预写日志的方法、装置及系统。
背景技术
::2.随着计算机技术的发展,数据库作为提供数据存储能力和查询能力的重要基础软件,得到了广泛应用。其中,预写日志技术,是数据库系统中用于提供原子性和持久性的一种技术。通过这种技术使得数据库的任何更改在实际生效前都先写入日志中。3.在现有的数据库的技术架构中,预写日志功能设置在数据库的存储引擎中。数据库的计算引擎将数据写入存储引擎并按需将数据放入内存以便通过http请求转发给外部应用程序。存储引擎将计算引擎写入的数据持久化到预写日志。持久化到预写日志上的数据进一步更新到数据存储模块。但是,这种技术架构不仅给计算引擎和存储引擎带来较大处理压力,而且存在较大数据冗余,造成数据库性能的下降。技术实现要素:4.有鉴于此,本说明书实施例提供了一种处理预写日志的方法。本说明书一个或者多个实施例同时涉及一种处理预写日志的装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。5.根据本说明书实施例的第一方面,提供了一种处理预写日志的方法,包括:基于消息队列通信协议提供发布接口以及订阅接口;通过所述发布接口接收预写日志写入请求;根据所述预写日志写入请求携带的数据获取预写日志记录;将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录;其中,所述预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,所述日志序号,用于使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。6.可选地,所述通过所述发布接口接收预写日志写入请求,包括:通过所述发布接口接收所述数据库的计算引擎发出的预写日志写入请求,其中,所述预写日志写入请求是所述计算引擎响应于接收到数据写入请求,将数据写入请求携带的数据转换为预写日志的格式之后发出的。7.可选地,所述将预写日志记录存储入消息队列,包括:根据发布所述预写日志记录的数据库映射到的消息主题,将所述预写日志记录存储入所述消息主题下的消息队列中,其中,数据库与消息主题之间是一一对应的映射关系。8.可选地,所述预写日志记录中单条日志记录的内容,包括:多个字段各自的描述信息以及所述多个字段各自的日志数据。9.可选地,还包括:利用分布式一致性协议与其他预写日志组件节点之间保持预写日志的一致性。10.根据本说明书实施例的第二方面,提供了一种处理预写日志的装置,包括:接口提供模块,被配置为基于消息队列通信协议提供发布接口以及订阅接口。请求接收模块,被配置为通过所述发布接口接收预写日志写入请求。记录获取模块,被配置为根据所述预写日志写入请求携带的数据获取预写日志记录。记录存储模块,被配置为将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录。其中,所述预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,所述日志序号,用于使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。11.根据本说明书实施例的第三方面,提供了一种处理预写日志的系统,包括:数据库以及应用如本说明书任意实施例所述处理预写日志的方法实现的预写日志组件。其中,所述数据库包括:计算引擎,被配置为响应于数据写入请求,通过所述预写日志组件提供的发布接口向预写日志组件发送预写日志写入请求。存储引擎,被配置为作为订阅端通过所述预写日志组件提供的订阅接口消费预写日志记录,在发生存储异常时基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。12.可选地,所述数据库为数据库集群中的任意数据库,所述数据库集群包括主数据库集群以及备数据库集群。13.可选地,还包括:所述数据库以外的外部应用程序。所述外部应用程序,被配置为作为订阅端通过所述预写日志组件提供的订阅接口消费预写日志记录。14.根据本说明书实施例的第四方面,提供了一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现本说明书任意实施例所述处理预写日志的方法的步骤。15.根据本说明书实施例的第五方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现本说明书任意实施例所述处理预写日志的方法的步骤。16.根据本说明书实施例的第六方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行本说明书任意实施例所述处理预写日志的方法的步骤。17.本说明书一个实施例实现了处理预写日志的方法,由于方法基于消息队列通信协议提供发布接口以及订阅接口,通过发布接口接收预写日志写入请求,根据所述预写日志写入请求携带的数据获取预写日志记录,将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录,而且预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,从而通过该日志序号能够使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量,不仅保证了预写日志的功能,而且订阅端例如外部程序、数据库的数据存储模块等,只要基于消息队列通信协议订阅即可获得数据,减少了数据库的计算引擎的处理操作,减少了对数据的冗余存储,能够有效提升数据库的性能。附图说明18.图1是本说明书一个实施例提供的一种处理预写日志的方法的流程图;19.图2是本说明书一个实施例提供的数据库应用场景下的系统架构示意图;20.图3是本说明书一个实施例提供的数据库集群系统架构示意图;21.图4是本说明书一个实施例提供的时序数据记录示意图;22.图5是本说明书一个实施例提供的时序数据组织逻辑示意图;23.图6是本说明书一个实施例提供的一种处理预写日志的装置的结构示意图;24.图7是本说明书一个实施例提供的一种处理预写日志的系统的结构示意图;25.图8是本说明书一个实施例提供的一种计算设备的结构框图。具体实施方式26.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。27.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。28.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。29.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。30.预写日志(write-ahead-log,wal),是数据库系统中用于提供原子性和持久性的一种技术,是数据库系统中的重要组成部分。通过预写日志技术使得数据库的任何更改在实际生效前都先写入日志中。31.日志序号(logsequencenumber,lsn),是预写日志中里面每条预写日志记录的编号。数据库的预写日志利用日志序号来保证变更的顺序,并在数据库故障恢复时实现基于预写日志的数据恢复。32.发布/订阅模式,是软件架构中的一种消息传输范式。在发布/订阅模式下,传出消息的一方(称为“发布者”)并不直接和接受消息的一方(称为“订阅者”)直接联系,不需要知道彼此的存在。通常一个消息队列中间件产品和依赖它的生产端及消费端就构成了一个发布/订阅模式。33.消息队列,也称为"消息中间件",是分布式系统中完成消息的发送和接收的基础软件,以高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。34.消息偏移量,是用于在消息队列中定位某条消息的序列号,通过消息偏移量可以定位一条消息。消息偏移量也是随着消息的不断写入而自增,通常在全局范围内或者是某个数据分片范围内唯一。35.在本说明书中,提供了一种处理预写日志的方法,本说明书同时涉及一种处理预写日志的装置,一种处理预写日志的系统,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。36.参见图1,图1示出了根据本说明书一个实施例提供的一种处理预写日志的方法的流程图,具体包括以下步骤。37.步骤102:基于消息队列通信协议提供发布接口以及订阅接口。38.其中,所述消息队列的具体实施方式不限,例如,所述消息队列可以是基于持久内存的消息队列。在基于持久内存的消息队列中,数据被消费后仍然保留在消息队列中,以便该数据继续被消费。例如,所述消息队列通信协议可以是kafkaprotocol或者类似kafkaprotocol的其他消息队列通信协议。例如,基于kafka通信协议实现的api包括但不限于:[0039]-produce[0040]-fetch[0041]-listoffsets[0042]-offsetfetch[0043]-offsetcommit[0044]-joingroup[0045]-......[0046]其中,produce用于实现发布接口,用于接收预写日志写入请求。其余的api可以用于实现订阅接口以便订阅端消费数据。[0047]步骤104:通过所述发布接口接收预写日志写入请求。[0048]其中,发布预写日志写入请求的发布端不限。例如,在数据库应用场景下,数据库的计算引擎可以通过所述发布接口发送预写日志写入请求。该预写日志写入请求可以是根据消息队列通信协议生成的,并且携带要写入的数据。[0049]步骤106:根据所述预写日志写入请求携带的数据获取预写日志记录。[0050]其中,预写日志写入请求携带的日志数据的格式不限。例如,该日志数据可以是非预写日志格式的数据,在从预写日志写入请求解析出日志数据之后,将日志数据转换为预写日志格式进而生成预写日志记录。再例如,该日志数据可以是计算引擎从应用获取日志数据之后,将日志数据转换为预写日志格式,因此,预写日志组件从预写日志写入请求解析出日志数据之后,可以直接获取预写日志记录。[0051]步骤108:将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录。[0052]其中,所述预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,所述日志序号,用于使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。[0053]其中,所述消息偏移量与日志序号之间的对应规则可以根据实施场景需要设置。例如,一个或多个实施例中,可以直接将消息偏移量作为日志序号来标识预写日志记录。[0054]其中,所述订阅端可以是任意需要预写日志记录的订阅者。例如,所述订阅端可以包括数据库的存储引擎,再例如,所述订阅端可以包括数据库以外的外部应用程序。只要订阅端基于消息队列通信协议订阅即可。[0055]由于方法基于消息队列通信协议提供发布接口以及订阅接口,通过发布接口接收预写日志写入请求,根据所述预写日志写入请求携带的数据获取预写日志记录,将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录,而且预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,从而通过该日志序号能够使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量,不仅保证了预写日志的功能,而且订阅端例如外部程序、数据库的数据存储模块等,只要基于消息队列通信协议订阅即可获得数据,减少了数据库的计算引擎的处理操作,减少了对数据的冗余存储,能够有效提升数据库的性能。[0056]另外,由于本说明书实施例提供的方法基于消息队列通信协议提供发布接口以及订阅接口,实现了消息队列的能力,使得真正意义上实现了数据的发布/订阅模式,符合实际上普遍存在的混合数据订阅应用场景,达到更好的实时效果。这是由于订阅端实时消费的数据的本质就是为了及时感应数据的变化,因此将wal组件从数据库的存储引擎中独立出来,并对外提供服务,起到了将消费目标前置,让订阅端更贴近被消费的数据,实时效果更好。而且,基于消息队列通信协议例如kafkaprotocol提供的订阅能力,有助于各种数据链路的接入。[0057]本说明书实施例提供的处理预写日志的方法的应用场景不限。根据本说明书实施例提供的方法实现的预写日志组件可以是一个独立组件,使预写日志与数据库引擎解耦。在数据库应用场景下,根据本说明书实施例提供的方法可以实现wal固有的顺序写日志的能力,将wal日志中的日志序号的概念与消息队列中的消息偏移量概念进行对应,并通过例如流处理协议kafkaprotocol将预先日志的订阅能力暴露给数据库的存储引擎以及其他应用。通过wal组件实现对外服务的能力,使得数据库的数据写入链路无需再关注数据的转发,从而实现写入场景下服务器资源的进一步集中利用,有效提高数据库的性能。wal组件自身实现高可用可以保证数据订阅链路的稳定性。从逻辑上保证只要数据被成功写入到时序数据库,那么就一定可以被订阅端消费。实现数据库引擎中预写式日志与数据存储的分离,将预写日志与流计算生态更紧密地结合起来。[0058]例如,如图2数据库应用场景下的系统架构示意图所示,包括:数据库,wal组件,作为订阅端的一个或若干个外部应用程序。数据库包括计算引擎和作为订阅端的数据存储模块。数据存储模块即对应存储引擎。数据写入流程包括:计算引擎接收项目应用发送的写入请求,计算引擎将相应的数据携带在预写日志写入请求中发送给wal组件,wal组件生成对应的预写日志记录并存储到消息队列。数据存储模块作为wal组件的一个订阅者消费日志数据,从而在存储层将对应的数据保存在内存的memtable中。存储层可以按照数据库引擎一般通用的方法异步地将memtable中的数据持久化到数据文件中。可以理解的是,所有订阅端,均可以基于例如“kafka协议”分组消费日志数据。可以理解的是,存储引擎向memtable中应用wal的数据时,需要记录数据对应的写入时的日志序号,以便存储引擎将memtable中的数据在刷到存储上时顺序的一致性。只有存储引擎将对应日志序号的数据正式刷到存储上后,才可认为这个日志被真正消费掉了。由于消息队列模式下的消费是基于偏移量来进行的,因此,当数据库某个分区crash之后,可以基于消息偏移量与日志序号之间的对应规则、预写日志的日志序号以及存储引擎已刷盘的日志序号来确定需要回放的预写日志的消息偏移量的范围,从wal组件的消息队列回放数据。[0059]在数据库应用场景下,例如,所述通过所述发布接口接收预写日志写入请求,可以包括:通过所述发布接口接收所述数据库的计算引擎发出的预写日志写入请求,其中,所述预写日志写入请求是所述计算引擎响应于接收到数据写入请求,将数据写入请求携带的数据转换为预写日志的格式之后发出的。在该实施例中,通过数据库的计算引擎将日志数据转换为预写日志的格式,能够充分利用计算引擎的计算能力,避免预写日志组件的处理压力。[0060]由于数据库概念是数据组织、访问的隔离单元。因此为了在消息队列中将不同数据库的日志数据进行隔离,可以利用消息主题的划分,将不同数据库的预写日志记录存储入对应消息主题的消息队列。其中,每个消息主题拥有各自的消息队列。因此,所述将预写日志记录存储入消息队列,可以包括:根据发布所述预写日志记录的数据库映射到的消息主题,将所述预写日志记录存储入所述消息主题下的消息队列中,其中,数据库与消息主题之间是一一对应的映射关系。例如,在wal组件中,可以将一个database映射为wal日志组织的单位,即对应于kafkaprotocol中的topic概念。[0061]为了能够在无需其他元信息的情况下被订阅端轻易识别出预写日志记录的各个组成部分,本说明书实施例提供的方法中,所述预写日志记录中单条日志记录的内容,可以包括:多个字段各自的描述信息以及所述多个字段各自的日志数据。例如,在该实施例中,预写日志记录可以是一种较固定的半结构化记录,这种记录中可以在数据结构层面清晰地标记日志数据的结构描述,例如,时序数据的metric,tags,timestamp以及fields。由于这种记录结构可以自描述,在无需其他元信息的情况下也可被订阅端轻易识别出时序数据的各个组成部分。[0062]例如,所述预写日志记录可以是符合rfc7159规范所定义的json字符串。json字符串中的“${”与“}”之间可以按描述的信息放入对应的日志数据。例如,json结构如下所示:[0063][0064]上述json字符串格式的预写日志记录格式仅用于对本说明书实施例提供的方法进行示意性说明,在实际应用中,预写日志记录的格式也可以根据实际需要设置,例如根据protocolbuffer、avro等序列化/反序列化协议设置。[0065]需要说明的是,根据本说明书实施例提供的方法实现的预写日志组件可以与数据库的计算、存储引擎部署在同一个节点上,也可以分开部署。预写日志组件自身也可以支持高可用部署,也即采用多个wal节点,多个wal节点之间可以通过例如“raft协议”等分布式一致性协议实现wal节点之间的预写日志的一致性。因此,本说明书实施例提供的方法还可以包括:利用分布式一致性协议与其他预写日志组件节点之间保持预写日志的一致性。[0066]基于高可用方式部署的预写日志组件,可以实现数据库的高可用集群系统的部署以及主备集群的双向写入。例如,如图3所示的数据库集群系统架构示意图所示,主数据库集群中的数据库的计算引擎接收写入请求,将数据转换为日志记录格式发送给wal组件。wal组件按消息队列的方式将日志持久化,并利用分布式一致性协议实现wal组件节点之间的wal日志一致,因此wal组件基于日志复制实现wal自身的高可用性。主数据库集群的数据库的数据存储模块(对应存储引擎)作为日志的消费者消费wal组件中的日志,并将数据写入memtable。备数据库集群支持实现双向写入。备数据库集群的存储引擎作为日志的另一个消费群组也消费同样的wal日志,并实现数据在备数据库集群上与主数据库集群的逻辑一致性。[0067]本说明书实施例提供的方法对于数据库的类型并不进行限制。例如,所述方法可以应用于时序数据库的预写日志的处理,系统架构可以如图2、图3所示,在此不再详细赘述。时序数据库作为提供物联网数据存储能力和查询能力的重要基础软件,随着数据密集型应用规模的不断扩大,数据应用的解决方案呈现出专业化和细分化的特点。对于时序数据而言,虽然时序数据库层面可以解决时序维度的存储和查询,但是往往还会面临时序数据与其他数据混合应用的场景,因此便需要将时序数据库中保存的数据可以被实时订阅到多种数据链路上与其他异构数据源中保存的数据进行混合应用。因此,对于时序数据库产品而言,数据的实时订阅场景是一个典型应用场景。[0068]为了使上述应用场景更加易于理解,下面对时序数据库进行示意性说明。[0069]在物联网(简称iot)应用场景中,设备会随着时间的推移不断采集数据,因此iot应用系统中由设备采集到的数据通常需要统一存储,从而方便后续应用场景中对于这些数据进行查询、分析、以及展示。在此类应用场景中采集到的数据往往被称作“时序数据”。时序数据是一种半结构化数据,其数据模型具备以下特征:每条记录带有时间戳;同一个设备可以支持采集一种或多种数据指标;不同时间点采集的数据指标不一定包含该设备能采集的全部数据指标;数据点可以通过一组标签标示来源从而与其他来源的数据点进行区分。例如,如图4的时序数据记录示意图所示,一条时序数据记录可以包括多个字段。例如,“metric”、“tags”、“timestamp”、“fields”、“values”等字段。在不同的时序数据库实现中,对于时序数据记录的各组成部分即各个字段(也可以称为标签)可以按需设置。时序数据库的特点包括:通常高频访问热数据,数据写入频率相对稳定,且远大于数据读取的频率,通常按照时间窗口查询数据。[0070]根据本说明书实施例提供的方法,将数据订阅能力与wal能力结合,将预写日志与时序数据库引擎解耦,时序数据库中在数据组织上,如图5所示的时序数据组织逻辑示意图,通常遵循以下逻辑层级:[0071]cluster:表示时序数据库集群,例如可以是单节点集群。[0072]database:数据库,对数据访问进行隔离的逻辑概念。[0073]timeseries:时序数据的基本组织单位,一个timeseries代表了一系列来源于同一个数据源上报的时序数据。[0074]datapoint:时序数据记录。[0075]其中,数据库database概念是数据组织、访问的隔离单元。因此在wal组件中,可以将一个database映射为wal日志组织的单位,即对应于kafkaprotocol中的topic概念。[0076]由于时序数据库具备以下两个特点:数据的变更只有新增写入;数据模型相对固定,因此,可以结合上述一个或多个实施例,将预写日志记录设计为一种较固定的半结构化记录,在数据结构层面清晰地标记时序数据的metric,tags,timestamp以及fields等。由于日志记录结构可以自描述,在无需其他元信息的情况下也可被订阅端轻易识别出时序数据的各个组成部分。[0077]将本说明书上述一个或多个实施例提供的处理预写日志的方法结合时序数据的实时订阅场景需求,可以实现时序数据库产品中的预写日志组件,从而扩大时序数据库中的预写日志的功能外延,使得预写日志在满足时序数据库数据的持久化基础之上提供原生的数据订阅能力。[0078]与上述方法实施例相对应,本说明书还提供了处理预写日志的装置实施例,图6示出了本说明书一个实施例提供的一种处理预写日志的装置的结构示意图。如图6所示,该装置包括:接口提供模块602、请求接收模块604、记录获取模块606及记录存储模块608。[0079]该接口提供模块602,可以被配置为基于消息队列通信协议提供发布接口以及订阅接口。[0080]该请求接收模块604,可以被配置为通过所述发布接口接收预写日志写入请求。[0081]该记录获取模块606,可以被配置为根据所述预写日志写入请求携带的数据获取预写日志记录。[0082]该记录存储模块608,可以被配置为将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录。[0083]其中,所述预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,所述日志序号,用于使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。[0084]由于装置基于消息队列通信协议提供发布接口以及订阅接口,通过发布接口接收预写日志写入请求,根据所述预写日志写入请求携带的数据获取预写日志记录,将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录,而且预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,从而通过该日志序号能够使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量,不仅保证了预写日志的功能,而且订阅端例如外部程序、数据库的数据存储模块等,只要基于消息队列通信协议订阅即可获得数据,减少了数据库的计算引擎的处理操作,减少了对数据的冗余存储,能够有效提升数据库的性能。[0085]本说明书一个或多个实施例中,所述接口提供模块602,可以被配置为通过所述发布接口接收所述数据库的计算引擎发出的预写日志写入请求,其中,所述预写日志写入请求是所述计算引擎响应于接收到数据写入请求,将数据写入请求携带的数据转换为预写日志的格式之后发出的。[0086]本说明书一个或多个实施例中,所述记录存储模块608,可以被配置为根据发布所述预写日志记录的数据库映射到的消息主题,将所述预写日志记录存储入所述消息主题下的消息队列中,其中,数据库与消息主题之间是一一对应的映射关系。[0087]其中,所述预写日志记录中单条日志记录的内容,可以包括:多个字段各自的描述信息以及所述多个字段各自的日志数据。[0088]另外,该装置还可以利用分布式一致性协议与其他预写日志组件节点之间保持预写日志的一致性。[0089]上述为本实施例的一种处理预写日志的装置的示意性方案。需要说明的是,该处理预写日志的装置的技术方案与上述的处理预写日志的方法的技术方案属于同一构思,处理预写日志的装置的技术方案未详细描述的细节内容,均可以参见上述处理预写日志的方法的技术方案的描述。[0090]与上述方法实施例相对应,本说明书还提供了处理预写日志的系统实施例,图7示出了本说明书一个实施例提供的一种处理预写日志的系统的结构示意图。如图7所示,该系统包括:数据库702以及应用如本说明书任意实施例所述的处理预写日志的方法实现的预写日志组件704。[0091]其中,所述数据库702包括:[0092]计算引擎7022,可以被配置为响应于数据写入请求,通过所述预写日志组件提供的发布接口向预写日志组件发送预写日志写入请求。[0093]存储引擎7024,可以被配置为作为订阅端通过所述预写日志组件提供的订阅接口消费预写日志记录,在发生存储异常时基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量。[0094]由于系统的预写日志组件基于消息队列通信协议提供发布接口以及订阅接口,通过发布接口接收预写日志写入请求,根据所述预写日志写入请求携带的数据获取预写日志记录,将所述预写日志记录存储入消息队列,使订阅端通过所述订阅接口消费所述日志记录,而且预写日志记录中的日志序号是基于消息偏移量与日志序号之间的对应规则确定的,所述消息偏移量是所述预写日志记录在消息队列中的消息偏移量,从而通过该日志序号能够使订阅端基于消息偏移量与日志序号之间的对应规则,确定需要回放的预写日志记录对应的消息偏移量,不仅保证了预写日志的功能,而且订阅端例如外部程序、数据库的数据存储模块等,只要基于消息队列通信协议订阅即可获得数据,减少了数据库的计算引擎、存储引擎的处理操作,减少了对数据的冗余存储,能够有效提升数据库的性能。[0095]其中,所述数据库702,可以为数据库集群中的任意数据库,所述数据库集群包括主数据库集群以及备数据库集群。例如,如图3所示的数据库集群系统架构示意图所示。所述数据库702可以是主数据库集群、备数据库集群中任一个或多个数据库。[0096]另外,所述系统还可以包括:所述数据库702以外的外部应用程序706。所述外部应用程序706,可以被配置为作为订阅端通过所述预写日志组件提供的订阅接口消费预写日志记录。例如,如图2所示的系统架构示意图,若干个外部应用程序作为wal组件的订阅端消费预写日志记录。[0097]上述为本实施例的一种处理预写日志的系统的示意性方案。需要说明的是,该处理预写日志的系统的技术方案与上述的处理预写日志的方法的技术方案属于同一构思,处理预写日志的系统的技术方案未详细描述的细节内容,均可以参见上述处理预写日志的方法的技术方案的描述。[0098]图8示出了根据本说明书一个实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。[0099]计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。[0100]在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。[0101]计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备800还可以是移动式或静止式的服务器。[0102]其中,处理器820用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述处理预写日志的方法的步骤。[0103]上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的处理预写日志的方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述处理预写日志的方法的技术方案的描述。[0104]本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述处理预写日志的方法的步骤。[0105]上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的处理预写日志的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述处理预写日志的方法的技术方案的描述。[0106]本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述处理预写日志的方法的步骤。[0107]上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的处理预写日志的方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述处理预写日志的方法的技术方案的描述。[0108]上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。[0109]所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。[0110]需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。[0111]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。[0112]以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属
技术领域
:技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献