如题,最近有个项目需要同步两个 SQL Server 数据库中的一个表,这表有 12000000 多行。像这种上千万行的数据,同步到另一个数据库是个头疼的问题。现在根据id查询速度比较快,根据时间过滤需要大约17秒多才可以查出数据。
这个表会不定时更新,有个“索引 id ”字段,有个“执行时间”字段,新增数据“id”会 自动加一,更新的话“执行时间”字段会变为当前服务器执行时间。一般更新都是最近几天的数据库。
在不动原来数据库的前提下(这导致无法使用触发器和数据库发布等功能同步)将此表同步到另一个数据库里面。 暂时想到的方法有两个:
1 、 a :自己编写 python 脚本,设定几个初始变量到本地文本配置文件,其中包括同步时间,第一次运行判断同步数据时间,如果小于当前时间则同步最近三个月数据到本地数据库,如果大于当前日期,则同步当天数据到本地数据库,并修改配置文件里面的同步时间加 24 小时。把这脚本放到半夜执行。每天23点执行一次,3点执行一次。
1 、 b :实现数据的增量同步方式(即判断哪些数据需要更新哪些数据需要插入方式为)将源数据库数据保存为 lis ,然后逐条更新,在更新前查询被更新数据库里面是否存在相同“ id ”及相同“执行时间”,如果不存在 id 就插入本条数据,如果存在一样“ id ”但“执行时间”不一样,就更新数据,如果两个字段都一样就跳到下一条数据循环判断。
另一种方式是使用 kettle 这类 etl 工具来同步数据库,一般院感系统使用此方法来挖掘数据。 kettle 没接触过,正在了解中,不知道性能如何,有其他好办法欢迎讨论。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.