2

伙计们,我有一个大问题。

我正在运行一个后台应用程序,想象一下,我有一个包含可编辑网格视图的表单。

  1. 100 位用户访问该页面
  2. 100 用户查看表单页面作为数据库提供的数据
  3. 100 个用户编辑一些字段
  4. 在这个例子中如何控制最终数据和一致性?
4

2 回答 2

0

取决于你真正想要什么。你有要求吗?你在寻找建议吗?

一种可能的解决方案

如果您有在编辑完成时调用的显式保存操作,

  1. 用户导航到页面,
  2. 用户修改表,
  3. 用户“保存”,
  4. 页面从数据存储中检索当前值(截至保存时)
  5. 页面将当前值与修改后的值进行比较
  6. 突出显示任何冲突并请求用户“解决”冲突
  7. 转到步骤 3。直到没有检测到冲突

另一种可能的解决方案

如果您想避免第 3 步到第 7 步循环,您始终可以将第 4 步到第 6 步包装在一个事务中,这意味着在解决当前保存之前每隔一次尝试保存块。这是相当繁重的,需要更多的工作,并且可能会有效地降低整体并发性。

另一种可能的解决方案

另一种可能的解决方案是使过程不那么离散而更连续。提供实时数据源。

  1. 创建推送或允许轮询表数据的 WindowsService/WCF 服务,
  2. 页面轮询数据或从远程服务异步接收数据,
  3. 页面用接收到的数据修改用户的页面内容
  4. 不冲突的新值以一种颜色临时突出显示(表示无冲突更改),例如浅绿色
  5. 发生冲突的新值以红色永久突出显示

如果您有保存过程,则在解决之前不会保存任何红色值。

最后(建议)可能的解决方案

如果您没有明确的保存操作,

  1. 用户点击一个单元格(有效地请求编辑一个单元格)
  2. 页面与 Windows\WCF 服务通信,请求在该单元上“锁定”,
  3. 如果没有其他用户请求对该特定单元格进行“锁定”,则将单元格锁定给该用户并返回 true。如果另一个用户请求锁定该特定单元格,则尊重当前锁定并返回 false。

如果远程服务返回 false,则用例结束,无法修改单元格。如果远程服务返回 true,则用户修改内容,当他们离开单元格或重新加载页面或其他任何内容时,远程服务会释放锁定。

结论

好吧,有点挥手,但脂肪足以咀嚼。考虑一下,有很多可能的解决方案。

于 2010-07-06T14:01:42.263 回答
0

在您可以计划和实施对此的技术解决方案之前,即。代码,你需要设计整体解决方案。

换句话说,假设您向 100 个不同的人分发了 100 张纸,每个人都附有该 Web 表单的副本。那 100 个人在他们的纸上草草写下笔记,然后按随机顺序交还给你。

在这种情况下,您如何处理一致性?当你能回答这个问题时,你就可以实施它。

但是,如果不了解您以该形式拥有的数据的更多信息,实际上不可能给您具体的建议。

于 2010-07-06T13:51:35.510 回答