数据量千万级的,没有时间戳的数据表怎么做数据同步? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Morty231
V2EX    数据库

数据量千万级的,没有时间戳的数据表怎么做数据同步?

  •  
  •   Morty231 2024-08-14 14:44:15 +08:00 2394 次点击
    这是一个创建于 502 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教各位大佬,千万级的没有时间戳的数据表怎么做数据同步,一些细节:
    1 、一共有几百张表,没有办法要求源数据添加时间戳;
    2 、数据量很大无法做全量比对;
    3 、表里有唯一标识列,但是没有最后修改时间列,无法增量同步;
    4 、业务会在原表的记录上直接更新数据;

    14 条回复    2025-08-08 16:22:59 +08:00
    perfectlife
        1
    perfectlife  
       2024-08-14 14:48:18 +08:00
    数据同步一板也不是根据表中时间戳字段的吧,比如 mysql 用 binlog 日志,舍得花钱就 dts
    NoobNoob030
        2
    NoobNoob030  
       2024-08-14 14:50:26 +08:00
    如果是 mysql 可以考虑用 binlog 同步
    Plutooo
        3
    Plutooo  
       2024-08-14 15:45:29 +08:00   1
    CDC ,Debezium 、Flink CDC
    liuzhedash
        4
    liuzhedash  
       2024-08-14 15:46:54 +08:00   1
    思路 1:上一套类似 Oracle GoldenGate 的系统
    思路 2:给表加触发器和配套的日志表,记录那些记录被更新了,然后写一套代码去同步

    总得说要么去读数据库的存储日志,要么自己维护一套日志表来解决原始表里没有更新时间的问题
    bootvue
        5
    bootvue  
       2024-08-14 16:04:31 +08:00
    cloud canal 可以免费用
    sagaxu
        6
    sagaxu  
       2024-08-14 16:18:05 +08:00   1
    才千万级,每秒处理 10 万,几分钟就比对完了。

    如果实时性要求高,那就订阅更新行为,常用的有
    1. 触发器
    2. 中间件
    3. binlog
    4. 更新通知,如 pgsql 的 listen-notify
    yinmin
        7
    yinmin  
       2024-08-14 16:40:07 +08:00 via iPhone   1
    我以前用过 2 种方式,都是生产环境用的,供参考:

    1. 可以使用触发器 trigger ,将 insert 、update 、delete 的唯一标识记录到新一个新表 tblrecordlog 中,然后写一个同步程序根据 tblrecordlog 同步数据。

    2. 有一个项目,背景:只读对方数据库,对方不允许对他们的数据库做任何变更(甲方核心业务系统,没人肯背锅,没法用方案 1 )。需要将对方业务数据每天导入到我们的数据库里做数据分析。数据量大概是 10 万条/天,在开协调会的时候,对方信誓旦旦的承诺业务数据不会变更昨天及之前的数据。

    然后项目跑起来,发现对方系统会偷偷变更以前的数据,1 个月会出现几条到十几条。我们的应对措施是先根据日期汇总前 90 天的金额和笔数与我们数据库做比较,如果不相同就同步整天的所有记录。
    buyerhou
        8
    buyerhou  
       2024-08-14 17:06:51 +08:00
    使用 otter 服务,可以进行 mysql 数据库之间的同步,采用了这个方案的话,请回复下
    Foxkeh
        9
    Foxkeh  
       2024-08-14 21:45:27 +08:00 via Android
    主从备份
    ala2008
        10
    ala2008  
       2024-08-15 10:27:36 +08:00
    只做一次还是持续做,持续的那就是主从,一次的就更简单了
    qingbu
        11
    qingbu  
       2024-08-15 22:56:07 +08:00
    我写过全量、增量的 DTS ,如果是从 MySQL 到 MySQL 的话,有没有时间戳不重要,只要有主键 or 唯一键就能实现无损+不停机迁移。大致思路是先记录一个 gtid 或者 binlog position 。然后开始全量数据同步,根据主键确定一个全量边界。然后用 binlog 进行增量同步。
    qingbu
        12
    qingbu  
       2024-08-15 22:58:26 +08:00
    @qingbu 数据校验的话没有时间字段确实比较麻烦,可以分段计算 crc32 ,如果段内出现不一致可以二分找到不一致的具体行,输出出来,然后对具体的行进行二次校验。具体可以参考 TiDB 开源的校验工具
    realpg
        13
    realpg  
    PRO
       2024-09-13 12:22:07 +08:00
    刚搞完一个相同需求
    直接把 MYSQL 集群化 然后额外多创建个只读副本...
    Morty231
        14
    Morty231  
    OP
       143 天前
    感谢各位大佬的回复,反馈一下,最我们还是用了 Oracle GoldenGate 。
    我对于需求最开始没有描述清楚,我这边是一个长期+高实时性(秒级延迟)+不能更改源结构的 oracle 数据库的场景。综合对比方案之后就选 ogg 了,这个事情拖了好久,也是最近才上。
    但是用 ogg 方案的时候也遇到了一点麻烦,我们有部分表没有主键,导致 ogg 同步的时候出现了重复数据。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3308 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 11:09 PVG 19:09 LAX 03:09 JFK 06:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86