我正在创建一个桌面应用程序,将数据持久存储在云中。我关心的一个问题是开始在应用程序中编辑项目,并将其保留一段时间会导致数据过时。如果两个人同时尝试编辑同一项目,则显然也会发生这种情况。当他们完成编辑并要保存数据时,我要么需要覆盖数据库中当前存在的内容,要么检查他们在上一次更改之后是否开始编辑,或者迫使他们放弃更改,或者给他们选择冒险的选择覆盖他人的更改。
我想增加一个字段is_locked
和lock_timestamp
db表。当用户开始编辑项目时,该行将is_locked
变为true并将锁定时间戳记设置为当前时间。然后,我将拥有一段时间的锁定时间(例如5分钟)。如果其他任何人尝试编辑该项目,他们将收到一条消息,指出该项目已被锁定,并且锁定自动失效。如果用户在编辑时走开,则锁会在相对较短的时间后自动过期,一旦这样做,将警告用户锁已过期,并在刷新数据后被迫重新开始编辑。
这是防止覆盖陈旧数据的好方法吗?是不是太过分了(我不希望单个帐户同时使用多个应用程序)。
(我还要担心的是,有2个人为同一物品锁上了锁,但是我认为这是我可以接受的比赛条件。)