1

我正在开发一个预订或预订系统。在我的表单中,我进行了 ajax 调用以检查是否有可用空间,如果它们已满则禁用它们。不幸的是,当有 1 个可用空间和 10 个尝试提交响应时,它会超出分配的空间 1 或 2。

我不希望有任何代码或查询,而是指导如何防止这种情况?

4

3 回答 3

0

在互斥事务中包装“是否有可用空间/保留空间”,以便最多一个客户端可以检查/保留空间。是的,很多请求都会等待,但是如果临界区很小,那么等待时间总体上可以忽略不计。

于 2013-07-19T16:16:17.627 回答
0

您无法实现与客户端技术的可靠同步,您将不得不深入挖掘堆栈。您应该在稍后阶段推迟此检查,并在服务器端(在 java、c# 等中)或在存储过程中处理它。使用您的 javascript 进行初步检查:如果没有可用空间,请立即禁用该表单。但是,如果有可用空间,表单将看起来已启用,但稍后可能会在您的 java 代码或存储过程中失败。该阶段应该是同步的,如果您因为刚刚为客户提供服务而检测到没有空间,请向其他人返回错误消息,即使他们已经看到了启用的表单。

于 2013-07-19T16:23:26.817 回答
0

我想在数据库中完成锁定部分。通读事务提供的许多隔离级别对于这个特定部分的可重复读取之类的东西应该可以解决问题。旨在确保数据库即使对于读取操作也能获得锁。您可以为此编写存储过程,甚至可以在应用程序层中进行。完成后不要忘记重置事务级别。

于 2013-07-19T16:30:47.333 回答