System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于日志的拆分和重组,尤其涉及一种wal日志的拆分和重组的方法、装置、电子设备和存储介质。
技术介绍
1、postgresql等传统的关系型数据库受限于单台物理服务器的性能极限,需要通过主备wal日志复制的方式添加备机以支持读性能的扩展。同时高可用架构通常也基于备机实现。但传统主备复制模式具有以下难以解决的缺点:添加备机时需要拷贝全量数据,时效性较差;备机的数据和主机完全一样,存储上造成浪费;这些缺点难以解决的根源在于传统关系型数据库存算一体的架构。近年头部互联网厂商纷纷推出各自的基于存算分离架构的云原生数据库实现,其实现思路都可以总结为:分离计算和存储,将存储放到分布式系统中;实现主备实例共享一份存储;通过这样的设计,在完美解决传统主备架构缺点的同时,也获得了极致的弹性能力。该思路的核心技术点是如何实现主备实例共享同一份存储。传统主备架构下,主备实例维护各自的数据,更新操作由主实例通过wal日志同步到备实例,备实例接收到wal日志后再重做更新本地数据。因此从某个时间点看,主备实例的数据是不同的。对于这个问题,业界主流的解决思路是使用wal日志在基线数据的基础上实现数据多版本读,以支持备机对老版本数据的访问。这里的关键都是控制wal日志的重做进度,使得数据版本保持在较老的状态。但具体到实现上,不同厂商分成了2个不同的技术路线:将wal日志的重做逻辑下沉到存储层,由存储层控制重做进度;wal日志回放还是由主实例完成,由主实例控制重做进度;对比方案2,方案1的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、本专利技术的第三方面,还提出了一种本文档来自技高网...
【技术保护点】
1.一种WAL日志的拆分和重组的方法,其特征在于,包括:
2.根据权利要求1所述的一种WAL日志的拆分和重组的方法,其特征在于,所述XLog中字段的定义如下:
3.根据权利要求1所述的一种WAL日志的拆分和重组的方法,其特征在于,所述XLog插入LOG_BUFFER前拆分为SLog,包括:
4.根据权利要求3所述的一种WAL日志的拆分和重组的方法,其特征在于,所述SLogHeader中包含了Segment处理SLog时需要的信息,所述信息包括:
5.根据权利要求3所述的一种WAL日志的拆分和重组的方法,其特征在于,所述方法还包括:根据XLog中main data和block data修改的关系对main data进一步拆分。
6.根据权利要求3所述的一种WAL日志的拆分和重组的方法,其特征在于,所述方法还包括:
7.根据权利要求1所述的一种WAL日志的拆分和重组的方法,其特征在于,所述方法还包括:
8.一种WAL日志的拆分和重组的装置,其特征在于,包括:
9.一种电子设备,其特征在于,
10.一种计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至7任一项所述一种WAL日志的拆分和重组的方法。
...【技术特征摘要】
1.一种wal日志的拆分和重组的方法,其特征在于,包括:
2.根据权利要求1所述的一种wal日志的拆分和重组的方法,其特征在于,所述xlog中字段的定义如下:
3.根据权利要求1所述的一种wal日志的拆分和重组的方法,其特征在于,所述xlog插入log_buffer前拆分为slog,包括:
4.根据权利要求3所述的一种wal日志的拆分和重组的方法,其特征在于,所述slogheader中包含了segment处理slog时需要的信息,所述信息包括:
5.根据权利要求3所述的一种wal日志的拆分和重组的方法,其特征在于,所述方法还包括:根据xlog中ma...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。