首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据更新冲突

数据更新冲突
EN

Stack Overflow用户
提问于 2010-08-20 22:13:59
回答 3查看 87关注 0票数 1

我目前正在开发一个web应用程序,在那里我遇到了一些小问题。在该系统中,多个用户可以登录到同一页面并更新数据(一系列复选框、下拉框和文本字段)。

问题是,如果一个用户已经在加载旧数据的页面上,并且已经更新了旧数据,并提交了他们的更改,这将更新所有内容,那么数据可能会被覆盖。

对如何解决这个问题有什么建议吗?我目前只处理纯文本文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-20 22:31:13

我目前只处理纯文本文件。

建议1.使用数据库。

建议2.使用锁文件。使用操作系统级API调用打开具有排它锁的文件。第一个获取此文件的用户具有对数据的独占访问权限。当该用户完成他们的事务时,关闭文件,释放操作系统级别的锁。

建议3.不要“更新”文件。记录更改的历史记录。然后,您可以从日志中读取用户名和时间戳,以查找最新版本。

如果你这样做,你需要让每个请求这样做。

  1. 获取当前状态时,从文件中读取最后一行。另外,获取文件大小和上次修改时间。保留会话中的大小和上次修改时间。在窗体中显示当前状态。
  2. 在处理用户的更改时,请检查文件大小和上次修改时间。如果文件与会话中记录的文件不同,则此用户正在尝试更新已由其他人更改的数据。读取文件中的最后一行。另外,获取文件大小和上次修改时间。保留会话中的大小和上次修改时间。在窗体中显示当前状态。

此外,您可能希望有两个文件。一种是“当前”数据,另一种是历史变化。这可以使查找当前数据的速度更快,因为它是当前状态文件中的唯一记录。

另一种选择是在你的文件中有一个固定大小的文本块的“头”。每次追加时,还会使用到最后一条记录的偏移量以及最后一次更改的时间戳seek(0,0)并刷新标头。

票数 2
EN

Stack Overflow用户

发布于 2010-08-20 22:21:09

在保存新数据时,您可以将数据的修改日期与用户开始编辑的时间进行比较。

如果在用户进行更改时进行了修改,您可以向用户显示一条消息,询问他们采用哪个版本,或者允许他合并这两个版本。

这个问题已经被svn、git等修订系统以完全相同的方式解决了。

票数 1
EN

Stack Overflow用户

发布于 2010-08-20 22:18:17

您可以创建一个附加表,并在其中存储所有信息以及userID,因此您将能够使用joins访问用户插入的所有数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3531693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档