跨数据库会话保持多用户状态

问题描述 投票:0回答:1

情况

假设我们有一个连接到(Postgre)SQL数据库的Web应用程序,其任务可以概括为:

  1. 用于显示数据的SELECT操作。
  2. 基于可视化数据存储修改的UPDATE操作。

简单,但是...所涉及的数据不是特定于用户的,因此在此过程中其他用户可能会更改它。编辑任务可能需要很长时间(可能超过一个小时),这意味着发生这些冲突的可能性不低:为该问题实施可靠的解决方案很有意义。

方法

想法是,一旦用户尝试提交更改(即触发UPDATE操作),将触发许多数据库检查,以确保在此期间所涉及的数据没有更改。

假设我们已对数据的每次更改加盖时间戳,就像保持数据SELECT时的访问时间并确保在此之后对所涉及的数据没有进行任何新更改一样容易。

问题

我们可以在用户执行编辑时轻松地将访问时间保留在前端应用程序中,然后在执行UPDATE时将其作为触发函数的参数提供,但是出于安全原因,这是不希望的。数据库应存储用户的访问时间。

一个直观的解决方案可以是与数据库会话关联的TEMPORARY TABLE。但是,同样,用户可能需要花费很长时间来完成任务,因此从池中捕获连接并将其保持空闲状态似乎也不是一个好选择。 SELECTUPDATE操作将在不同的会话下执行。

问题

是否有任何范式或规范方法可以有效解决并解决此问题?

sql database postgresql web-applications data-modeling
1个回答
0
投票
有几种解决方案取决于是否使用连接池以及所使用的transaction isolation level

使用SELECT进行悲观锁定...在没有连接池的情况下进行更新

    如果使用连接池,则使用时间戳列进行乐观锁定。
© www.soinside.com 2019 - 2024. All rights reserved.