数据更新冲突

时间:2010-08-20 14:13:59

标签: php web-applications conflict

我目前正在处理一个Web应用程序,我遇到了一些问题。在此系统中,多个用户可以登录同一页面并更新数据(一系列复选框,下拉列表和文本字段)。

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

有关如何解决此问题的任何建议?我目前只处理纯文本文件。

3 个答案:

答案 0 :(得分:2)

  

我目前正在使用纯文本文件。

建议1.使用数据库。

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

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

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

  1. 获取当前状态时,请从文件中读取最后一行。此外,获取文件大小和上次修改时间。保持会话中的大小和上次修改时间。在表单中显示当前状态。

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

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

    另一个选择是在文件中有一个“标题”,它是一个固定大小的文本块。每次追加时,您还seek(0,0)并刷新标题,其中包含最后一条记录的偏移量以及上次更改的时间戳。

答案 1 :(得分:1)

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

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

修订系统已经解决了这个问题,比如svn,git等,以同样的方式。

答案 2 :(得分:0)

您可以创建一个附加表,并将所有信息和userID存储在那里,这样您就可以使用联接来访问用户插入的所有数据。