有时候为了追求速率不用innodb,这时候如果想完成类似事物处理有一定的处理技巧。
像redis和mongodb等,都有“设置并返回”操作,可以实现类似于操作系统的信号量机制。
其实mysql也可以模拟信号量机制:
比如:
CREATE TABLE IF NOT EXISTS `bing_fa` (
`key` varchar(200) NOT NULL,
`is_bing_fa` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
在访问临界资源前测试和设置的P操作:
insert into bing_fa values("event1",'Y') on duplicate key update is_bing_fa="Y"
释放资源的V操作:
update bing_fa SET `is_bing_fa` = 'N' WHERE `key` = 'event1'
P返回的影响行数不为0则表示测试通过,否则测试不通过,表示当前有人在使用资源。