Symfony2 Doctrine - 数据库 - 防止同时访问


Symfony2 Doctrine - Database - Preventing simultaneous accesses at the same time?

我认为我目前的问题可以很快描述。

我有一个symfony2项目,其原则是访问mysql数据库。现在,多个(许多)用户可以同时访问此页面。

现在,我的问题如下:用户可以单击按钮将自己标记为条目的参与者。一个条目最多可以有允许的参与者。

例如:条目 A,最大用户数 = 3 <-----用户 A、B、C 和 D 查看条目 A。

现在,A 通过单击 Ajax 按钮将自己标记为参与者。B 做同样的事情(不是同时做 ->没问题)。

现在 C 和 D 争夺条目 A 中的最后一个空闲插槽。两者同时单击按钮。

现在,C 和 D 都可以加入此条目,即使 3 的最大用户数被排除

在外。

如果用户单击 Ajax 按钮,则会发送 ajax 调用。在服务器端,在ajax处理程序中,我的symfony2代码将使用原则来访问数据库。它只是从数据库请求条目,并检查是否已达到最大用户数。否则,用户将被保存/标记为条目的参与者。

但这是不允许的。我想避免 2 个用户可以同时单击按钮加入条目。在此状态下,条目中的最大用户数定义为 3,此条目的参与者数量为 4。这不是此函数的目标。

你能解释一下我如何解决这个问题吗?我需要表锁定还是其他东西?

如果不清楚问题是什么,那就问吧。我期待着答案,我很感激每一个提示。

最好巨人

看到你正在使用MySQL,你可以使用

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_get-lockhttp://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock

如何编写代码取决于您,但它可用于缓解并发问题,例如您遇到的问题。

查看 Transaction and concurency on doctrine doc http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html