【问题标题】:Maintain a counter in one table to track INSERT and DELETE in another table在一个表中维护一个计数器以跟踪另一个表中的 INSERT 和 DELETE
【发布时间】:2021-05-31 02:01:52
【问题描述】:

我有一个 Spring Boot 应用程序,其中 Postgres 作为数据库,Hibernate 用于持久性管理。 db 中有两个表:STATISTICS 和 USER。客户端机器向 STATISTICS 表提交条目,并且 USER 表中有一个“计数器”列来跟踪另一个表中的条目数(插入时递增,删除时递减)。

我从维护计数器的基本查询开始:UPDATE USER u set u.counter = coalesce(u.counter, 0) + <update_by> where u.id = <user_id> 对删除是否定的。

我的问题:

  1. 我是否需要获得显式锁定(例如 SELECT...FOR UPDATE)以确保并发更新不会处理陈旧数据并覆盖其他更新的更改?

  2. 数据库触发器是维护此计数器的更好选择吗?如果是,我是否需要处理那里的并发更新锁定?

(我需要维护计数器以及对其他表的更改,而不是在请求时通过遍历整个表来进行计数)

【问题讨论】:

    标签: sql postgresql spring-boot hibernate concurrency


    【解决方案1】:

    postgresql已经阻塞了可更新记录,你可以使用触发器或者函数,都在一个事务中执行,阻塞可更新记录

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多