我有一个案例,我应该限制表中每个用户的行数。现在,我在插入前通过 COUNT * FROM table
检查来执行此操作,如果计数等于/超过允许值,我将抛出错误。 COUNT 和 INSERT 查询在单个事务中运行。
但是,在 5000 个在线用户和每分钟 50K 个请求的情况下,我在表中有额外的记录(超过限制)。看起来像并行插入的竞争条件。我怎样才能避免这种情况?谁能提出一些最佳做法?
最佳答案
使用一个单独的表来维护用户和插入的行数。使用用户标识作为主表的外键。现在,如果您有一个基于 session 的应用程序,您可以将数据加载到 session 或内存中,并在 session /内存和数据库中每次插入后继续获取/更新计数,然后实际插入到主表中。
关于mysql - MySQL 中的并发插入和竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486442/