我们目前有一个表设置来跟踪缓存文件名或memcached键引用。该表存在,以便在添加注释或添加更多内容时,系统会自动清除受更新影响的缓存文件/键值对,以便在用户下次访问页面时重建,用户可以看到更新的内容。当前的表结构如下:
CREATE TABLE IF NOT EXISTS `cache_references` (
`cache_id` int(21) NOT NULL AUTO_INCREMENT,
`cache_page_id` varchar(255) NOT NULL,
`cache_tag` varchar(100) NOT NULL,
`cache_group` varchar(100) NOT NULL,
`cache_expiry` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`cache_id`),
KEY `cache_page_id` (`cache_page_id`),
KEY `cache_tag` (`cache_tag`),
KEY `cache_group` (`cache_group`),
KEY `cache_expiry` (`cache_expiry`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
这一切都很好,但是这个表变得非常庞大,速度非常快,中等大小的站点,积极缓存可以轻松生成超过500,000个缓存文件引用。虽然对于小到中等站点来说这不是一个真正的问题,但这对于具有许多页面和资源的大型站点来说并不是真正的解决方案,因为它可能在搜索要删除的缓存页面ID时导致表锁和/或大型表扫描。
我的问题是如何改进此解决方案?
答案 0 :(得分:0)
首先,您可以将引擎更改为InnoDB。 InnoDB具有每行锁定系统,因此您不再有锁定问题。