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

数据库挖掘:两个数据库增量同步实现方式讨论-求一个单表上百万数据同步方式的选择(类似根据医嘱实现统方)

  •  
  •   qile1 · 2016-03-30 22:53:26 +08:00 · 1040 次点击
    这是一个创建于 3161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,最近有个项目需要同步两个 SQL Server 数据库中的一个表,这表有 12000000 多行。像这种上千万行的数据,同步到另一个数据库是个头疼的问题。现在根据id查询速度比较快,根据时间过滤需要大约17秒多才可以查出数据。

    这个表会不定时更新,有个“索引 id ”字段,有个“执行时间”字段,新增数据“id”会 自动加一,更新的话“执行时间”字段会变为当前服务器执行时间。一般更新都是最近几天的数据库。

    在不动原来数据库的前提下(这导致无法使用触发器和数据库发布等功能同步)将此表同步到另一个数据库里面。 暂时想到的方法有两个:

    1 、 a :自己编写 python 脚本,设定几个初始变量到本地文本配置文件,其中包括同步时间,第一次运行判断同步数据时间,如果小于当前时间则同步最近三个月数据到本地数据库,如果大于当前日期,则同步当天数据到本地数据库,并修改配置文件里面的同步时间加 24 小时。把这脚本放到半夜执行。每天23点执行一次,3点执行一次。

    1 、 b :实现数据的增量同步方式(即判断哪些数据需要更新哪些数据需要插入方式为)将源数据库数据保存为 lis ,然后逐条更新,在更新前查询被更新数据库里面是否存在相同“ id ”及相同“执行时间”,如果不存在 id 就插入本条数据,如果存在一样“ id ”但“执行时间”不一样,就更新数据,如果两个字段都一样就跳到下一条数据循环判断。

    另一种方式是使用 kettle 这类 etl 工具来同步数据库,一般院感系统使用此方法来挖掘数据。 kettle 没接触过,正在了解中,不知道性能如何,有其他好办法欢迎讨论。

    8 条回复    2016-03-31 21:04:59 +08:00
    msg7086
        1
    msg7086  
       2016-03-30 23:11:25 +08:00
    MySQL 下还是很简单的。 SQL Server 就不熟了,不知道有没有类似的 Replication 功能。
    几百万数据不算太多。
    qile1
        2
    qile1  
    OP
       2016-03-30 23:20:46 +08:00
    mssql 也就是 sql server 有订阅,发布等功能,但是需要在源数据库设置,这样对源数据库可能影响比较大,另外由于权限问题,暂时无法修改源数据库设置。只能通过 sql 查询来取到数据,去重后更新插入数据。
    ininit
        3
    ininit  
       2016-03-30 23:45:17 +08:00
    关注一下
    slixurd
        4
    slixurd  
       2016-03-31 00:37:57 +08:00
    binlog ,不会 binlog 就用 databus
    buliugu
        5
    buliugu  
       2016-03-31 00:51:41 +08:00
    楼主可以去看看阿里开源的 DataX 数据同步框架,现成轮子(逃
    lzdhlsc
        6
    lzdhlsc  
       2016-03-31 01:52:31 +08:00
    sql server log shipping.
    SlipStupig
        7
    SlipStupig  
       2016-03-31 02:29:54 +08:00
    如果是同样是 mssql 就看订阅,如果不是或者数据源都不统一,数据去向也不知道,可以用 ETL 神器 kettle
    qile1
        8
    qile1  
    OP
       2016-03-31 21:04:59 +08:00 via Android
    binlog 和 databus 及 datax 不时候这个需求, mssql 数据库的订阅也需要修改源数据库,只能自己编程了,用 python 编码比较麻烦,决定使用 c#来完成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:26 · PVG 10:26 · LAX 18:26 · JFK 21:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.