我需要一种方法来更新实时计算机上的表,而不会影响用户体验。
我在MyISAM引擎上有几张桌子,每15分钟更新一次。更新脚本只是截断表并从select语句中插入数据。出现问题然后用户尝试查看正在更新的表中的信息 - 用户体验滞后,显示不正确的信息。
使用InnoDB交易很容易,但MyISAM呢?
答案 0 :(得分:2)
正如你自己写的那样。转移到InnoDB,或解释是什么阻止你做这个动作。
答案 1 :(得分:2)
如果您无法迁移到InnoDB,我唯一能想到的就是在更新时添加一层缓存。 (例如APC或memcached?)
您甚至可以编写通常会跳过缓存的内容,并且当您启动更新周期时,将缓存中的当前内容设置为“远期到期”,从缓存中提供内容,并在更新时使其无效完了。
增加的优势是您现在拥有一个可用的缓存系统,可能使一切更快:)
答案 2 :(得分:1)
如果你必须使用myISAM,你可以试试这种事情。您需要达到5.0或更高版本。如果你不是,请升级。
如果您可以使用您正在使用的软件来阅读这个有弹性的SQL错误,该错误会导致丢失表,并且只需在一秒左右后重试,您可以跳过锁定和解锁步骤。但是这些步骤可以保护您的系统免受短时间的影响,在重命名shuffle期间,没有生产表正确名称的表。
这是猴子业务,需要一些调试。但它对我来说效果很好。
(我将“猴子业务”定义为纯粹,优雅,SQL范围之外的东西。)
答案 3 :(得分:1)
您可以使用临时表名称并向用户显示VIEW。
步骤如下:
CREATE TABLE newtable
INSERT INTO newtable
CREATE OR REPLACE VIEW
DROP TABLE oldtable