【问题标题】:Control concurrency in multiple users web application gridview控制多用户 Web 应用程序网格视图中的并发性
【发布时间】:2010-07-06 13:37:31
【问题描述】:

伙计们,我遇到了一个大问题。

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

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

【问题讨论】:

    标签: .net multithreading gridview consistency


    【解决方案1】:

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

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

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

    如果不详细了解您在该表格中拥有的数据,实际上不可能给您具体的建议。

    【讨论】:

      【解决方案2】:

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

      一种可能的解决方案

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

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

      另一种可能的解决方案

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

      另一种可能的解决方案

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

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

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

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

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

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

      如果远程服务返回 false,则用例结束,并且单元格不能被修改。如果远程服务返回 true,则用户修改内容,当他们离开单元格或重新加载页面等时,远程服务会释放锁定。

      结论

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

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 2011-01-14
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多