KFS数据同步系统中KES同步数据底层过滤
关键字:
Kingbase FlySync、KES、数据同步、底层过滤、人大金仓
关于KES同步数据的底层过滤
KFS系统replicator模块支持添加过滤器,对数据库中的某些表进行过滤,从而避免同步某些不需要的表。当KFS对于源端KES数据的抽取不进行底层过滤时,同步程序会默认将所有源端数据读取出来并生成KUFL,在KUFL文件中通过匹配表名过滤掉不需要同步的表,因此源端数据库中的一条数据只有经过了解析、翻译等一系列步骤后,才会被KFS的过滤器识别和过滤,这就导致本身不同步的表也进行了无用的翻译等步骤,导致有限的资源做了无用功,造成很大的资源浪费,影响同步性能。KFS底层过滤可以提供方案在数据进行解析、翻译前就将其识别过滤掉,可以有效的节约资源,提供系统性能。
KFS底层过滤原理
当前增量数据的产生过程大致为以下几步:
1.从原始的WAL日志读取出来
2.初始化逻辑解析上下文(期间回调插件初始化方法)
3.获取数据的操作类型,进行第一步解码decodeupdate、decodeinsert、decodedelete
4.过滤不属于指定数据库的数据
5.过滤标记originid的数据(回调decoderbuf插件的filter)
6.读取到提交操作,进行decodecommit(回调decoderbuf插件的decode_change)
7.decode_change中进行数据的翻译,元信息的获取等一系列操作。
底层过滤是在初始化时传入正则表达式,来指定要同步的表名,在事务提交时,进行翻译前,通过表名匹配正则,将不需同步的数据过滤掉,同时将该数据对应的表的oid存入list中,形成oid的黑名单,在步骤5中,通过判断list(黑名单)中是否包含当前数据所属表的oid,来进行过滤。
KFS底层过滤使用方法
- 在static文件中配置tablePatterns
在KES数据库作为源端数据库时,可以通过在配置文件中开启底层过滤参数lowLevelFilter,将lowLevelFilter置为true。同时,可以将需要过滤的表以模式名.表名的形式配置在tablePatterns参数中,多张表之间可以用“,”隔开。此外底层过滤的使用还应该与replicate过滤器的使用有所区分,在开启底层过滤的条件下,如果再开启replicate过滤器,需要避免在tablePatterns中设置的白名单表会被replicate过滤器过滤。
- 单独配置tablePatterns
源端KESV8支持tablePattern参数可以在static文件里配置或者单独配置。tablePattern参数单独配置功能生效,前提是开启底层过滤,lowlevelFilter=true。开启底层过滤后,在tablePatterns.csv文件中单独配置的tablePattern值优先级会高于static文件中配置的值,系统首先会检查tablePatterns.csv文件中的值,如果存在则将配置值赋给tablePattern;如果不存在,则使用static文件中配置的值,static文件中默认配置*.*。
注:
1、 tablePatterns.csv和static文件中如果同时存在配置值,则取tablePatterns.csv中的值,不会取并集。
2、 tablePatterns.csv文件配置规则,见文件内注释。




