在其中一个Lotus notes db中,过于频繁的复制/保存冲突是导致计划代理和同时处理该文档的任何用户的原因。
有没有办法避免这种情况。
谢谢, H.P。
答案 0 :(得分:2)
除了合并冲突之外还有几个选项:
更改计划避免这种情况的最佳方法是让用户不太可能在访问系统时运行预定的代理。如果客户端文档上的LastContact字段在检查所有联系人文档时每小时由代理更新,则代理可能应该在一夜之间运行。
在用户操作上运行代理也可能是代理不应按计划运行,但应在用户执行某些操作时运行。例如,当用户保存支持的联系人文档时,运行代理以更新客户端文档。
将表单分成更小的位要考虑的第三件事是重新设计表单,以便不是每个数据都在主表单上。例如,如果客户端文档上的字段中当前存在与客户端的最近联系人的注释,则可以将设计更改为具有单独的ClientMeeting表单,会议上的注释将以嵌入视图或计算文本的形式显示在该表单中(或使用Xpages设计。
尽管我是一名开发人员,但我认为代表/保存更多是设计决策的结果,而不是其他任何事情。
答案 1 :(得分:0)
您可以使用相关表单上的“冲突处理”选项,并选择“合并冲突”或“合并/否冲突”,以便让Notes处理合并编辑冲突。
从帮助数据库:
At the "Conflict Handling" section of the Form Info tab, choose one of the following options for the form:
Create Conflicts -- Creates conflicts so that a replication conflict appears as a response document to the main document. The main document is selected based on the time and date of the changes and an internal document sequence number.
Merge Conflicts -- If a replication conflict occurs, saves the edits to each field in a single document. However, if two users edit the same field in the same document, Notes saves one document as a main document and the other document as a response document marked as a replication conflict. The main document is selected based on the criteria listed in the bullet above.
Merge/No Conflicts -- If replication occurs, saves the edits to each field in a single document. If two users edit the same field in the same document, Notes selects the field from the main document, based on time and date, and an internal document sequence number. No conflict document is generated, instead conflicting documents are merged into a single document at the field level.
Do Not Create Conflicts -- No merge occurs. IBM® Lotus® Domino(TM) simply chooses one document over another. The other document is lost.
答案 2 :(得分:0)
在Notes的更高版本中,存在文档锁定的概念,并且正确使用可以防止冲突(但也增加了复杂性)。
通常,当用户不在系统上时,计划在深夜运行代理时,可以避免大多数冲突。如果这不是一个选项,那么锁定可能是最好的解决方案。如果冲突不是太多,您可能会受益于添加过滤的视图以仅显示冲突,这将使findind和解决它们更容易。
答案 3 :(得分:0)
恕我直言,用户和代理之间冲突的最佳答案是确保它们在不同的文档上运行。即,有两个带有共同密钥的文档。如果在视图中以这种方式显示它们会很方便,它们可以是父和子,但它们不一定是。为了讨论的目的,只需将它们称为DocA和DocB即可。
DocA由用户阅读和更新。当用户查看DocA时,计算字段公式可以通过DbLookup或GetDocField从DocB中提取信息。用户永远不会更新DocB。
另一方面,DocB由代理读取和更新,但代理仅读取DocA。他们永远不会更新它们。如果您以任何其他方式设计应用程序,那么您必须使用锁定 - 这可能会导致无法在需要时更新某些内容,或者接受偶尔会发生冲突并且需要更新的事实待解决。
请注意,即使使用此策略,如果您有多个数据库副本,仍然可能会发生冲突。根据@Per Henrik Lausten的回答,您可以使用“表单”属性的“冲突处理”部分来帮助最大限度地减少复制冲突,但是既然您正在谈论现有的请同时请查看我对他的答案的评论,以获取有关您的内容的其他信息必须这样做才能使用这个功能。
答案 4 :(得分:0)
如果这是关键任务应用程序,请考虑使用lock-documents创建数据库。这意味着,每次用户打开文档时,都会创建一个单独的锁文档。
然后对代理进行编码,以查看代理想要修改的每个文档是否存在锁文档。如果是,请跳过该文档。
文档关闭应删除doc-lock。
应该在文档打开时创建lock-doc,而不仅仅是读取。这样,当用户以读取模式打开文档时,代理也将无法修改。这是为了禁止用户可能在之后更改为editmode并进行更改。
如果代理的修改时间很长,它也应该创建锁文档。