先说下业务背景,项目中白名单功能重构。这就涉及到老数据同步问题

表结构

CREATE TABLE `nw_white_list` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`sub_user_id` int(11) DEFAULT NULL,
`platform` tinyint(4) NOT NULL COMMENT '10: 淘宝/天猫 20: 京东',
`channel` tinyint(4) NOT NULL COMMENT '10:哇聊 20: 手动录入 30:批量导入',
`buyer_nick` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '旺旺或咚咚',
`status` tinyint(4) NOT NULL COMMENT '10: 正常,-1 删除',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id_platform` (`user_id`,`platform`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

同步问题

  • 批量插入
  • 需要保持user_idplatformbuyer_nick 唯一
  • status 状态标示(软删)
  • 如果存在则更新,如果不存在则新增

解决方案

  1. 方案一:REPLACE
   REPLACE INTO nw_white_list (user_id, sub_user_id, platform, channel, status, buyer_nick, created_at, updated_at)
VALUES {$insertStr}

这样的话就需要创建user_idplatformbuyer_nickstatus 四个字段的唯一索引

  1. 方案二:INSERT … ON DUPLICATE KEY UPDATE
 INSERT INTO nw_white_list (user_id, sub_user_id, platform, channel, status, buyer_nick, created_at, updated_at)
VALUES {$insertStr} ON DUPLICATE KEY UPDATE updated_at = now()

这种方法也需要创建user_idplatformbuyer_nickstatus 四个字段的唯一索引

  1. 方法三:先通过user_idplatformbuyer_nick批量查询,删除已经存在的记录,然后批量插入

选择

因为设计到软删问题,如果设置user_idplatformbuyer_nickstatus四个字段的唯一索引,那每次删除就要检查之前是否有删除的记录。最后选用了第三种方案。

一次 MySQL 老数据同步相关推荐

  1. mysql goldengate_Goldengate完成Mysql到Mysql的数据同步

    文档参考地址:http://blog.csdn.net/u010587433/article/details/49305019 需求: 使用Goldengate完成Mysql到Mysql的数据同步,源 ...

  2. MySQL 到 MySQL 实时数据同步实操分享

    摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.最近了解到一款实时数据同步工具 Tapdata C ...

  3. ES和MYSQL实现数据同步

    elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步. 1 ...

  4. mysql otter 数据同步_MySQL数据同步之otter

    一.otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据. 用途: mysql/oracle互相同步 中间表/行记录同步 二.原理及架构图 otter整体模块 manager ...

  5. mysql不同实例数据同步_两台Mysql数据库数据同步实现实例

    做开发的时候要做Mysql的数据库同步,两台安装一样的系统,都是FreeBSD5.4,安装了Apache 2.0.55和PHP 4.4.0,Mysql的版本是4.1.15,都是目前最新的版本. 1. ...

  6. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

  7. 减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素:  1. 网络延迟 2. master负载 3. slave负载 一般的做法 ...

  8. elastic search与mysql的数据同步

    go-mysql-elasticsearch插件简介 go-mysql-elasticsearch是用于同步mysql数据到ES集群的一个开源工具,项目github地址: https://github ...

  9. 达梦数据库:mysql -dm数据同步dmhs工具搭建

    达梦技术社区: https://eco.dameng.com 注意 Dmhs对mysql的 支持:表的ddl 操作,注释,索引,数据同步,支持装载和增量同步: 对于其它对象如触发器,函数,存储过程,不 ...

最新文章

  1. js实现撤销恢复_我们常用的撤销和恢复功能,它们使用了什么设计模式实现吗?...
  2. Arrays.sort()源码分析
  3. 西瓜书学习记录-模型评估与选择(第二章)
  4. Angular jasmine TestBed.configureTestingModule的工作原理
  5. UOJ#454-[UER #8]打雪仗【通信题】
  6. 前端页面通过web3.eth.accounts无法获取账户信息
  7. 假如地球变成甜甜圈形状,世界会变成什么样子?
  8. php atlas,apache atlas是什么
  9. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
  10. js获取两个数组不同的元素并返回不同元素组成的数组,并对不同的元素添加一个新的属性
  11. PAT 乙级1014 福尔摩斯的约会(C语言)
  12. 计算机高特效吃鸡游戏主机配置单,畅玩主流游戏吃鸡LOL组装电脑配置清单
  13. vrep中视觉传感器(Vision sensor)
  14. 软件工程师中的软件维护概述
  15. 大学生追女友花光学费露宿街头 4天偷396罐红牛
  16. 密西根州立大学计算机排名,密歇根州立大学MSU(Michigan State University)计算机科学Computer Science专业排名第91位(2021年THE世界大学商科排名)...
  17. 淘宝天猫x-sign算法
  18. #大创学习笔记#part1宫颈癌细胞图像分割——直方图最亮谷底阈值确定法提取细胞前景
  19. 【Guacamole中文文档】一、概述 —— 序言
  20. 配置ibatis操作数据库、需要的jar包

热门文章

  1. 处在“风口”的永太科技
  2. swing应用-简单记事本
  3. STM32F1和F4区别
  4. 企业级Docker虚拟化平台实战
  5. 【设计模式笔记】单例模式Singleton Pattern
  6. 梦幻花-东野圭吾读书笔记
  7. 读写EEE、FLASH关键点<1>(MC9S12XEP100RMV1)
  8. 如何解决word公式加编号以后字体自动缩小?
  9. 软件测试面试题:手工测试的局限性?
  10. GIS理论知识(二)之GIS标准、体系结构及平台软件