如何最好地处理多对多并发冲突?

时间:2012-01-05 05:44:56

标签: mysql java-ee concurrency concurrentmodification

我们有一个类似于gmail标签的应用程序功能 - 您可以'标记'这些项目。现在这是一个并发应用程序,即所谓的“白板”可由多个用户编辑 - 这意味着许多用户可以选择重新/分组项目。基本上可以同时标记多个项目。

肯定会有冲突,但问题是如何最好地处理它?想到的唯一策略类似于着名的ALOHA协议,即在提交之前检查是否有任何改变 - 如果有,则中止并通知用户;否则提交。这是非常低效的IMO。

以下是两个相似的想法 - 一个比较困难,另一个比较容易:

首先更容易:) - 覆盖更改,即重复更新,但新标记也会被标记。

困难之一:检查哪些是“被删除”,即可能有一些不属于分类(由用户2说。即,用户1进行了更改,用户2也进行了更改同一时间。基本上找到一组标记物品{user1 - user2})。这将是非常困难的,真的不值得恕我直言。

我想知道在这种情况下使用的最佳实践解决方案是什么,它不会妨碍用户体验,也不会混淆他们。

(这是一个带有MySQL后端和Jquery / ajax前端的J2EE / Restlet应用程序)

1 个答案:

答案 0 :(得分:2)

这个问题的答案实际上取决于您的用户是谁以及他们期望的是什么。如果是我,我想我会在完成之前通知用户创建更改(stackoverflow会这样做),并允许我提交更改或回滚。你提出的所有解决方案都是可以接受的......这完全取决于你想做什么。如果您要求如何使用code执行此操作,则必须先发布一些代码,以便我们可以看到您正在处理的内容。

另一种可能的解决方案类似于#2(只是在发生变化时覆盖更改),但保留每次更改的修订版以允许轻松转换,并且可以轻松判断是否在其他更改之上进行了更改。