如何在网络表单中打开时锁定MySQL资源,并在关闭/完成编辑时释放



我正在构建一个应该同时为许多企业用户提供服务的平台。该系统包含许多不时需要更新的记录。记录并适当存储每个更改非常重要。我在后端使用 Laravel 6 实现,在前端使用 Angular 6。前端通过 HTTP 请求向后端发送请求。数据存储在 MySQL 数据库中。

用户以只读或读写模式加载特定数据集。在只读模式下,无需锁定资源,因为用户知道他只能读取数据。在读写模式下,数据集应从用户请求数据的那一刻起被锁定,以便在有人处理数据时其他用户无法请求数据集。然后,处理数据的用户在 Web 表单中打开数据以进行编辑。一旦用户保存、取消或关闭浏览器,数据就会解锁。

现在锁定数据库中的数据不是问题,我保留了一个表,其中哪些数据集被锁定以进行编辑,每当用户尝试访问此数据时,都会抛出错误。当用户保存取消时释放数据也不是问题,我只是释放表中的锁。

但是,由于在编辑时关闭浏览器时没有与后端交互,因此数据集将无限期地保持锁定状态(我可以使用时间戳和 cronjobs 等来解决此问题,但这些不是公司基础设施的选项(。我想知道如何解决这个问题?

我自己有一个想法,但不知道如何实现这一点,是保持客户端和服务器之间的HTTP连接打开,并让服务器(laravel(执行一些代码以在连接关闭时释放锁。有什么提示、提示或指示让我从这里继续吗?

使用不带 cron 作业的时间戳字段来指示记录锁定的时间。如果当前时间晚于时间戳,则认为记录已解锁。

当 Web 表单处于打开状态时,您可以每隔几分钟使用一个 ajax 请求来在接下来的几分钟内更新此时间戳,从而保持记录锁定状态。

如果用户关闭浏览器窗口,则时间戳字段不会更新,记录将在几分钟内解锁。

最新更新