qq1104682401 2019-08-30 11:02 采纳率: 100%
浏览 4337
已采纳

JAVA 两个数据库 的某个表数据同步

字服务器数据库数据变动时

实时上传和更新至主机数据库

例如点菜系统的同步方式

两个电脑 把A电脑的数据库的表C数据变动 同步至B电脑的数据库表C
其中 A电脑的表C数据 和B电脑的表C数据内容不一样 结构一样
例:A电脑表C 只有本机数据 B电脑表C 有A电脑表C的数据和B电脑表C的数据

  • 写回答

8条回答 默认 最新

  • No_Bug_ 2019-08-31 15:47
    关注

    三种方案:
    1.数据库触发器
    在A电脑C表中建立触发器,然后将C表的增删改记录下来,放到一个中间表中,中间表中记录动的是哪个表,什么时间,id之类的数据,
    然后写个跑批服务,定时去拉取中间表数据进行处理,新增到B电脑C表中。这种方案,数据可能同步有延迟,而且数据量大的时候,延迟更长
    适合改动量不是太大的表,比如学校表,区域表等。

    CREATE TRIGGER `test_insert` AFTER INSERT ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', new.id,1);
    end;
    
    CREATE TRIGGER `test_update` AFTER UPDATE ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', new.id,2);
    end;
    
    CREATE TRIGGER `test_delete` AFTER DELETE ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', old.id,3);
    end;
    

    图片说明

    2.mysql的binlog
    mysql主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的
    这个可以具体调研下,我没搞过。但是这个大部分的同步数据都是用的binlog,当改动这张表的服务很多时,没法去每个服务里面写代码就可以使用触发器或者binlog,只关注表的改动就行了。这个可以使用消息来处理,扫描一行发个消息,然后开发服务来处理这些消息。

    3.在服务上动手脚,在改动C表的代码之前加代码,可以将修改记录存入数据库,也可以直接发消息。

    说到底,要想同步,要么用主从备份,或者第三方的同步方案。如果自己写的话,用触发器工作量最小,直接写个跑批服务就行了,剩下的可能都要写很多服务。如果对数据要求很严,而且数据变动很频繁建议使用binlog那个方案

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵