如题,最近有个项目需要同步两个 SQL Server 数据库中的一个表,这表有 12000000 多行。像这种上千万行的数据,同步到另一个数据库是个头疼的问题。现在根据id查询速度比较快,根据时间过滤需要大约17秒多才可以查出数据。
这个表会不定时更新,有个“索引 id ”字段,有个“执行时间”字段,新增数据“id”会 自动加一,更新的话“执行时间”字段会变为当前服务器执行时间。一般更新都是最近几天的数据库。
在不动原来数据库的前提下(这导致无法使用触发器和数据库发布等功能同步)将此表同步到另一个数据库里面。 暂时想到的方法有两个:
1 、 a :自己编写 python 脚本,设定几个初始变量到本地文本配置文件,其中包括同步时间,第一次运行判断同步数据时间,如果小于当前时间则同步最近三个月数据到本地数据库,如果大于当前日期,则同步当天数据到本地数据库,并修改配置文件里面的同步时间加 24 小时。把这脚本放到半夜执行。每天23点执行一次,3点执行一次。
1 、 b :实现数据的增量同步方式(即判断哪些数据需要更新哪些数据需要插入方式为)将源数据库数据保存为 lis ,然后逐条更新,在更新前查询被更新数据库里面是否存在相同“ id ”及相同“执行时间”,如果不存在 id 就插入本条数据,如果存在一样“ id ”但“执行时间”不一样,就更新数据,如果两个字段都一样就跳到下一条数据循环判断。
另一种方式是使用 kettle 这类 etl 工具来同步数据库,一般院感系统使用此方法来挖掘数据。 kettle 没接触过,正在了解中,不知道性能如何,有其他好办法欢迎讨论。
1
msg7086 2016-03-30 23:11:25 +08:00
MySQL 下还是很简单的。 SQL Server 就不熟了,不知道有没有类似的 Replication 功能。
几百万数据不算太多。 |
2
qile1 OP mssql 也就是 sql server 有订阅,发布等功能,但是需要在源数据库设置,这样对源数据库可能影响比较大,另外由于权限问题,暂时无法修改源数据库设置。只能通过 sql 查询来取到数据,去重后更新插入数据。
|
3
ininit 2016-03-30 23:45:17 +08:00
关注一下
|
4
slixurd 2016-03-31 00:37:57 +08:00
binlog ,不会 binlog 就用 databus
|
5
buliugu 2016-03-31 00:51:41 +08:00
楼主可以去看看阿里开源的 DataX 数据同步框架,现成轮子(逃
|
6
lzdhlsc 2016-03-31 01:52:31 +08:00
sql server log shipping.
|
7
SlipStupig 2016-03-31 02:29:54 +08:00
如果是同样是 mssql 就看订阅,如果不是或者数据源都不统一,数据去向也不知道,可以用 ETL 神器 kettle
|
8
qile1 OP binlog 和 databus 及 datax 不时候这个需求, mssql 数据库的订阅也需要修改源数据库,只能自己编程了,用 python 编码比较麻烦,决定使用 c#来完成
|