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

一种逻辑数据获取方法及装置与流程

2022-07-30 21:50:35 来源:中国专利 TAG:
1.本说明书一个或多个实施例涉及计算机应用领域,尤其涉及一种逻辑数据获取方法及装置。
背景技术
::2.对于支持一写多读的云数据库系统而言,其一般包括一个读写(read-write)节点和多个只读(read-only)节点,读写节点可以更改云数据库系统存储的数据,而只读节点只能读取云数据库系统存储的数据。所有节点共享同一个存储空间,从而完成针对共享存储空间中的关系型数据库的一写多读。3.读写节点对云数据库系统存储的数据进行更改一般是通过执行用户提交的数据变更事务实现的。为了提高处理效率,读写节点在执行数据变更事务时,并不会直接将变更后的数据写入磁盘(即共享存储空间)中,而是将数据变更事务中所包含的数据变更指令写入共享存储空间的重做日志(redolog)中。基于上述前提,对于只读节点而言,为了使其可以获得最新版本的数据库,其还需要同步读写节点写入的重做日志,以通过回放重做日志得到最新版本的数据库。4.而上述情况下,由于重做日志记录的物理数据,即重做日志记录的是对哪个物理页中的哪个数据进行了什么修改,因此只通过重做日志本身,并不能获取到修改的数据究竟对应了逻辑意义是什么的数据。换言之相关技术中仅通过重做日志,并不能得知修改对应的逻辑数据。5.相关技术中,一般通过开启二进制日志(binarylog)来解决上述问题,二进制日志和重做日志都是云数据库系统的日志,但是二进制日志是一种记录逻辑数据的日志,而重做日志是一种记录物理数据的日志。虽然通过记录二进制日志可以解决上述问题,但是这样会使得读写节点记录了两份重复的日志,这样造成了读写节点付出了双倍的io成本,效率较低。技术实现要素:6.有鉴于此,本说明书一个或多个实施例提供一种逻辑数据获取方法及装置。7.根据本说明书一个或多个实施例的第一方面,提出了一种逻辑数据获取方法,应用于云数据库系统的只读节点,所述方法包括:8.在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志;9.解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据;10.从所述至少一条重做日志中获取索引信息;11.将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。12.根据本说明书一个或多个实施例的第二方面,提出了一种逻辑数据获取装置,应用于云数据库系统的只读节点,所述装置包括:13.重做日志获取模块,用于在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志;14.变更数据获取模块,用于解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据;15.索引信息获取模块,用于从所述至少一条重做日志中获取索引信息;16.逻辑数据获取模块,用于将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。17.根据本说明书实施例的第三方面,提供一种云数据库系统,所述云数据库系统包括一个读写节点和若干只读节点,任一只读节点执行前述的逻辑数据获取方法。18.根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现前述的逻辑数据获取方法。19.根据本说明书实施例的第五方面,提供一种计算机设备,所述计算机设备包括:20.处理器;21.用于存储处理器可执行指令的存储器;22.所述处理器通过运行所述可执行指令以实现前述的逻辑数据获取方法。23.根据本说明书实施例的第六方面,提供一种计算机程序,所述计算机程序被运行时实现前述的逻辑数据获取方法。24.本说明书提供一种逻辑数据获取方法及装置,应用于云数据库系统的只读节点,包括:在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志;解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据;从所述至少一条重做日志中获取索引信息;将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。25.这样,通过只读节点的回放过程,从重做日志中提取出逻辑数据来完成逻辑数据的获取,读写节点无需保存双份的日志,减少了读写节点的io成本,实现了在不开启二进制日志的基础上达到了和开启二进制日志类似的效果。此外,上述方法是在回放的过程中完成的,即复用(reuse)了只读节点本身的重做日志的回放流程所获取到的重做日志,使得通过重做日志即获取到了逻辑数据,又能进行回放,以较低的成本提取出了逻辑数据。且这样无需读写节点记录额外的二进制日志,节省了存储空间,提升了数据写入速度。26.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。附图说明27.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。28.图1是本说明书根据一示例性实施例示出的一种逻辑数据获取方法的流程图。29.图2是本说明书根据一示例性实施例示出的一种逻辑数据获取装置的框图。30.图3是本说明书根据一示例性实施例示出的一种逻辑数据获取装置所在电子设备的一种硬件结构图。具体实施方式31.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。32.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。33.接下来首先对本说明书提供的方法所基于的背景进行说明。34.本说明书提供的方法是针对具有一写多读能力的云数据库(一般为关系型数据库),该云数据库为了实现读写指令的快速处理,一般包括一个读写节点和多个只读节点。读写节点是主节点,用于执行用户提交的数据变更事务中的数据变更指令,以根据用户的指令变更数据库;只读节点用于执行数据读取指令。35.数据库中为了保证写入效率,在收到数据变更指令时,并不会立刻将数据变更同步到磁盘中,而是暂时先将数据变更指令写入重做日志中,换言之,读写节点在收到数据变更指令的情况下,会先将数据变更指令写入重做日志中,再执行数据变更指令,写入重做日志后就会向用户返回写入成功,从而提高了写入效率(向用户返回的速度)。36.有些情况下,有些数据变更指令只同步在了重做日志中,对应的数据修改并没有持久化到共享存储空间中,这种情况下,只读节点为了更新得到最新版本的数据库,需要获取读写节点写入共享存储空间中的重做日志,并回放(回放也就指的是按顺序执行重做日志中包括的对应的各个数据变更指令)重做日志,以得到最新版本的数据库,从而保证了各个节点的数据的同步。37.在对数据库系统的各个部分进行基本介绍后,接下来将对相关技术中的需求进行说明。38.重做日志是一种物理日志,其记录的是物理上每条数据变更指令所变更的数据,换言之,重做日志中仅记录了每次修改对应于物理页的哪个位置,但是对于关系型数据库而言,仅知道每次修改在物理页的哪个位置,并不能得知该位置的数据对应于哪个表的哪一行哪一列的数据,以及这些表/行/列所表征的逻辑含义(这种数据称之为逻辑数据)。39.这种情况使得只读节点无法感知逻辑上的修改。物理数据组成的重做日志是一种具有部分逻辑意义的物理日志,通过重做日志只能知道具体在哪个位置修改了什么,并不能得知这个位置的含义和这样修改的意义,因此只通过重做日志并不能完全感知逻辑上的修改。40.为了使得各个节点可以感知逻辑上的修改,相关技术在保存重做日志的同时,还会保存二进制日志(binarylog),二进制日志和重做日志都是用于保存读写节点对于数据库的修改的日志,两者之间的不同之处在于,二进制日志通过逻辑数据来表征修改(二进制日志可以看做用户的sql序列),而重做日志通过物理数据来表征修改(需要说明的是,相关技术中通过二进制日志来实现多个节点之间数据同步,即只读节点回放二进制日志来获取最新版本的数据库的方法,称之为原生复制,通过重做日志来实现多个节点之间数据同步的方法称为物理复制)。41.这种记录两份日志的方法虽然能使得各个节点感知逻辑上数据库的修改,但是由于记录了两份本质内容基本一致的数据(只是一个是物理数据,一个是逻辑数据),这造成了双倍的存储和数据写入成本,影响了数据写入效率。42.为了解决上述问题,首先考虑到能否只保存二进制日志来降低成本的同时实现日志对于维护人员来说更可读。但是对于一些数据库引擎(比如innodb)而言,重做日志是一种数据库引擎来说必要的数据,而二进制日志是一种可选择记录或不记录的日志,现有的数据库引擎并不能支持不保存重做日志的做法。43.进一步考虑到,使各个节点感知逻辑上的修改是为了维护人员可以查看数据库的修改,而云数据库系统中,读写节点是负责修改数据库的节点,因此相关技术中容易想到,从修改数据库的节点(读写节点)下手来实现使得维护人员得知数据库的修改的目的,也就是前述的通过二进制日志来使得各个节点可以感知逻辑上的修改(当然也可以是通过修改不可取消的重做日志的结构,使得重做日志包括更多的逻辑信息来实现,但是这样对代码进行较大修改,非常繁琐且容易出错)。44.虽然在数据库系统中,只有读写节点有权利对数据库进行修改,但是只读节点会回放重做日志以完成数据的同步,那么可以通过只读节点的数据回放过程中的逻辑上的更改来实现感知数据库系统修改的目的。虽然有些情况下有些只读节点只对部分重做日志进行回放,但是由于只读节点数量较多,所有只读节点回放的数据总能覆盖绝数据库中绝大部分的数据。45.因此考虑到可以在只读节点的回放过程中顺便完成逻辑数据的获取。46.进一步地,只读节点回放过程中,可以获取到重做日志,而重做日志本质上和二进制日志记录的内容是一样的,那么通过解析重做日志,必然可以获取到重做日志所对应的逻辑数据。47.对于具体的如何解析而言,考虑到逻辑数据应该包括所变更的数据的逻辑含义,以及内容。对于逻辑含义来说,可以通过所变更的数据对应的索引来表征,而重做日志中已经包括一些简易索引,可以直接将这些简易索引作为所变更的数据的索引;对于内容来说,重做日志中包括对物理页的哪些内容进行修改,那么根据关系型数据库中数据的排布,以及重做日志中的信息,就可以还原出所变更的数据,这样就能完成逻辑数据的获取。48.换言之,本说明书提供一种逻辑数据获取方法及装置,应用于云数据库系统的只读节点,包括:在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志;解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据;从所述至少一条重做日志中获取索引信息;将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。49.这样,通过只读节点的回放过程,从重做日志中提取出逻辑数据来完成逻辑数据的获取,读写节点无需保存双份的日志,减少了读写节点的io成本,实现了在不开启二进制日志的基础上达到了和开启二进制日志类似的效果。此外,上述方法是在回放的过程中完成的,即复用(reuse)了只读节点本身的重做日志的回放流程所获取到的重做日志,使得通过重做日志即获取到了逻辑数据,又能进行回放,以较低的成本提取出了逻辑数据。且这样无需读写节点记录额外的二进制日志,节省了存储空间,提升了数据写入速度。50.进一步地,在此基础上,外部模块可以通过只读节点接入数据库,订阅只读节点上的回放过程中获取的逻辑数据,使得外部模块可以感知到更可读的逻辑数据,从而实现数据库修改的感知。51.接下来首先将对本说明书示出的一种逻辑数据获取方法进行详细说明。52.如图1所示,图1是本说明书根据一示例性实施例示出的一种逻辑数据获取方法的流程图,包括以下步骤:53.步骤101,在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志。54.还需要说明的是,该方法应用于云数据库系统的只读节点。55.在步骤101中,利用了只读节点回放数据的过程中所获取到的重做日志,将这些重做日志作为获取逻辑数据的基础。56.接下来将详细叙述步骤101中各个名词的含义。57.首先需要对重做日志的格式进行说明,重做日志一般分为compact类型和redundant类型,两种类型记录的内容基本一致,只是在长短上有区别,compact类型是一种较新的类型,其长度更短。58.重做日志虽然是一种物理日志,但是其也具有逻辑意义,一般一个重做日志文件中包括多条重做日志,每一条重做日志的格式都如下所示:一般包括日志标记(singlerecordflag),日志类型(logtype),表空间id(spaceid),表空间中的页号(pagenumber)以及日志记录的数据(payload)。59.日志类型根据指令的不同而不同,比如可以包括插入(insert)日志,删除日志(delete)和更新(update)日志等等,不同类型的日志可以存储在同一个重做日志文件中。日志记录的数据根据日志类型的不同而有所差别,具体的不同详见下文,在此暂不赘述。60.云数据库系统支持一写多读,包括一个读写节点和多个只读节点,多个只读节点,只读节点为了同步读写节点中对物理页的修改,会获取并回放重做日志,以获取到最新版本的数据库,这些过程具体描述参见上文,在此不再赘述。61.相关技术只读节点回放的过程一般包括三个阶段,第一阶段是读(read)阶段,由只读节点中的日志读取线程(redologasyncreader,当然也可以是其他线程,在此只是以日志读取线程为例)从共享存储空间中读取重做日志到只读节点的内存缓冲区(asyncreadbuffer)。62.其中,第一阶段可以在需要读取的数据的最新版本没有持久化的情况下执行,也可以是每个只读节点在发现读写节点重做日志新增的时候执行。对于后者来说,只读节点和读写节点之间可以通过一个通讯线程来同步日志序列号(logsequencenumber,lsn),lsn用于表征最新的重做日志所记录到的位置,当读写节点的lsn提高时,则表明读写节点新写入了重做日志,那么这时只读节点可以回放新增的重做日志,以实现读写节点和只读节点之间的数据同步。63.第二阶段为解析(parse)阶段,协调线程(applycoordinator)解析每一条重做日志,每个物理页都对应于一个日志应用线程(redologapplyworker),协调线程会根据每一条重做日志的中包括的表空间id和页号将该条重做日志分配给对应的日志应用线程。64.其中,这里的解析和下文步骤103中的解析重做日志的含义不同,这里的解析指的是解析得到每条重做日志对应的物理页,从而将其分配给对应的日志应用线程。此外,设置多个日志应用线程的目的是为了提高日志应用的效率,如果只通过一个日志应用线程来应用速度较慢。65.第三阶段为应用(apply)阶段,即在第一阶段获取到的全部重做日志都被解析后,协调线程通知所有的日志应用线程并行地应用各条重做日志,在内存中获得最新版本的内存页。66.在对步骤101中涉及的各个名词进行说明后,接下来将从不同方面对步骤101进行说明。67.如上所述,回放包括三个阶段,当然获取重做日志可以在三个阶段中任一阶段进行,但是考虑到有些情况下,重做日志存在缺省问题,这使得在第三阶段应用阶段来获取重做日志将更加节省资源。68.具体而言,在前一条重做日志和后一条重做日志写入的内容相同的情况下,后一条重做日志将缺省部分内容。比如在前一条重做日志是在某个物理页的某个位置写入字符串ab,后一条重做日志是在另一个物理页的某个位置写入字符串abcd,由于ab和abcd存在相同的“ab”,在记录后一条内容时,则会直接记录写入cd,而不会记录写入abcd。69.这种情况下,由于在解析阶段,即日志应用线程在实际应用前,协调线程还会通过mismatch信息补全完整的日志,那么在第三阶段可以获取到完成的重做日志,而在其他阶段获取到重做日志后还要重复的去补全重做日志,可见在第三阶段获取重做日志将更为提升效率,减少重复工作。70.且在解析阶段,获取mismatch信息首先要获取到物理页,而物理页一般是在应用阶段获取的。如果在解析阶段就获取重做日志,那么仍需要先读取共享存储空间中的物理页(在物理页不在内存中的情况下),这样也是做了重复工作。如果在第三阶段获取重做日志,从这个方面来看也可以减少重复工作。71.换言之,步骤101包括:在只读节点回放至少一条重做日志并补全所述至少一条重做日志后,获取所述至少一条重做日志。72.也就是说,在回放的应用阶段来获取完整的重做日志,这样做可以减少重复工作。提升效率。具体的,在回放阶段获取,可以在应用阶段开始应用前,也可以在应用阶段开始应用后,具体的应用时机在此不做限制。73.从步骤101的执行时机对步骤101进行说明后,下面将从重做日志的类型来对步骤101进行进一步说明。74.重做日志有针对数据变更指令(包括数据的插入、删除和更新指令)的,也有关于事务操作的重做日志,事务的提交(commit)、回滚(rollback)和保存点(savepoint)操作也会产生相应的日志,对于不同类型的日志处理方法是不同的。75.对于数据变更指令中插入和更新类型的数据变更指令而言,其一般只有compact和redundant两种类型的重做日志,两种日志记录的内容基本相同,产生时机也相同,都能用于提取逻辑数据,对于这两种日志的处理方法只要根据重做日志的类型,从对应的位置提取所需提取的数据就行。76.而对于数据变更指令中删除类型的数据变更指令而言,其有4种类型的重做日志,分别是删除标记类型的compact格式、redundant格式的重做日志,删除回收类型的compact格式、redundant格式的重做日志。对于删除标记类型和删除回收类型而言,与插入和更新不同的是,删除并不是收到数据变更指令就立刻删除,而是在收到数据变更指令的情况下,先给需要删除的数据对应的聚簇索引(即主键索引)打个删除标记,这时会记录删除标记类型的重做日志。过一段时间可以删除后,会去删除带有删除标记的聚簇索引对应的数据,完成需要删除的空间的回收。77.上述情况下,在聚簇索引被打上删除标记的情况下这个数据就视为删除了。本来只记录删除标记类型的重做日志就够了,但是在数据被真正删除,也就是对应的空间被回收时,也应该记录下重做日志,否则无法通过重做日志来恢复数据,因此才需要记录两种类型的重做日志。对于两种类型的重做日志来说,删除标记类型的重做日志是在数据被视为删除时所记录的,这个重做日志更能反映数据的真正状态,而删除回收类型的日志相比之下会存在延迟。78.因此为了提高逻辑数据获取的实时性和准确性,选择只通过删除标记类型的日志来解析逻辑数据。换言之,步骤101包括:在所述只读节点回放的重做日志类型为删除标记类型的情况下,获取至少一条类型为删除标记类型的重做日志;所述删除标记类型用于表征所述重做日志是在给聚簇索引打上删除标记时产生的。在所述只读节点回放的重做日志类型为删除回收类型的情况下,不获取类型为删除回收类型的重做日志;所述删除回收类型用于表征所述重做日志是在删除具有删除标记的聚簇索引对应的数据时产生的。79.对于有关事务的操作类型的日志如何处理,将在下文进行说明,在此暂不赘述。需要说明的是,有关事务操作类型的日志仍需要获取的。80.步骤103,解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据。81.步骤105,从所述至少一条重做日志中获取索引信息。82.接下来将对步骤103和步骤105进行统一说明。83.步骤103和105的过程就是从物理的重做日志中提取逻辑数据的过程。首先需要说明的是,逻辑数据包括数据所在的位置(进一步还可以包括所在位置的含义),以及数据是怎么变更的,因此需要分别提取两者。84.需要说明的是,步骤103和105的先后顺序本说明书不做限制。85.首先对步骤103的具体实现方法进行说明。86.对于删除和插入类型的重做日志而言,由于关系型数据库操作的最小单位是一行,插入和删除往往是插入一整行或者删除一整行。这种情况下,删除和插入所要提取的所变更的数据就是一整行的数据,而一行包括多列,那么就需要先还原出这一行各列的数据,并将各列的数据组成该一整行的数据。87.对于更新类型的重做日志而言,有时候更新只是对一行中某一列或几列进行变更,获取变更的数据可以是获取一整行的数据,也可以是获取一行中某一列或几列的数据(即变化的数据)。88.对于具体的恢复方法而言,重做日志中一般都包括了每一列的字段的长度、非空信息等,进而可以通过记录的这两者将重做日志中记录的数据拆分成多块,并通过非空信息在多块数据中间补全空的列,从而通过得到的各列的数据得到一整行的数据。89.需要说明的是上述只是示出了一种通过解析重做日志提取所变更的数据的方法,具体实现方法不限于这一种方法,也可以是其他方法,本说明书对此不作限定。90.其次对步骤105的具体实现方式进行说明。91.对于数据变更指令所对应的重做日志而言,重做日志中是会包含一些逻辑信息的,比如表空间id和页号等等,如果维护人员仅需要表空间id层面的逻辑数据,那么可以仅通过解析重做日志获取表空间id。92.而在有些情况下,维护人员实际上仅通过表空间id,并不知道这个id究竟表示的哪个具体的表,且有些情况下,维护人员还想要得知修改具体是对哪一行的修改,这种情况下,就需要通过重做日志和物理页中的记载得知。93.具体而言,可以通过重做日志,确定重做日志中包含的表空间id和页号,从而确定所变更的数据所在物理页,进而从该物理页的索引头(indexheader)中提取出该行数据(即所变更的数据所在行)的索引标识(indexid),进而,从索引字典中确定对应行的索引(index)对象和表(table)对象,从而确定变更数据的主键索引和二级索引,得到所变更的数据的完整的索引信息。94.换言之,步骤105包括:从所述至少一条重做日志中,获取所述数据变更指令所变更的数据所在的物理页;从所述物理页的索引头中确定所述数据变更指令所变更的数据对应的索引标识,根据所述索引标识确定所述数据变更指令所变更的数据的索引信息;所述索引信息包括所述数据变更指令所变更的数据的主键索引和二级索引。95.其中,捕捉行数据是从主键索引中捕捉,主键索引包含了完整的行数据,而二级索引只包含某几列数据。96.步骤107,将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。97.通过步骤103和105,从重做日志中解析出所变更的数据具体在哪个表的哪个位置(索引信息,表征了在表中的位置),并确定了如何对数据进行变更,在得到了两者的情况下,便可以将两者作为重做日志对应的逻辑数据。98.此外还需要说明的是,上文中提及了重做日志还有针对事务操作的日志,具体而言存在事务提交对应的重做日志、事务回滚对应的重做日志以及设置保存点的事务对应的重做日志。对于这三者来说,由于它们并不是对数据库变更的操作,不需要分析这些重做日志中的的逻辑数据。但是这些重做日志表明了当前重做日志哪些是已经执行了的,哪些还没有发出事务提交指令(有可能事务还没有提交,对应的数据变更指令就已经写入了重做日志),因此仍需要分析这些重做日志,以更好的分析针对数据变更指令的重做日志。99.对于事务提交操作对应的重做日志而言,其一般包括事务号,而其他的针对数据变更指令的重做日志也包含了事务号,因此只有检测到已经记录了提交操作的事务号对应的针对数据变更指令的重做日志才是需要分析的重做日志,其他重做日志为还未提交的重做日志,这些日志不需要现在分析,在对应的事务提交后再分析。100.换言之,上述方法还包括:在获取的所述至少一条重做日志包括事务提交指令对应的重做日志的情况下,确定所述事务提交指令对应的重做日志包括的提交事务号。在所述至少一条重做日志中,确定数据变更指令对应的重做日志所包括的变更事务号。根据所述提交事务号和所述变更事务号,从所述至少一条重做日志中确定有效重做日志,并基于所述有效重做日志确定逻辑数据。101.其中,有效重做日志也就是变更事务号和任一提交事务号相同的重做日志,需要基于这些重做日志确定逻辑数据。102.对于事务的回滚操作,回滚操作不直接记录重做日志,是通过反向应用回滚日志(undolog)进行补偿操作,并且补偿操作也会记录对应的重做日志,因此可以基于上述方法来分析事务的回滚操作对应的重做日志(看做针对数据变更指令的重做日志)。103.对于保存点的操作而言,添加保存点时会产生重做日志,这种重做日志不包含逻辑含义可以不分析。而在回退到某个保存点时,与回滚操作相似的是,也是通过反映应用回滚日志进行补偿操作,补偿操作会产生对应的重做日志,可以按照针对数据变更指令的重做日志的处理方法来处理这部分重做日志。104.此外,还需要说明的是,为了使得维护人员可以看到数据库的修改,还可以通过订阅模块来订阅各个只读节点上产生的逻辑数据,从而使得维护人员可以知道物理页的修改对应的逻辑数据。105.换言之,在组成所述逻辑数据后,所述方法还包括:向订阅模块发送组成的所述逻辑数据。其中,向订阅模块发送的可以是所有的重做日志对应的逻辑数据,也可以是部分重做日志对应的全部或部分逻辑数据,具体发送哪些是只读节点的重做日志获取范围、解析逻辑数据的范围和订阅模块所订阅的修改范围所共同作用的结果。106.由于相关技术中在不开启二进制日志的情况下,只读节点并不能感知逻辑数据,通过上述方法为只读节点提供了感知逻辑数据的能力,并通过订阅模块,维护人员可以从只读节点上获知逻辑数据,从而实现对于数据库变化的感知。107.通过上述方法,打破了原先只能通过读写节点获知逻辑数据的方案,使得可以通过只读节点来获知逻辑数据,且读写节点无需记录二进制日志,减少了读写节点的读写压力。且在只读节点回放的同时顺便执行了该方案,使得该方案以最小的代价实现。108.与前述方法的实施例相对应,本说明书还提供了装置及其所应用的终端的实施例。109.如图2所示,图2是本说明书根据一示例性实施例示出的一种逻辑数据获取装置的框图,该装置应用于云数据库系统的只读节点。所述装置包括:110.重做日志获取模块210,用于在只读节点回放至少一条重做日志的情况下,获取所述至少一条重做日志。111.变更数据获取模块220,用于解析所述至少一条重做日志,获取所述至少一条重做日志对应的数据变更指令所变更的数据。112.索引信息获取模块230,用于从所述至少一条重做日志中获取索引信息。113.逻辑数据获取模块240,用于将所述索引信息及所述数据变更指令所变更的数据组成所述至少一条重做日志对应的逻辑数据。114.在一可选的实施方式中,重做日志获取模块210具体用于:在只读节点回放至少一条重做日志并补全所述至少一条重做日志后,获取所述至少一条重做日志。115.在一可选的实施方式中,重做日志获取模块210具体用于:在所述只读节点回放的重做日志类型为删除标记类型的情况下,获取至少一条类型为删除标记类型的重做日志;所述删除标记类型用于表征所述重做日志是在给聚簇索引打上删除标记时产生的;在所述只读节点回放的重做日志类型为删除回收类型的情况下,不获取类型为删除回收类型的重做日志;所述删除回收类型用于表征所述重做日志是在删除具有删除标记的聚簇索引对应的数据时产生的在一可选的实施方式中,索引信息获取模块230具体用于:从所述至少一条重做日志中,获取所述数据变更指令所变更的数据所在的物理页;从所述物理页的索引头中确定所述数据变更指令所变更的数据对应的索引标识,根据所述索引标识确定所述数据变更指令所变更的数据的索引信息;所述索引信息包括所述数据变更指令所变更的数据的主键索引和二级索引。116.在一可选的实施方式中,所述装置还包括:有效重做日志确定模块240(图中未示出),用于:在获取的所述至少一条重做日志包括事务提交指令对应的重做日志的情况下,确定所述事务提交指令对应的重做日志包括的提交事务号;在所述至少一条重做日志中,确定数据变更指令对应的重做日志所包括的变更事务号;根据所述提交事务号和所述变更事务号,从所述至少一条重做日志中确定有效重做日志,并基于所述有效重做日志确定逻辑数据。117.在一可选的实施方式中,所述装置还包括:逻辑数据发送模块250(图中未示出),用于在组成所述逻辑数据后,向订阅模块发送组成的所述逻辑数据。118.上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。119.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。120.如图3所示,图3示出了实施例逻辑数据获取装置所在计算机设备的一种硬件结构图,该设备可以包括:处理器1010、用于存储处理器可执行指令的存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。121.处理器1010可以采用通用的cpu(centralprocessingunit,处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,所述处理器通过运行所述可执行指令以实现前述的逻辑数据获取方法。122.存储器1020可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。123.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。124.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。125.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。126.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。127.本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的逻辑数据获取方法。128.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。129.此外,本说明书还提供一种计算机程序,所述计算机程序被运行时实现前述的逻辑数据获取方法。130.此外,本说明书还提供一种云数据库系统,所述云数据库系统包括一个读写节点和若干只读节点,任一只读节点执行前述的逻辑数据获取方法。131.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。132.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。当前第1页12当前第1页12
再多了解一些

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

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

相关文献