一种WAL日志的拆分和重组的方法和装置与流程

文档序号:37595198发布日期:2024-04-18 12:31阅读:4来源:国知局
一种WAL日志的拆分和重组的方法和装置与流程

本发明属于日志的拆分和重组,尤其涉及一种wal日志的拆分和重组的方法、装置、电子设备和存储介质。


背景技术:

1、postgresql等传统的关系型数据库受限于单台物理服务器的性能极限,需要通过主备wal日志复制的方式添加备机以支持读性能的扩展。同时高可用架构通常也基于备机实现。但传统主备复制模式具有以下难以解决的缺点:添加备机时需要拷贝全量数据,时效性较差;备机的数据和主机完全一样,存储上造成浪费;这些缺点难以解决的根源在于传统关系型数据库存算一体的架构。近年头部互联网厂商纷纷推出各自的基于存算分离架构的云原生数据库实现,其实现思路都可以总结为:分离计算和存储,将存储放到分布式系统中;实现主备实例共享一份存储;通过这样的设计,在完美解决传统主备架构缺点的同时,也获得了极致的弹性能力。该思路的核心技术点是如何实现主备实例共享同一份存储。传统主备架构下,主备实例维护各自的数据,更新操作由主实例通过wal日志同步到备实例,备实例接收到wal日志后再重做更新本地数据。因此从某个时间点看,主备实例的数据是不同的。对于这个问题,业界主流的解决思路是使用wal日志在基线数据的基础上实现数据多版本读,以支持备机对老版本数据的访问。这里的关键都是控制wal日志的重做进度,使得数据版本保持在较老的状态。但具体到实现上,不同厂商分成了2个不同的技术路线:将wal日志的重做逻辑下沉到存储层,由存储层控制重做进度;wal日志回放还是由主实例完成,由主实例控制重做进度;对比方案2,方案1的wal日志重做在存储层内部完成,整体代价更小。同时主实例也不再需要写脏页到存储,极大的减少了网络io,在性能上具有明显优势。但其需要将重做逻辑下沉到存储层,这就需要对存储层进行针对性的改造。同时因为存储层是分布式系统,数据会分发到不同存储节点,那么我们也需要将wal日志分发到对应节点以实现高效的本地重做。这里就涉及到wal日志的拆分。最后postgresql的一些生态工具,例如pg_waldump、walminer等都基于对wal日志的解析,因此我们还需要在计算节点将wal日志按顺序重新组合起来。


技术实现思路

1、鉴于以上现有技术的不足,发明的目的在于提供一种wal日志的拆分和重组的方法、装置、电子设备和存储介质,解决现有方法中wal日志的拆分和重组平衡运行效率、工程难度和对pg原生代码的侵入性等方面的问题。

2、本发明的第一方面,提出了一种wal日志的拆分和重组的方法,包括:

3、通过资源管理器管理postgresql中不同类型的xlog;

4、梳理资源管理器中所有类型的xlog,实现xlog的拆分和重组接口;

5、修改xlogrecordassemble函数,根据资源管理器中xlog的类型调用对应的拆分接口,实现xlog插入log_buffer前拆分为slog;

6、修改logflush函数,根据slog头部信息,将所述slog转发到对应segment所在存储节点;

7、新增从存储节点根据指定lsn范围拉取slog的接口,并通过xlogreaderallocate注册以替换原有读取本地xlog文件的逻辑;

8、修改xlogdecodenextrecord函数,根据所述slog头部信息和资源管理器中xlog类型调用对应的重组接口,将所述slog重新组合为xlog。

9、进一步地,上述一种wal日志的拆分和重组的方法中,xlog中字段的定义如下:

10、xlogrecord:固定长度的头部信息;

11、block header数组:1条xlog可能包含多个block的修改操作,每个block包含一个头部信息;

12、block data数组:对应多个block的数据;

13、main header:xlog除了包含多个block,还可能包含一些其它数据,称为maintrunk,该字段是main trunk的头部信息;

14、main data:main trunk的数据。

15、进一步地,上述一种wal日志的拆分和重组的方法中,xlog插入log_buffer前拆分为slog,包括:

16、将其包含的多个block data数组按所属segment进行分组,针对每个segment重新生成一个xlog;

17、在重新生成xlog的头部vc c增加slog header打包成slog。

18、进一步地,上述一种wal日志的拆分和重组的方法中,slog header中包含了segment处理slog时需要的信息,

19、所述信息包括:

20、xlog lsn:当前slog对应原xlog的lsn,同一个xlog拆分的多个slog的xlog lsn值相同;

21、segment id:标识slog的目标segment;

22、slog id:同一个xlog拆分的多条slog的id从0开始单条递增。

23、进一步地,上述一种wal日志的拆分和重组的方法,还包括:根据xlog中main data和block data修改的关系对main data进一步拆分。

24、进一步地,上述一种wal日志的拆分和重组的方法,还包括:修改后的数据并没有放置到xlog的block data中,而是放置在xlog的main data中;

25、将main data转为block data进行处理。

26、进一步地,上述一种wal日志的拆分和重组的方法,还包括:

27、在资源管理器中增加xlog类型,所述增加的xlog类型用于在重组xlog时,对于与事务一致性无关的文件对应的日志,不进行重组。

28、本发明的第二方面,提出了一种wal日志的拆分和重组的装置,包括:

29、管理模块:用于通过资源管理器管理postgresql中不同类型的xlog;

30、梳理模块:用于梳理资源管理器中所有类型的xlog,实现xlog的拆分和重组接口;

31、拆分模块:用于修改xlogrecordassemble函数,根据资源管理器中xlog的类型调用对应的拆分接口,实现xlog插入log_buffer前拆分为slog;

32、转发模块:用于修改logflush函数,根据slog头部信息,将所述slog转发到对应segment所在存储节点;

33、注册模块:用于新增从存储节点根据指定lsn范围拉取slog的接口,并通过xlogreaderallocate注册以替换原有读取本地xlog文件的逻辑;

34、重新组合模块:用于修改xlogdecodenextrecord函数,根据slog头部信息和资源管理器中xlog类型调用对应的重组接口,将所述slog重新组合为xlog。

35、本发明的第三方面,还提出了一种电子设备,包括:处理器和存储器;

36、所述处理器通过调用所述存储器存储的程序或指令,用于执行如上所述任一项所述一种wal日志的拆分和重组的方法。

37、本发明的第四方面,还提出了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如上所述任一项所述一种wal日志的拆分和重组的方法。

38、本发明的有益效果如下:本发明基于postgresql原有xlog拆分为slog的设计,最大程度的保留了xlog的原始格式,使得对原有的生成日志和重做日志相关逻辑的改动较小,基于slog完全重组还原xlog的设计,可实现对社区相关生态工具的100%兼容,基于不同资源管理器rmgr下不同xlog类型单独实现不同拆分方案的设计,使得日志拆分和重组的修改点集中在xlog相关的有限几个函数的设计,可最大程度减少对周边代码的侵入性。

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