mysql - MySQL 中的并发插入和竞争条件

标签 mysql concurrency insert race-condition high-load

我有一个案例,我应该限制表中每个用户的行数。现在,我在插入前通过 COUNT * FROM table 检查来执行此操作,如果计数等于/超过允许值,我将抛出错误。 COUNT 和 INSERT 查询在单个事务中运行。 但是,在 5000 个在线用户和每分钟 50K 个请求的情况下,我在表中有额外的记录(超过限制)。看起来像并行插入的竞争条件。我怎样才能避免这种情况?谁能提出一些最佳做法?

最佳答案

使用一个单独的表来维护用户和插入的行数。使用用户标识作为主表的外键。现在,如果您有一个基于 session 的应用程序,您可以将数据加载到 session 或内存中,并在 session /内存和数据库中每次插入后继续获取/更新计数,然后实际插入到主表中。

关于mysql - MySQL 中的并发插入和竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486442/

相关文章:

mysql - 将 varchar 转换为日期显示 0000-00-00

MySQL : find repeating events that are outdated

mysql - 在这个 Mysql 选择表示例中,U. 来自哪里?

java - 有多少个线程可以并行运行?

java - Java中的原子compareAndSet方法是否有锁定?

c - 如何在C中从右向左插入树中的节点?

mysql - 尝试用另一个表列中的值替换列的值

java - 同步以确保对不可变对象(immutable对象)的引用将被另一个线程看到

sql - iPad Restkit 和 OData Microsoft SQL AZURE

mysql - 在 MySQL 事件中从另一个表插入和选择(取决于日期)