异地多活三中心,PG数据核对如何进行数据核对,保障最终数据一致性?

背景信息:单位内重要系统,为了保障系统的高可用,按照异地多活三机房方式建设。每个机房均承接全量的业务数据。各机房都是主机房,均有能力提供写数据操作,没有冷备机房。数据库使用的是PG数据库,版本14.7。 机房的维护管理人员 不允许开启逻辑复制。 所以目前数据同步的方式...显示全部

背景信息:
单位内重要系统,为了保障系统的高可用,按照异地多活三机房方式建设。每个机房均承接全量的业务数据。各机房都是主机房,均有能力提供写数据操作,没有冷备机房。
数据库使用的是PG数据库,版本14.7。 机房的维护管理人员 不允许开启逻辑复制。 所以目前数据同步的方式,目前采用的方式是,所有的数据维护交易都在一个机房数据库写入,然后用双写的方式,写入消息队列后,发送到另外两个机房,另外两个机房的应用程序,消费消息,调用应用程序,更新入本机房的数据库。
问题: 消息机制 无法保障所有的对等中心消费者都是消费成功和写数据库成功,所以需要一个数据核对的功能。
想咨询下大家有无好的 占用资源相对可控的方式进行数据核对的。 对比DUMP和COPY出文件基本没有可行性,应用使用容器化部署,数据库内数据量较大,单机房65套数据库,超20亿以上产品和客户信息。

收起
参与6

查看其它 1 个回答cnblockchains的回答

cnblockchainscnblockchains其它上交所技术

可以试试checksum的函数
创建语句
create function checksum_row(bigint, text) returns bigint
as 'select int8pl($1, hashtext($2))' language sql;
create aggregate checksum(text)
(
sfunc = checksum_row,
stype = bigint,
initcond = 0,
combinefunc = int8pl
);
使用方式
select checksum(a::text) from 表名 a;
select checksum(列名::text) from 表名;
这可以就可以方便的进行全量,增量的数据比对了

证券 · 2024-02-26
浏览322

回答者

cnblockchains
其它上交所技术

cnblockchains 最近回答过的问题

回答状态

  • 发布时间:2024-02-26
  • 关注会员:3 人
  • 回答浏览:322
  • X社区推广