【发布时间】: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>。
我的问题:
-
我是否需要获得显式锁定(例如 SELECT...FOR UPDATE)以确保并发更新不会处理陈旧数据并覆盖其他更新的更改?
-
数据库触发器是维护此计数器的更好选择吗?如果是,我是否需要处理那里的并发更新锁定?
(我需要维护计数器以及对其他表的更改,而不是在请求时通过遍历整个表来进行计数)
【问题讨论】:
标签: sql postgresql spring-boot hibernate concurrency