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

How to lock MySQL resources while open in webform and release when closed / done editing

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

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

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

中的锁

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

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

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

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

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