【发布时间】:2019-08-02 05:28:45
【问题描述】:
我有一个mysql表:
CREATE TABLE `coupons` (
`id` INT NOT NULL AUTO_INCREMENT,
`code` VARCHAR(255),
`user_id` INT,
UNIQUE KEY `code_idx` (`code`)
) ENGINE=InnoDB;
该表由数千/数百万个代码组成,最初user_id 对每个人都是 NULL。
现在我有一个 Web 应用程序,它为同时访问该应用程序的数千名用户分配一个唯一代码。考虑到非常高的流量,我不确定处理此问题的正确方法是什么。
我写的查询是:
UPDATE coupons SET user_id = <some_id> where user_id is NULL limit 1;
应用程序以 1000 个请求/秒的并发运行此查询。
我观察到的是整个表都被锁定了,而且扩展性不好。 我该怎么办? 谢谢。
【问题讨论】:
-
嗨 Sidhant,我在这里看到这个问题已经有一段时间了,您找到解决方案了吗?你能分享一下吗?提前谢谢你。
-
嗨,Nathalie,作为一种解决方案,我认为 Mysql 无法针对此用例进行扩展。解决方法是在 Redis 中保存这些优惠券的主键并在那里使用集合。
标签: mysql concurrency