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

2016-03-30 22:53:26 +08:00
 qile1

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

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

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

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

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

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

1024 次点击
所在节点    数据库
8 条回复
msg7086
2016-03-30 23:11:25 +08:00
MySQL 下还是很简单的。 SQL Server 就不熟了,不知道有没有类似的 Replication 功能。
几百万数据不算太多。
qile1
2016-03-30 23:20:46 +08:00
mssql 也就是 sql server 有订阅,发布等功能,但是需要在源数据库设置,这样对源数据库可能影响比较大,另外由于权限问题,暂时无法修改源数据库设置。只能通过 sql 查询来取到数据,去重后更新插入数据。
ininit
2016-03-30 23:45:17 +08:00
关注一下
slixurd
2016-03-31 00:37:57 +08:00
binlog ,不会 binlog 就用 databus
buliugu
2016-03-31 00:51:41 +08:00
楼主可以去看看阿里开源的 DataX 数据同步框架,现成轮子(逃
lzdhlsc
2016-03-31 01:52:31 +08:00
sql server log shipping.
SlipStupig
2016-03-31 02:29:54 +08:00
如果是同样是 mssql 就看订阅,如果不是或者数据源都不统一,数据去向也不知道,可以用 ETL 神器 kettle
qile1
2016-03-31 21:04:59 +08:00
binlog 和 databus 及 datax 不时候这个需求, mssql 数据库的订阅也需要修改源数据库,只能自己编程了,用 python 编码比较麻烦,决定使用 c#来完成

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX