如何“定时/时时同步 mssql mysql postgresql 数据到统一的表中”

2022-09-27 21:48:02 +08:00
 cxzlhr

现有 mssql mysql postgresql 三种数据库,想将其中的几张表按统一格式存储到统一的数据库( mysql postgresql 未定)的某张表中,

具体需求:想将门禁记录、考勤记录、消费机的记录收集起来做考勤,所以原表中数据只有新增,不存在修改情况

暂时能想到的方案有 1 、定时循环同步,如 1 小时或 5 分钟,将这间隔的几分钟数据读出来,循环写入新表中 但可能的风险如果同步错误或者网络错误可能这次没成功,数据这五分钟数据就没了, 2 、改进方案 1,通过做唯一标识,每次同步前先查询一次 ID 或者最后一次的时间,将新数据同步过来 不知各位同学有没有更好的办法,或者我面要注意什么的吗?

1102 次点击
所在节点    数据库
9 条回复
yeqizhang
2022-09-27 21:56:07 +08:00
另外用一张表记录一下对每个表的最后一次的数据的时间,或者 id 是数值的话也存一下
lithiumii
2022-09-27 22:21:20 +08:00
如果每个表都有自增 ID 的话最简单了吧,新表加个字段,每次同步前查一下上次同步到哪里了,然后语句里加个 WHERE ID > 就行。都用不上多数据库同步的工具。
liprais
2022-09-27 22:21:59 +08:00
cdc
dem0ns
2022-09-27 22:23:20 +08:00
写个脚本一直刷新同步,简单粗暴
night98
2022-09-27 22:32:18 +08:00
cancel DataX 随便选一个
bootvue
2022-09-27 22:46:04 +08:00
datax
bthulu
2022-09-28 08:06:59 +08:00
这个我做过, 如果是 mysql 的话, 直接模拟 mysql 从服务器订阅 binlog, 解析 binlong 拿到每行记录的操作后数据, 再根据目标库生成对应的增删改语句.
如果是 oracle 的话, 可以用 oracle 自带的数据挖掘查询 oracle 日志. 不过 oracle 日志中已提交和未提交是混在一起的, 如果指定只查已提交日志, 而某个家伙开了个事务, 然后过了几个小时甚至更久也没关闭这个事务, 就会造成 oracle 将这几个小时内的所有日志都加载到内存中然后就爆炸了. 要么就不指定查提交还是不提交日志, 一股脑查出来推到消息队列, 再从消息队列里碰到一个提交点就往前回溯把相关数据捞出来. 总之比 mysql 复杂很多倍.
changdy
2022-09-28 08:18:03 +08:00
cdc ,
flink cdc
datax 当然也可以 ,不过要做好 时间戳
cxzlhr
2022-09-28 20:57:38 +08:00
确实如各位所说,好像这东西确实不需要太复杂的东西,暴力去读取,现在考勤使用 postgresql 准备使用 jsonb 来把原始记录存一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX