如何处理数据库并发

时间:2010-12-13 08:44:16

标签: database web-applications concurrency

我应该如何处理

的事件
  1. 用户A正在编辑文档
  2. 用户B开始编辑相同的文档
  3. 用户B保存
  4. 用户A保存 - 应该失败但我应该怎样处理它?告诉用户页面(或实体)已被其他人保存似乎不够。用户应该知道文档/字段的哪个部分已被更改,并确定他是否要重试保存。
    • 如果它只是短暂的领域,我想我可以比较它们 - 什么是比较旧的和有效的方法?一个领域的新价值?
    • 如果它是一个很长的文本文档,我该怎么做像diff这样的东西?或者我该如何处理呢?只是告诉用户有人在打开文档后保存了文档似乎不够用?

2 个答案:

答案 0 :(得分:1)

在大多数应用程序中,它实际上 足以告诉用户由于其他用户更新相同数据而导致保存失败。这称为optimistic concurrency:基本上,您假设不会发生冲突,并且您只需拒绝对同一数据执行第二次写操作即可处理发生冲突的情况。

除此之外的任何事情都是自定义编程。您提供差异的建议特定于您的域名。如果是关于编辑文本文档,您可以使用标准差异文档。然而,在走这条路之前,问问自己是否真的值得花费很多时间......

答案 1 :(得分:0)

请注意您希望使用哪种语言,但在Java中我使用xstream将对象序列化为xml,然后使用http://www.crosswire.org/jsword/java2html/org.crosswire.common.diff.index.html对XML进行区分以查看更改的内容。

如果您只有几个实体和用例,那么您可以通过手动实现所有这些行为来逃避,并且只使用diff引擎来比较大块文本。