如何通过外部表做数据一致性检查和配平

摘要:
为sa服务器uim_1122选项创建用户映射(用户“sa”,导入代理表#您也可以手动创建importforeignschemadb_uimlimito(t_aty_user,

背景

随着微服务和分布式架构的兴起及用户对数据高可用的重视。现在系统中的数据会通过程序定时同步、抽数工具、复制工具等在多个数据库中存在多份。但因为程序异常、网络异常、数据异常等各种原因,会出现数据不一致的情况。如何能简单快速检测出数据不一致并且配平呢?本文通过PostgreSQL的fdw机制,介绍一种简单的配平方法。

环境准备

  • 源数据库

    • IP:xx.xx.12.11
    • PORT:5432
    • 版本:PostgreSQL 9.5.5
  • 目标库

    • IP:xx.xx.12.10
    • PORT:5432
    • 版本:PostgreSQL 9.5.5

创建代理表

  • 第一步,创建远程服务
#假设数据库已经安装了postgres_fdw,未安装可以通过
create server uim_1122 foreign data wrapper postgres_fdw options (host 'xx.xx.12.11',port '5432' ,dbname 'taap');
  • 第二步,创建人员映射
create user mapping for sa server uim_1122 options (user 'sa',password '123456')
  • 第三步,创建代理模式
create schema  db_uim_1122;
  • 第四步,导入被代理的表
# 也可以通过create foregin table 手动创建
import foreign schema db_uim limit to (t_aty_user,t_aty_corp) from  server uim_1122 into db_uim_1122;

一致性检查

  • 检查目标库缺失数据
select u1.c_id from db_uim_1122.t_aty_user u1 where not exists (select * from db_uim.t_aty_user u2 where u1.c_id = u2.c_id);

   c_id    
-----------
 219545603
 158072921
(2 rows)
  • 检查目标库多数据
select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id);

 c_id 
------
(0 rows)
  • 检查某些字段是否一致
# 可以手动写SQL检查
# 例如,检查c_id,c_name,c_passoword 不一致:
select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id and u1.c_name = u2.c_name and u1.c_password = u2.c_password);

数据配平

  • 配平缺失数据
insert into db_uim.t_aty_user select u1.* from db_uim_1122.t_aty_user u1 where not exists (select * from db_uim.t_aty_user u2 where u1.c_id = u2.c_id);
  • 配平多余数据
delete from db_uim.t_aty_user where c_id in (select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id))
  • 矫正不一致数据
可以依据项目情况,写矫正SQL

总结

对于一些简单的情况,如数据量不是很大,要配平的表不是很多,可以通过数据库自带的外部表机制检测,如PostgreSQL的fdw,Sybase和SqlServer的代理表、Oracle的dblink、MySQL的federated 。当然,最好的方式是通过我司的“数据配平平台”实现!

免责声明:文章转载自《如何通过外部表做数据一致性检查和配平》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaWeb——相对路径和绝对路径PIE-SDK For C++打开栅格数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Flume简介及安装

Hadoop业务的大致开发流程以及Flume在业务中的地位: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步,从而引出我们本文的主角—Flume。 Flume概念 flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到图中的HDFS,简单来...

ZEOSDBO-7安装

zeosdbo是一套免费开源的Delphi数据库连接组件,可连接mssql、mysql、sybase、oracle、firebird、sqlite、postgresql等多种数据库。调用方法简单。 连接MySql数据库库的方法: 添加Zconnection组件,设置如下内容: Database:要连接的数据库名称; Hostname:MySQl数据库所在的...

mysql——mysqldump命令导出数据库以及导出表的各种导出情况(参数大全)

导出某个数据库下面所有表的结构: mysqldump -u root -p123 -d see > C:\Users\del\Desktop\db.sql 导出某个数据库下所有表结构及表数据(不加-d): mysqldump -u root -p123 see > C:\Users\del\Desktop\dbsy.sql ---------...

PostGIS数据库导入SHP数据

1 - 通过QGIS数据库管理工具将shp导入到postgis数据库 选择数据源中postgis对应的数据库schema(架构),然后选择导入图层或文件,弹出导入矢量图层面板。 关于选项的说明: 1) 源空间参考与目标空间参考无特殊需要,应当与数据源保持一致 2) 编码默认即可,不进行选择,如选择编码UTF-8,会导致中文乱码。 3) 需要注意源shp...

SQL Compare数据库版本比较工具

Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程 Red Gate系列之三 SQL Server 开发利器 SQL...

Element-ui局部添加loading效果

项目:Vue+element-ui 在一个表格数据加载时,因为需要连接其它东西,所以后台接口返回数据需要较长时间,因此添加局部Loading效果,增加用户体验度, 最开始使用下面代码,直接放到<el-table>中,测试时遇到问题 element-loading-spinner="el-icon-loading" :element-loadin...