【发布时间】:2014-01-11 00:16:12
【问题描述】:
我有一个有趣的情况,我不断地从服务器轮询数据。我无法控制它提供的内容,所以我只需要处理它给我的东西。
我正在记录它提供的一些信息,并将其存储在 MySQL 数据库中。这不是一个真正的问题,但是,我的问题是如何有效地使数据与数据库保持同步。
例如,在某一时刻,我可以有 3 个 ID 1001、1002、1003。我可以将它们插入数据库中,但是如果我现在有 1001 和 1003 怎么办。最有效的更新方法是什么?反映这一点的数据库?基本上,我只知道我现在拥有什么,如果不自己在 PHP 中计算,我无法知道发生了什么变化。
我想我可以选择,找到差异,然后针对丢失/添加的 ID 发出 DELETE/INSERT。或者可能是 DELETE NOT IN () 然后是 INSERT.. 但由于这个脚本一直在运行,我担心这不会很有效。
我的另一个想法是简单地为每个“玩家”制作一行,并使用 CSV 分隔的 ID 列表。每次迭代我都可以为该播放器更新行,而不是选择/删除/插入。
有没有人遇到过类似的问题并找到了好的解决方案或有一些见解?我将不胜感激!我正在使用 PHP。
【问题讨论】:
-
如果您想用从服务器接收到的最新数据替换现有数据,为什么不清除当前存储的所有数据,然后插入已收到的数据?
-
从一个播放器中删除所有行,并插入当前数据?考虑到我需要从其他脚本访问这些信息,这将是多么有效。几乎在任何时候,一个玩家都没有行,那将是无效的。
-
在一个事务中执行两个操作(DELETE,然后是 INSERT):其他会话会认为它是原子的。
-
嗯。我从来没有考虑过交易。您认为这与 PHP SELECT、比较数据和必要时 DELETE/INSERT 相比在效率上如何?
标签: php mysql sql database pdo