一、功能简介
为了解决ping-pong的问题,需要增设数据源筛选的功能,在接收到DML请求时,对逻辑层实际需要replay的部分进行鉴别,即可以识别下图中,蓝色和红色箭头的请求是否由为重复发起,以实现数据一致,避免进入ping-pong循环。
|
|
|
|
|
|
|
|
|
2.系统准备和数据库安装
|
|
|
|
新建数据库
为了测试效果更直观,以IP地址为标记创建了测试库:
create database db127;br
128:
create database db128;br
创建测试表
db127和db128分别创建相同结构测试表:
create table duptest1 (id int primary key,code int,mm text);br
db127和db128分别创建发布
发布的动作可以是insert、update、delete和truncate,我们使用默认的配置,即全部包括。
|
create publication pub_127_1 for table duptest1;
128:
create publication pub_128_1 for table duptest1;
查看两个数据库的发布:
127,128分别创建到对端的订阅
这里需要注意的是,目前dbrep_dual双向同步是对“增量数据”进行同步,所以在订阅创建的时候需要使用”copy_data=false”参数,该参数默认是true,即单向订阅的时候默认对基表数据进行拷贝。
create subscription sub_128_1 connection 'host=192.168.70.127 port=5432 user=highgo password=Test@123 dbname=db127' publication pub_127_1 with(copy_data=false);
127:
create subscription sub_127_1 connection 'host=192.168.70.128 port=5432 user=highgo password=Test@123 dbname=db128' publication pub_128_1 with(copy_data=false);
创建完成后查看订阅情况:
select * from pg_subscription;
insert测试
insert into duptest1 values (1,110,’Police’);
insert into duptest1 values (2,120,’First-adi’);
128:
insert into duptest1 values (3,122,’Traffic-accident’);
insert into duptest1 values (4,12123,’Traffic-service’);
可以看到127和128的插入的数据已经同步。
Update测试
127上更新一条数据:
update duptest1 set code = 95518,mm = 'PICC' where id = 4;
128同步了127更新的数据
update duptest1 set code = 95511,mm = 'PINGAN' where id = 4;
数据update后,127和128的数据已经同步
Delete测试
127上删除数据:
delete from duptest1 where code = 122;
128同步了删除操作
delete from duptest1 where code = 120;
数据delete后,127和128的数据已经同步。
truncate测试
truncate操作同样会在128上同步操作
drop subscription sub_127_1;
drop publication pub_127_1;
drop table duptest1;
drop subscription sub_128_1;
drop publication pub_128_1;
drop table duptest1;
限制条件
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!