我执行一个文件服务器。目前,如果两个用户开放相同文档,然后进行修改和保存修改,该文件的国家将定义(第一个用户的改变是永久保存,或二)。这是完全不能令人满意的。我考虑了两种可能解决这样的问题:

第一是锁定的文件,当它被打开过别人的第一次,以及解开它的时候它是关闭的。但是,如果该网络连接服务器的突然中断,该文件将留在一个永远锁定状态。显而易见的解决办法是定期发送信号服务器。如果服务器不接收K砰一排(K>1)从一个特别的客户,文件被锁定通过这个客户都锁。如果那个客户重新出现,文件被锁定再次,如果某人不是已经锁定他们。这还可以帮助客户应用程序(在运行的网络浏览器)终止意外,使其无法发送'退出,解开我的文件的信号服务器。

第二是储存的多个版本同一文件中保存的通过不同的用户。如果修改的文件都是在快速连续,该系统将提供无论是合并版本,或者选择优选版本。优化存储空间,只有文件的差异,应保持(只是喜欢源的控制软件)。

什么方法应选择,考虑到本连接服务器的可能 有的时候 是缓慢的,没有反应?应该如何参数(平的间隔,迅速连续时间间隔)是确定的?

P.S.不幸的是,我不能储存的文件在数据库。

有帮助吗?

解决方案

我的建议是什么喜欢你的第一个。当第一个用户(鲍勃)打开了文件,他获得一个锁使得其他用户只能阅读这份文件中。如果用户保存的文件时,他是在使用它,他把锁。只有当他退出该文件,这是解锁和其他人可以进行编辑。

如果第二次用户(凯特)打开了文件,同时Bob已经锁定它,凯特将得到一个消息,说该文件是不可编辑的,但她可以阅读它,直到它锁已被释放。

所以会发生什么时Bob取得锁,也许可以节省的文件一次或两次,但后来退出应用程序离开的挂锁?

为你自己说的,要求客户与锁定发送信号在一定的频率可能是最好的选择。如果你没有得到一个平从客户对于大量的时间,这实际上意味着他的客户没有响应了。如果这是一个网络应用程序可以使用javascript的坪。该文件是最后的救释放其锁和凯特现在可以获得。

一个平可以包含的名称的文件,客户有一个锁上,服务器可以计算时的最后一个乒为该文件被接受了。

其他提示

第一个选项,描述实质上是一个悲观锁定模型,而第二个是一个乐观的模式。选择哪一个真正涉及到一些因素,但基本上可以归结为如何业务要的工作。例如,它将不适当的不方便用户如果一份文件,他们需要的编辑被锁的另一个用户?会发生什么,如果一份文件被锁和某人去度假时与他们的客户连接?什么是有可能的竞争对每个文件-即怎么可能是认同的文件将是修改两用户在同一时间?, 如何本地化是修改有可能在一个单一文件?(如果相同的部分是定期修改,然后执行一个合并可能需要更长的时间比简单地作出改变再)。

假设论点是相对较低和/或大小的每一个变化是相当小的然后我可能会选择一个乐观的模型,该模型解决冲突使用自动或手动合并。一个版本的数量或检验和该文件的内容可用于确定如果一合并是必需的。

目前的文件公布的有限的一群人,他们每个人的工作在一个单独的主题。因此,不便介绍了通过锁是最小化。人们大多是延长现有的文件和纠正错误。

谈到悲观的模式,'左客户连接N天的情况是可以避免的通过设置锁定到期日期,说,前一天锁开始日期。因为文件的编辑都不意味着关键任务,并修改通过多个用户很少,这可能是足够的。

现在考虑的乐观模型。应该如何差异进行检测,如果该文件有一些规则的(说,分层)结构?如果没有?什么是成功的机会自动合并在这些案件?

情况变得更加复杂,因为一些文件(编辑通过的'管理员用户组)包含重要的构成的信息文件(全球指数,用户角色,等等)。我认为,锁定更多有利于的正是这种信息,因为它不改变日常的基础上。所以一些混合的解决办法可能是可以接受的。

你怎么想?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top