我有一个包含大约1000万行的表。该表由外部过程定期更新(一天几次)。该表包含的信息,如果不在更新中,则应删除。当然,在更新完成之前,您不知道它是否在更新中。
现在,我们采用更新开始时间的时间戳。更新完成后,擦除任何“更新”值小于开始时间戳的内容。这在现在有效,但是当updater进程崩溃为任何值时会出现问题 - 我们必须以新的时间戳值重新开始。
似乎必须有更强大的东西,因为这是一个常见的问题。有什么建议吗?
答案 0 :(得分:5)
使用整数修订号代替时间戳。只有在完成更新后才增加它,然后删除具有过期修订的元素。
答案 1 :(得分:2)
如果您使用支持事务的存储引擎,例如InnoDb(您正在使用MySql吗?),您可以考虑使用事务,因此如果更新过程崩溃,则不会提交修改。
我们对您的架构知之甚少,以及您如何进行此更新(纯SQL,Web服务?),但您可能已经拥有了一个事务管理层。