V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Morty231
V2EX  ›  数据库

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

  •  
  •   Morty231 · 36 天前 · 1769 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    总得说要么去读数据库的存储日志,要么自己维护一套日志表来解决原始表里没有更新时间的问题
    bootvue
        5
    bootvue  
       36 天前
    cloud canal 可以免费用
    sagaxu
        6
    sagaxu  
       36 天前   ❤️ 1
    才千万级,每秒处理 10 万,几分钟就比对完了。

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

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

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

    然后项目跑起来,发现对方系统会偷偷变更以前的数据,1 个月会出现几条到十几条。我们的应对措施是先根据日期汇总前 90 天的金额和笔数与我们数据库做比较,如果不相同就同步整天的所有记录。
    buyerhou
        8
    buyerhou  
       36 天前
    使用 otter 服务,可以进行 mysql 数据库之间的同步,采用了这个方案的话,请回复下
    Foxkeh
        9
    Foxkeh  
       36 天前 via Android
    主从备份
    ala2008
        10
    ala2008  
       35 天前
    只做一次还是持续做,持续的那就是主从,一次的就更简单了
    qingbu
        11
    qingbu  
       35 天前
    我写过全量、增量的 DTS ,如果是从 MySQL 到 MySQL 的话,有没有时间戳不重要,只要有主键 or 唯一键就能实现无损+不停机迁移。大致思路是先记录一个 gtid 或者 binlog position 。然后开始全量数据同步,根据主键确定一个全量边界。然后用 binlog 进行增量同步。
    qingbu
        12
    qingbu  
       35 天前
    @qingbu 数据校验的话没有时间字段确实比较麻烦,可以分段计算 crc32 ,如果段内出现不一致可以二分找到不一致的具体行,输出出来,然后对具体的行进行二次校验。具体可以参考 TiDB 开源的校验工具
    realpg
        13
    realpg  
       6 天前
    刚搞完一个相同需求
    直接把 MYSQL 集群化 然后额外多创建个只读副本...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:13 · PVG 06:13 · LAX 15:13 · JFK 18:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.