关键字:
KingbaseFlySync、KFS、同步程序、replicator、custompkey、flysync.ini
1. 功能描述
当数据库中有无主键的表时,KFS解析update、delete语句时生成的key值带的所有列,配置custompkey过滤器可以对无主键表指定解析key值生成KUFL。
2. 使用场景介绍
用于无主键表的同步场景中,通过增加过滤器的方式,可以指定解析key值生成KUFL,来达到能够尽可能的正常同步无主键的表。同时能够支持一些无主键表的复杂类型(如大对象类型,本不可以用作where条件)用作where条件,并可以提升无主键表查询速度从而提升性能。
3. 配置使用方式介绍
- 在源端flysync.ini文件中添加以下参数:
svc\_extractor\_filters=custompkey
property=replicator.filter.custompkey.definitionsFile=/home/kfs/flysync\_test/filters-config/custompkey.json
参数custompkey.definitionsFile可指定custompkey.json文件的路径。若不指定custompkey.json的路径,该文件存放在_${KFS安装目录}/ filters-config/custompkey.json_。
- custompkey.json文件配置有两种方法,一种为手动配置custompkey.json文件,另外一种为使用repkeyclean工具一键生成custompkey.json配置文件。
3.1 手动配置custompkey.json文件
custompkey.json文件配置格式如下:
{
“模式名1”:{
“表名1”:“列名1,列名2,...”,
“表名2”:“列名1,列名2,...”,
...
“表名n”:“列名1,列名2,...”
}
“模式名2”:{
“表名1”:“列名1,列名2,...”,
“表名2”:“列名1,列名2,...”,
...
“表名n”:“列名1,列名2,...”
}
...
“模式名n”:{
“表名1”:“列名1,列名2,...”,
“表名2”:“列名1,列名2,...”,
...
“表名n”:“列名1,列名2,...”
}
}
例如,指定dbo模式下的表test的ID列和A列为key值,此时custompkey.json文件如下:
{
“dbo”:
{
“test”: “ID,A”
}
}
3.2 利用repkeyclean生成custompkey.json文件
repkeyclean命令行工具可以一键生成custompkey.json配置文件。其主要参数如下:
| 参数名称 | 参数含义 |
|---|---|
| -dbtype | 数据库品牌类型,如KES、mysql、oracle |
| -host | 数据库所在机器的IP |
| -port | 数据库端口号 |
| -user | 数据库用户名 |
| -pass | 数据库用户密码 |
| -db | 数据库名称(oracle对应服务名称) |
| -pattern | 指定数据库模式或者表名,默认*.*(所有模式下所有表) |
如对KESV8的sourcedb数据库中test模式下的所有表无主键表过滤操作,则命令如下:
repkeyclean -dbtype kingbase8 -host 10.10.5.68 -port 54322 -user system -pass 123 -db sourcedb -pattern test.\*
执行该命令后则会自动生成custompkey.json文件。
4. 使用示例
4.1 前置条件
假设有两张无主键表test1和test2,其需要指定所有id列和a列作为key值解析。
4.2 操作步骤
- 部署源端KFS时,在flysync.ini文件中添加指定解析key值过滤(custompkey)。图1给出了flysync.ini的配置示例
图1 添加custompkey参数的flysync.ini文件示例
- custompkey.json配置示例:
图2 custompkey.json文件配置示例
- 参考《Kingbase FlySync 安装部署手册》完成安装部署
- 源端数据库创建表test1和test2。
create table dbo.test1(id int,a varchar(10),b datetime);
create table dbo.test2(id int,a varchar(10),b datetime);
insert into dbo.test1 values(1,’小明’,’9999-12-31 23:59:59.998’);
insert into dbo.test2 values(1,’小红’,’2018-10-24 11:30:28.007’);
update dbo.test1 set a=’小张’where id=1;
update dbo.test2 set a=’小王’where id=1;
4.3 结果展示
查看KUFL解析出的update语句:
图3 test1表update时KUFL解析值
图4 test2表update时KUFL解析值
从图3和图4的KUFL解析值可以看到,由于配置了custompkey参数,test1表和test2表执行update生成KUFL时指定了id列和a列作为key值解析,即过滤掉了test1表和test2表的b列值,成功实现了对无主键表指定key值生成KUFL。




