题
在wiki式的网站,我能做些什么来防止或减轻 写写入冲突 同时仍然允许在网站运行迅速和保持网站便于使用?
这个问题,我预见到的是这个:
- 用户的一开始编辑的文件
- B用户开始编辑的文件
- 用户有完成的编辑的文件
- 用户B完成编辑的文件,意外地复盖的所有用户的编辑
这里的一些办法,我想出了:
- 有某种形式的检查-出/入住/锁定系统(虽然我不知道如何防止人们保持的一个文件检查出来的"过长",并且我不想让用户感到沮丧不是 允许 做一个编辑)
- 有某种 差异 系统显示其他的更改用户时提交它们的变化,并允许某种形式的合并(但是我担心这将努力创造将使网站"太辛苦"的使用)
- 向用户通知并发的编辑 同时 他们使他们的变化(某些阿贾克斯?)
任何其他方式去在这个?任何例子网站实现这个好吗?
其他提示
三方合并: 首先要指出的是,大多数的并发的编辑,特别是在较长的文件,到不同的章节的文本。结果,指出哪些修订,用户A和B取得的,我们可以做一个三方合并,因为详细的 法案Ritcher的Guiffy软件.一个三方合并可以识别的编辑已经从原来的,并且除非他们的冲突,它可能默默地合并两个编辑进入一个新的篇文章。理想的是,在这一点上进行的合并和显示用户B的新文件,以便她可以选择进一步修订。
碰撞决议: 这与你离开的时的情形两个编辑编辑的同一部分。在这种情况下,合并其他一切和提供的案文的三个版本向用户B-也就是说,包括原来的-有用户的版本,在文本或用户。这种选择取决于你是否认为默认应该接受最新的(用户只需点击保存保留他们的版本)或部队的编辑来编辑两次获得他们的变化(他们必须重新申请他们改变编辑的版本的部分)。
使用三种方法合并,这样可以避免锁,这是非常难以处理好的上网(多久你让他们已经锁?), 以及严重的',你可能会想要再看看'情况,这仅适用于论坛式的反应。它还保留了后-回应式的网络。
如果你想要的Ajax这一点,动态的3种方式合用户的版本用户的版本 虽然他们都是编辑, ,并通知他们。现在,这将是令人印象深刻。
在师的服务器接受第一个变化,然后在第二编辑的是保存一个冲突页上来了,然后第二个人融合了两种变化在一起。看看 维基百科:帮助:编辑的冲突
使用锁定机构可能是最容易实现。每一条可能会有锁定领域与它相关联和锁的时间。如果锁定时间超过一定价值的你会考虑锁是无效的,并删除它的时候,检查了文的编辑。你也可以跟踪打开锁并消除他们在会议接近。你还需要执行一些并行控制数据库中的(自动生成时间戳,也许)这样你就能确保你在检查的更新版本,你检查出来,只是在情况下的两个人们能够编辑的文章在同一时间。只有一个正确的版本将能够成功地检查在编辑。
你可能还能够找到一个差异引擎,你可能只是用来建造的差异,虽然显示他们在一wiki编辑可能是有问题的--实际上显示的差异可能是难于建造的差异。你依靠的版本控制系统以检测时,你需要拒绝编辑和执行差异。
在免费的,如果我们正在编写一个回复到的邮件和其他人发送的答复,同时我们仍然是打字、弹似乎表明有一个新的更新和更新本身就显示为另一个员额没有一个网页重新加载。这个办法将会满足你的需要,并如果可以使用的Ajax显示确切的职位与一个链接到差异的是什么,只是更新,而用户B仍然是繁忙打他的入口,这将是巨大的。
作为拉维(和其他)说,您可以使用的AJAX的方法,并告知用户时,另一个改变正在取得进展。当一个编辑提交的,只是指示的文字差异和让的第二个用户工作,如何合并的两种版本。
然而,我想添加一些新的东西,你可以尝试在外:打开一个聊天室之间的对话所编辑的话,他们正在做的他们所做的编辑。你可以用的东西喜欢嵌入 Gabbly 为此,为实例。
最好的解决冲突的直接对话,我说。
你的问题(失去了更新)是解决最好的使用 乐观的并发控制.
一种实现是增加一个 版本 列在每个编辑实体的系统。在用户编辑载的行和显示html形式上的用户。一个隐藏的领域给出的版本,我们说 3.更新的查询需要看起来是这样的:
update articles set ..., version=4 where id=14 and version=3;
如果返回的行为0然后有人已经更新的第14条。所有你需要做的就是如何处理这种情况。一些共同的解决方案:
- 最后一次提交的胜利
- 第一提交获胜
- 合并冲突的更新
- 让用户决定
而不是一种递增 版本 int/长可以使用 时间戳 但这不是建议,因为:
检索当前的时间从JVM不一定是安全的集群环境中,其中的节点可能没有足够的时间同步。
(引自 Java持久性有休眠)
一些更多的信息在 休眠的文件.
在我的办公室,我们有一项政策,所有的数据表包含4个领域:
- 创建
- CreatedDate
- LastUpdateBy
- LastUpdateDate
这种方法有一个很好的审计线索谁做了什么要记录,至少最近.
但最重要的是,它变得容易比较的LastUpdateDate的当前或编辑的记录屏幕上(需要存放它的网页,在一个饼干,无论,与价值的数据库。如果不符合,可以决定做什么。