仅当缓存的值不早于当前值时如何更新项目

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

我有一个通用的Java多用户客户端服务器CRUD系统,其中每个用户都通过SELECT获取所有项,通过INSERT添加新项,通过DELETE删除现有项,并通过UPDATE修改现有项。] >

所有表均包含date_last_modified TIMESTAMPTZuser_last_modified INTEGER REFERENCES users(id)列。

我想避免以下情况:首先每个用户SELECT拥有所有项目,然后几个用户修改相似的项目,而每个随后的UPDATE都会覆盖先前的数据。

我正在尝试创建一个UPDATE查询,用于比较客户端和服务器上的date_last_modified值,如果值不相等(表示有人已经对其进行了修改,则中止查询。)>

如果存在另一种方法来处理缓存项目较旧的情况,那么欢迎您使用DB中的方法。

我有一个通用的Java多用户客户端服务器CRUD系统,其中每个用户都通过SELECT获取所有项,通过INSERT添加新项,通过DELETE删除现有项,并通过...]修改现有项。] >> [[

我认为您的方法不错,但也许可以在更新之前使用触发器来实现它

您的方法还可以,但是您可以通过添加date_last_modified来避免中止查询(也避免在事务中预先查询时间戳以比较这些值)>

UPDATE ... WHERE ... AND date_last_modified = ?

如果时间戳不匹配,则不更新任何行。

Statement.executeUpdate(...)返回更新的行数。如果为0,则可以通知用户竞争状况(并在需要时回滚事务)。

您也可以为此添加列serial update_count。但是,如果每次更新都更改该值,则timestampz可以。

java postgresql caching
2个回答
0
投票
我认为您的方法不错,但也许可以在更新之前使用触发器来实现它

0
投票
您的方法还可以,但是您可以通过添加date_last_modified来避免中止查询(也避免在事务中预先查询时间戳以比较这些值)>

UPDATE ... WHERE ... AND date_last_modified = ?

© www.soinside.com 2019 - 2024. All rights reserved.