前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >业务表定义(在源和目标中定义一致的数据库)

业务表定义(在源和目标中定义一致的数据库)

作者头像
用户1637609
发布2022-05-11 08:42:26
1.1K0
发布2022-05-11 08:42:26
举报
文章被收录于专栏:马洪彪马洪彪

业务需求

核酸采样登记数据分布在多个数据库中(减轻单数据库并发写入压力,按用户区域、终端等进行了划分),需要将分散的数据汇总起来后续做统一业务处理。

解决方案

使用mysql的FEDERATED,类似Oracle的dblink等,在汇总库中建立对各源库表的映射表,然后在汇总库中操作这些映射表,数据汇总。

实现步骤

业务表定义(在源和目标中定义一致的数据库)

代码语言:javascript
复制
CREATE TABLE `sample_record` (
  `ID` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键',
  `CREATE_BY` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间(采样时间)',
  `UPDATE_BY` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',
  `SYS_ORG_CODE` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属部门',
  `SAMPLE_TUBE` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '样品管编号',
  `NAME` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
  `CARD_TYPE` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '证件类型',
  `CARD_NO` varchar(25) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '证件号码',
  `BIRTHDAY` datetime DEFAULT NULL COMMENT '出生年月',
  `SEX` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别',
  `ADDRESS` text COLLATE utf8mb4_unicode_ci COMMENT '联系地址',
  `TELEPHONE` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系电话',
  PRIMARY KEY (`ID`) USING BTREE,
  KEY `IX_ASR_CREATE_TIME2` (`CREATE_TIME`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='样品采集记录';

源表在目标库中的映射表定义

在汇总数据库中建立各源数据库表的映射,映射为xxx_a\xxx_b\xxx_c等。 关键为以下存储引擎的定义,connection指定了源数据库及源表。 ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4 CONNECTION='mysql://root:MYSQL57@10.0.0.6:3306/testdb/sample_record';

代码语言:javascript
复制
CREATE TABLE `sample_record_a` (
  `ID` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键',
  `CREATE_BY` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间(采样时间)',
  `UPDATE_BY` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',
  `SYS_ORG_CODE` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属部门',
  `SAMPLE_TUBE` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '样品管编号',
  `NAME` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
  `CARD_TYPE` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '证件类型',
  `CARD_NO` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '证件号码',
  `BIRTHDAY` datetime DEFAULT NULL COMMENT '出生年月',
  `SEX` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别',
  `ADDRESS` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '联系地址',
  `TELEPHONE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系电话'
) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4 CONNECTION='mysql://root:MYSQL57@10.0.0.6:3306/testdb/sample_record';

使用存储过程实现数据的汇总

在汇总库中定义存储过程,按时间段抽取各源表的数据写入到目标表中,并删除源表中数据。

代码语言:javascript
复制
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `extractApp1`()
begin
	# 获取时间戳
	set @timePoint = now() - interval 10 minute;
	# 查询该时间点之前上传的数据汇总到web库中
	insert into sample_record(ID, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, SYS_ORG_CODE, SAMPLE_TUBE, NAME, CARD_TYPE, CARD_NO, BIRTHDAY, SEX, ADDRESS, TELEPHONE) 
	select replace(uuid(),"-","") ID, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, SYS_ORG_CODE, SAMPLE_TUBE, NAME, CARD_TYPE, CARD_NO, BIRTHDAY, SEX, ADDRESS, TELEPHONE
	from sample_record_a asr
	where asr.create_time <= @timePoint;
	# 删除已汇总来的数据
	delete from sample_record_a  where CREATE_TIME <= @timePoint;
  end$$
DELIMITER ;

使用event定时执行汇总,或使用应用层quartz定时调用存储过程

使用定时器定时调用存储过程来汇总数据。

其他

可以使用kettle、datax甚至自定义业务程序实现从源头数据库中查询数据并写入目标数据库中。 同构数据库或mysql等可使用binlog的方式来同步数据库。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业务需求
  • 解决方案
  • 实现步骤
    • 业务表定义(在源和目标中定义一致的数据库)
      • 源表在目标库中的映射表定义
        • 使用存储过程实现数据的汇总
          • 使用event定时执行汇总,或使用应用层quartz定时调用存储过程
          • 其他
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档