数据库挖掘:两个数据库增量同步实现方式讨论-求一个单表上百万数据同步方式的选择(类似根据医嘱实现统方) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qile1
V2EX    数据库

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

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

    如题,最近有个项目需要同步两个 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     Solana     1434 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:25 PVG 00:25 LAX 08:25 JFK 11:25
    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