Rails 与第三方同步的表,更新数据之后,如何巧妙的检测并删除旧数据

m8r-vsok121 · 2011年11月02日 · 最后由 wxianfeng 回复于 2012年02月04日 · 4068 次阅读

我有一个 Commodity 表,定期与第三方的数据库同步更新

从第三方获取数据之后, 对于新数据或者已经存在的数据,我用 find_or_create,然后 update_attributes 来更新 但是对于第三方已经删除,而我的数据库里还留着的数据,我这边怎么检测出来?

我现在的办法是建一个叫 ids 的列表用来保存 id, 在更新每个数据的时候就将它的 id 存到列表里 ids << commodity.id 所有数据更新完之后再用 commodities.where("id NOT IN (?)", ids).delete_all 找到第三方数据中已经没有了的 id 然后删掉。

上次看赶集发的数据库军规里提到最好不要用负向的语句例如我这里的 NOT IN 请问我这么用了对数据库性能的影响大吗?有更巧妙的办法来更新数据吗?

题外话

  1. 右上角的“登陆”应该是登录吧,登录页面以及按钮也用的“登陆”
  2. 网站首页太空了,可以放一点新动态进去,新帖热贴,新 wiki 之类的
  3. 编辑器还有问题,我这篇文章所有的换行都被吞掉了

你这样同步不靠谱,数据一多要跑死。

你这样 insert 也不符 拒绝 3B 的‘大批量’啊

我也有个和第三方表的同步,我是在我的表里 存了 对方表的 id , 根据 id, (对方 GET 接口) 同步的时候 已经存在的就 update,不存在的就 create,

(我这边开 POST 接口) 删除是我这边开了个接口,对方删除的时候,同时 POST 到我这边。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号