现有 mssql mysql postgresql 三种数据库,想将其中的几张表按统一格式存储到统一的数据库( mysql postgresql 未定)的某张表中,
具体需求:想将门禁记录、考勤记录、消费机的记录收集起来做考勤,所以原表中数据只有新增,不存在修改情况
暂时能想到的方案有 1 、定时循环同步,如 1 小时或 5 分钟,将这间隔的几分钟数据读出来,循环写入新表中 但可能的风险如果同步错误或者网络错误可能这次没成功,数据这五分钟数据就没了, 2 、改进方案 1,通过做唯一标识,每次同步前先查询一次 ID 或者最后一次的时间,将新数据同步过来 不知各位同学有没有更好的办法,或者我面要注意什么的吗?
1
yeqizhang 2022-09-27 21:56:07 +08:00 via Android
另外用一张表记录一下对每个表的最后一次的数据的时间,或者 id 是数值的话也存一下
|
2
lithiumii 2022-09-27 22:21:20 +08:00
如果每个表都有自增 ID 的话最简单了吧,新表加个字段,每次同步前查一下上次同步到哪里了,然后语句里加个 WHERE ID > 就行。都用不上多数据库同步的工具。
|
3
liprais 2022-09-27 22:21:59 +08:00 via iPhone
cdc
|
4
dem0ns 2022-09-27 22:23:20 +08:00
写个脚本一直刷新同步,简单粗暴
|
5
night98 2022-09-27 22:32:18 +08:00
cancel DataX 随便选一个
|
6
bootvue 2022-09-27 22:46:04 +08:00
datax
|
7
bthulu 2022-09-28 08:06:59 +08:00
这个我做过, 如果是 mysql 的话, 直接模拟 mysql 从服务器订阅 binlog, 解析 binlong 拿到每行记录的操作后数据, 再根据目标库生成对应的增删改语句.
如果是 oracle 的话, 可以用 oracle 自带的数据挖掘查询 oracle 日志. 不过 oracle 日志中已提交和未提交是混在一起的, 如果指定只查已提交日志, 而某个家伙开了个事务, 然后过了几个小时甚至更久也没关闭这个事务, 就会造成 oracle 将这几个小时内的所有日志都加载到内存中然后就爆炸了. 要么就不指定查提交还是不提交日志, 一股脑查出来推到消息队列, 再从消息队列里碰到一个提交点就往前回溯把相关数据捞出来. 总之比 mysql 复杂很多倍. |
8
changdy 2022-09-28 08:18:03 +08:00
cdc ,
flink cdc datax 当然也可以 ,不过要做好 时间戳 |
9
cxzlhr OP 确实如各位所说,好像这东西确实不需要太复杂的东西,暴力去读取,现在考勤使用 postgresql 准备使用 jsonb 来把原始记录存一下
|