CN107810516A - 通过矢量时钟转换的实时分布式共同创作 - Google Patents
通过矢量时钟转换的实时分布式共同创作 Download PDFInfo
- Publication number
- CN107810516A CN107810516A CN201680037536.8A CN201680037536A CN107810516A CN 107810516 A CN107810516 A CN 107810516A CN 201680037536 A CN201680037536 A CN 201680037536A CN 107810516 A CN107810516 A CN 107810516A
- Authority
- CN
- China
- Prior art keywords
- editor
- long
- local
- range
- modification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/101—Collaborative creation, e.g. joint development of products or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/40—Support for services or applications
- H04L65/401—Support for services or applications wherein the services involve a main real-time session and one or more additional parallel real-time or time sensitive sessions, e.g. white board sharing or spawning of a subconference
- H04L65/4015—Support for services or applications wherein the services involve a main real-time session and one or more additional parallel real-time or time sensitive sessions, e.g. white board sharing or spawning of a subconference where at least one of the additional parallel sessions is real time or time sensitive, e.g. white board sharing, collaboration or spawning of a subconference
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- Entrepreneurship & Innovation (AREA)
- Theoretical Computer Science (AREA)
- Strategic Management (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- Tourism & Hospitality (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Data Mining & Analysis (AREA)
- Marketing (AREA)
- Multimedia (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文公开了用于在不具有中央文档管理器的情况下改善分布式环境中的实时共同创作的系统和方法。由于通信是非瞬时的,终端上文档的状态可能与进行编辑时编辑器上文档的状态不同。然而,不同的状态可以通过矢量时钟转换来调和。每个共同作者可以维护一个矢量时钟阵列来跟踪每个共同作者的文档状态。在发送编辑指示时,可以包括矢量时钟,使得处于修改状态的终端可以将编辑转换为符合文档的修改后的状态。相比于没有中央文档管理器的分布式环境中可能的,转换编辑使能实时实现更多的编辑。
Description
背景技术
文档的共同创作使特定系统的用户能够合作创建和编辑文档,其中编辑器共享针对给定文档所做的编辑。然而,共同创作可能会导致来自多位作者的编辑发生冲突(例如,一位作者删除了另一位作者正在编辑的区段)。此外,由编辑器进行的不同编辑可能需要不同量的处理才能忠实而安全地在终端上执行。忠实而安全地执行编辑的处理通常是时间密集型的,并且需要传输大量的数据。
发明内容
提供本概述是为了以简化的形式介绍将在以下具体实施方式部分中进一步描述的概念的选择。本发明内容并非旨在确定所要求保护的主题的所有特征,也并非旨在限制所要求保护的主题的范围。
这里公开了用于使能实时分布式共同创作的系统和方法。在共同创作的环境中,可以在编辑器和终端之间共享对文档的编辑。编辑器可以是在其处发起对文档的编辑的软件应用或设备,并且终端可以是将编辑传输到其上以显示的软件应用或设备。如将理解的,多个编辑器和终端可以同时发送和接收对给定文档的编辑,并且给定的软件应用或设备可以同时是共同创作环境中的编辑器和终端。这里描述的系统和方法可以被合并到编辑器和终端中。
当由编辑器进行编辑时,可以实时或在离散时间更新终端上显示的文档以反映该编辑。实时更新使终端能够在编辑器编辑时显示或合并编辑。相反,离散时间更新使终端能够显示自上次离散时间更新发生以来所做的编辑。当文档被保存时,可以发生示例性的离散时间更新,例如在定期/计划(例如,自动保存)的基础上的保存,当用户手动选择保存文档时,或者当发生导致文档被保存的另一个动作时。取决于离散时间更新的频率,在编辑器上输入改变和在终端上显示之间的时间可以有所不同。
传送实时更新以使终端能够在编辑器进行这些编辑的同时显示编辑器的编辑过程。可以理解的是,由于分隔共同作者之间的距离,处理改变(发送和接收两者)所需的时间以及计算设备中的时钟周期的性质,因此在编辑器进行编辑的时间与终端尝试执行编辑的时间之间将存在延迟;实时更新不是即时的。在此延迟之内,终端可以对文档进行其自身的编辑或执行来自其他编辑器的编辑,这可能会影响第一编辑器的编辑如何实现,或者实时实现第一编辑器的编辑是否安全。例如,编辑器可以在一个句子中插入一个词,但是当终端准备好执行插入时,该句子可能不再像编辑器编辑时那样出现;在延迟期间可能对该句子进行了修改,在进行编辑时编辑器可能不知道发生了改修改。根据所做的修改以及来自该编辑器的编辑,编辑可能导致实时更新暂时中止,直到发生离散时间更新为止,或者实时更新可能继续。
矢量时钟转换使得编辑器和终端能够应对在由编辑器进行编辑的时间和由终端实现编辑的时间之间的延迟期间进行的修改,并且从而避免中止实时更新。随着每次编辑时每个共同作者的矢量时钟被建立并且被发送,使得终端能够确定如何(或是否)相对于终端上的文档的当前状态来实现编辑。
通过使编辑器和终端能够在分布式共同创作环境中转换实时更新的位置,提供了改进的用户体验;使得以其他方式无法同时共同创作对文档的所有编辑的应用或设备的用户能够实时共同创作对文档的更大的编辑子集以及在离散时间共同创作所有编辑。另外,与集中管理的共同创作环境相比,网络、共同创作应用和/或其他设备的功能通过减少网络流量和提高容错性而得到改善。另外,通过提高共同创作系统实时编辑的能力,需要更少的离散时间更新,通过减少共同作者需要发送和处理的数据量来降低网络开销。因此,使用本公开的计算机可以改善计算机本身的功能或者影响网络或另一计算机的改进。
在下面的附图和描述中阐述了一个或多个方面的细节。通过阅读以下详细描述和查看相关附图,其他特征和优点将变得显而易见。应该理解,下面的详细描述只是解释性的而不是限制性的;本公开内容的适当范围由权利要求确定。
附图说明
合并并构成本公开的一部分的附图示出了本发明的各个方面。在附图中:
图1A-C示出使用矢量时钟转换来保持实时更新的非近似编辑;
图2A-C示出使用矢量时钟转换来保持实时更新的近似编辑;
图3是示出用于实现用于维持实时更新的矢量时钟转换的示例方法中涉及的一般阶段的流程图;
图4是可操作以减少暂时中止实时编辑的需要的共同创作引擎的框图;
图5是示出利用其可以实践示例的计算设备的物理组件的框图;
图6A和图6B是可以利用其实施方面的移动计算设备的框图;且
图7是其中可以实践各个方面的分布式计算系统的框图。
具体实施方式
以下的详细说明参照附图。尽可能地,在附图和以下描述中使用相同的附图标记来表示相同或相似的元件。尽管可以描述本公开的各方面,但修改、改动和其他实现方式是可能的。例如,可以对附图中所示的元件进行替换、添加或修改,并且可以通过对所公开的方法替换、重新排序或添加阶段来修改本文所描述的方法。因此,以下的详细描述并不限制本公开,而是由所附权利要求限定本公开的适当范围。示例可以采取硬件实现或完全软件实现的形式,或组合软件和硬件方面的实现。因此,以下详细描述不被认为是限制性的。
这里公开了用于使能实时分布式共同创作的系统和方法。在共同创作的环境中,可以在编辑器和终端之间共享对文档的编辑。编辑器可以是在其处发起对文档的编辑的软件应用或设备,并且终端可以是编辑被传送到以进行显示或合并的软件应用或设备。如将理解的,多个编辑器和终端可以同时发送和接收对给定文档的编辑,并且给定的软件应用或设备可以同时是共同创作环境中的编辑器和终端。这里描述的系统和方法可以被合并到编辑器和终端中。
当由编辑器进行编辑时,可以实时或在离散时间更新终端上显示的文档以反映该编辑。实时更新使终端能够在编辑器编辑时显示或合并编辑。相反,离散时间更新使终端能够显示自上次离散时间更新发生以来所做的编辑。当文档被保存时,可以发生示例性的离散时间更新,例如在定期/计划(例如,自动保存)的基础上的保存,当用户手动选择保存文档时,或者当发生导致文档被保存的另一个动作时。取决于离散时间更新的频率,在编辑器上输入改变和在终端上显示之间的时间可以有所不同。
传送实时更新以使终端能够在编辑器进行这些编辑的同时显示编辑器的编辑过程。可以理解的是,由于分隔共同作者之间的距离,处理改变(发送和接收两者)所需的时间以及计算设备中的时钟周期的性质,因此在编辑器进行编辑的时间与终端尝试执行编辑的时间之间将存在延迟;实时更新不是即时的。在此延迟之内,终端可以对文档进行其自身的编辑或执行来自其他编辑器的编辑,这可能会影响第一编辑器的编辑如何实现,或者实时实现第一编辑器的编辑是否安全。例如,编辑器可以在一个句子中插入一个词,但是当终端准备好执行插入时,该句子可能不再像编辑器编辑时那样出现;在延迟期间可能对该句子进行了修改,在进行编辑时编辑器可能不知道发生了改修改。根据所做的修改以及来自该编辑器的编辑,编辑可能导致实时更新暂时中止,直到发生离散时间更新为止,或者实时更新可能继续。
矢量时钟转换使得编辑器和终端能够应对在由编辑器进行编辑的时间和由终端实现编辑的时间之间的延迟期间进行的修改,并且从而避免中止实时更新。随着每次编辑时每个共同作者的矢量时钟被建立并且被发送,使得终端能够确定如何(或是否)相对于终端上的文档的当前状态来实现编辑。在一个方面,矢量时钟转换使得处于不同矢量时钟状态的共同作者能够在文档的单个矢量时钟状态上会聚,从而在先前的共同创作环境可能已经停止实时更新的情况下提供连续的实时更新。
矢量时钟转换通过减少共同作者所需的机器数量,减少需要传输和处理的数据以及提高实时编辑的可靠性来改善共同创作环境中涉及的计算设备和网络。与依赖于主共同作者或提供要共同创作的文档的集中式服务器的共同创作解决方案不同,使用矢量时钟转换的每个共同作者可以是分布式共同创作环境中的对等者,对共同创作的文档具有相同的权限。另外,与比较某一区段的几个不同版本以寻找共同点和差异(例如,最长公共子序列(LCS)函数)的共同创作解决方案不同,矢量时钟转换减少了共同作者之间传输的数据量,使它们能够实时共享编辑,并消耗更少的带宽和更少的处理资源来合并这些共享的编辑。
矢量时钟转换使得能够影响区段的编辑被发送到对等共同作者,而不是将整个区段(或子序列)发送到对等体或将编辑发送到中央服务器。共享的编辑包括矢量时钟阵列(VCA),使得接收终端可以解决在编辑和自编辑器进行编辑起对终端所做的任何修改之间的任何冲突。终端可以使用VCA根据修改来解释编辑,使得编辑被合并到受影响区段的正确位置。例如,如果编辑器进行编辑以将文本添加到段落,并且包括文本的添加/删除的修改已经改变了段落的编址方案,则矢量时钟转换将使编辑能够正确地放置在受影响的段落中。矢量时钟转换从而使终点能够合并之前由于冲突而可能导致实时分布式共同创作暂时中止的编辑。
通过使编辑器和终端能够在分布式共同创作环境中转换实时更新的位置,提供了改进的用户体验;使得以其他方式无法同时共同创作对文档的所有编辑的应用或设备的用户能够实时共同创作对文档的更大的编辑子集以及在离散时间共同创作所有编辑。另外,与集中管理的共同创作环境相比,网络、共同创作应用和/或其他设备的功能通过减少网络流量和提高容错性而得到改善。另外,通过提高共同创作系统实时编辑的能力,需要更少的离散时间更新,通过减少共同作者需要发送和处理的数据量来降低网络开销。因此,使用本公开的计算机可以改善计算机本身的功能或者影响网络或另一计算机的改进。
图1A-C和图2A-C示出了在共同创作会话期间可以在单个区段中发生的不同类型的编辑。为了介绍在本公开中使用的用于不同类型的编辑的概念和术语的目的,图1A-C和图2A-C示出了由两个共同作者以逐步方式进行的单独编辑。然而,由两个共同作者进行的单独编辑的上述示例的讨论并不意图限制所要求保护的主题的范围。可以理解的是,两个以上的共同作者可以在共同创作环境中共享编辑,并且作为编辑器的设备或应用可以同时是终端,反之亦然
在图1A-C和图2A-C的示例中,由第一共同作者进行的编辑以粗体格式示出,并且由第二共同作者所做的编辑以斜体格式示出以在视觉上将各个编辑彼此区分开并且区分正在编辑的内容。如将理解的,共同作者可以使用或不使用各种示例中所示的格式或者使用与所示格式不同的格式(例如,下划线、删除线、文本颜色、文本大小、字体)来进行编辑。
虽然图1A-C和图2A-C中给出的示例与被添加到段落的字符/词有关,但是本领域技术人员将从本公开中理解,其他内容对象可以添加或从文档的区段移除,包括但不限于:字符、词语、图像、图表、表格、活动控制对象、超链接和区段。类似地,这些区段不限于段落,而是可以包括但不限于:电子文档的可单独寻址的段落、页面、文本框、单元格、单元格的列、单元格的行、表格、工作表、幻灯片或其他区段。本领域技术人员将理解,电子文档本身(或其区段)可以添加或移除的区段,这可以使用本公开的系统和方法来实现。
在一些方面,当区段被添加到文档或从文档移除时,或内容被添加到区段或从区段移除时,共同作者可以将其焦点(包括光标的位置)移动以应对添加或删除。在其他方面,当编辑发生时,共同作者可保持其原始焦点或失去焦点。如关于图1A-C和图2A-C所讨论的,可以类似于现有内容或区段的转换来调整焦点的位置。
关于图1A-C和图2A-C所讨论的每个编辑也可以在本公开中与矢量时钟相关地进行讨论。如本领域技术人员将理解的,矢量时钟可以用作共同作者的区段的状态的表示。共同作者可以与几个矢量时钟相关联,每个矢量时钟表示一个相应的区段或代表整个文档。此外,每个共同作者可以具有矢量时钟的阵列,其反映他们对给定区段的理解,以及共同作者认为该对于给定区段的其他共同作者而言是什么状态。
在本公开内,为了清楚起见,可以使用包括共同作者指示符和状态指示符的格式来引用矢量时钟。例如,由A0表示的矢量时钟将表示共同作者“A”(即,第一共同作者)和针对给定区段的“零”状态,而由B1表示的矢量时钟将表示共同作者“B”(即,第二共同作者)以及针对给定区段的“一”状态。如将理解的,该格式是为了在本公开内容中进行解释的目的,并且矢量时钟可以使用区分区段类型、用户类型和/或除了那些用于示例格式之外的其他可能状态的其他指示符、推断的指示符或更详细的指示符。例如,状态可以包括该区段的内容的校验和或散列值和/或自从上次离散时间更新以来所做的改变的计数的表示。
可以在用于示出给定的共同作者相对关于每个涉及的共同作者的区段的状态的理解的给定区段(或文档)的阵列中存储矢量时钟。在本公开中,可以相对于共同作者指定符来讨论用于给定区段(即,其VCA)的每个矢量时钟的阵列。例如,由A[A0,B0]表示的VCA指示共同作者“A”(即,第一共同作者)理解与VCA相关联的区段对于第一共同作者(例如A0)和第二共同作者(例如B0)两者具有零状态。在另一个示例中,由B[A0,B0,C0]表示的VCA指示共同作者“B”(即,第二共同作者)理解与VCA相关联的区段对于第一、第二和第三共同作者具有零状态。可以理解的是,随着更多共同作者参与到共同创作环境中,VCA将会成长为包括相关的矢量时钟。类似地,随着共同作者离开共同创作环境(例如,通过注销,丢失写权限,超时),VCA的大小可以相应地减小。
矢量时钟可以响应于共同作者的区段或文档中的改变而增加。为了清楚起见,在本公开中,将使用符号“→”来说明矢量时钟的值的递增。例如,用于区段的初始状态的矢量时钟可以被初始地设置为零(例如,A0),并且当第一共同作者在本地进行编辑时可以增加到1(例如,A0→A1)。因此,第一共同作者的VCA将反映该编辑(例如,A[A1,B0])。类似地,当接收到远程编辑时,当本地执行远程编辑时,第一共同作者的VCA将反映区段的第二共同作者状态的新理解(例如,A[A1,B0→B1])。当发生离散时间更新时,每个共同作者的VCA将会聚(例如,将在所有包括的矢量时钟中反映相同的状态),因为所有活跃的共同作者将对文档具有相同理解。在各个方面中,当响应于离散时间更新而会聚时,所有矢量时钟的状态可以被重置为零。
因为由于传输延迟(例如,光速,网络速度)、处理延迟(用于发送和接收编辑两者)、时钟周期的性质等导致编辑不能瞬时在共同作者之间共享,所以VCA使得每个共同作者能够追踪分布式共同创作环境中的事件(例如,编辑)的因果关系,并确定这些事件如何相互影响。然而,当不同的共同作者同时进行两次或更多次编辑时,可能会产生可能破坏实时更新的冲突。
本公开中的术语“同时”将被理解为相对于矢量时钟而不是绝对时钟使用。当(相对于矢量时钟)同时进行编辑时,可以在获知另一个共同作者的编辑之前的滞后时间段内进行编辑。例如,在具有100ms滞后时间段(包括传输延迟和处理延迟)的共同创作环境中,由第一共同作者在本地合并的编辑可以对于从远程共同作者接收到的在本地编辑不能考虑到的100ms前所做的任何编辑而言都是同时的,或者对于将来达到100ms所做的任何编辑而言都是同时的,在此期间,远程共同作者不能考虑本地编辑。这些编辑将被认为是同时进行的,因为远程共同作者对该区段的理解与在进行每个编辑时本地共同作者的理解是相同的。换句话说,当每个共同作者开始进行它们各自的编辑(例如,A[A0,B0]和B[A0,B0])时,第二共同作者的针对第一共同作者的矢量时钟处于与第一共同作者针对其自身的矢量时钟相同的状态,尽管编辑没有发生在同一绝对时间。如将理解的,多于一个的远程编辑可被认为是对于本地编辑是同时的,并且多个远程编辑可被认为是彼此同时的,例如,当在远程共同作者收到本地编辑之前,多个远程共同作者进行编辑或单个远程共同作者进行多个编辑时。
图1A-C示出使用矢量时钟转换来保持实时更新的非近似编辑。区段中的非近似编辑是在同一区段中进行的这些编辑,但是在区段中的不同位置。文档中的非近似编辑也可以包括在不同位置添加或删除的区段的编辑。如所示出的,在每个共同作者进行编辑并且实现从另一个共同作者接收的编辑时,描绘了第一共同作者的实例100A(左)和第二共同作者的实例100B(右)。可以理解的是,两个以上的共同作者可以在共同创作环境中共享编辑,并且作为编辑器的设备或应用可以同时是终端,反之亦然。
图1A示出了共同创作的区段的开始状态。在这种状态下,该区段的第一共同作者的实例100A和第二共同作者的实例100B(统称为共同作者的实例100)是相同的并且显示文本“The brown fox”。每个共同作者的VCA可以反映开始状态(例如A[A0,B0],B[A0,B0])或者简单地彼此相等(例如A[A9,B4],B[A9,B4])。每个共同作者可以被提供实时共同创作的文档的实例100,将被分成多个区段。在各个方面中,区段可以包括但不限于:段落、文本行、词语、表格、图表、图像、图像层、评论等。
图1B示出了自图1A的进展,其中本地编辑被合并到实时共同创作的文档的每个共同作者的实例100中。如图所示,第一共同作者的本地编辑110A是使用粗体格式(和空格字符)添加词语“QUICK”,而第二共同作者的本地编辑110B是使用斜体格式添加空格字符和词语“JUMPS”(统称为本地编辑110)。
在所示的示例中,共同作者的本地编辑110是同时进行的,共同作者的实例100中的每一个现在都是不同的,并且相关联的VCA将相应地被更新(例如,A[A0→A1,B0],B[A0,B0→B1])。当在本地进行编辑并且实时更新处于活动状态时,编辑的指示以及受影响区段的本地共同作者的VCA被发送给远程共同作者。例如,第一共同作者可以发送已经在给定区段中的第五位置(即,在词语“The”后面的空格之后)插入“QUICK<空格>”的指示,并且第二共同作者可以发送它已经在给定区段的第十四个位置(即在“fox”之后)插入了“<空格>JUMPS”的指示。
在各个方面中,该指示可以是由编辑器用来在本地合并编辑的实际编辑命令。例如,第一共同作者的本地编辑110A可以通过命令插入(在5处的“QUICK<空格>”)而被合并到第一共同作者的后备存储中,该命令与第一共同作者的针对受影响的区段的VCA一起被发送给第二共同作者。类似地,第二共同作者的本地编辑110B可以与相关联的VCA一起被发送给第一共同作者,以合并共同创作的文档的第一共同作者的实例100A中。
图1C示出了自图1B的进展,其中从实时共同创作的文档的另一个共同作者的实例100接收的远程编辑120通过适当的转换而本地地合并至本地实例中的位置。如图所示,第一共同作者的本地编辑110A对应于第二共同作者的实例100B中的第一共同作者的远程编辑120A,并且第二共同作者的本地编辑110B对应于第一共同作者的实例100A中的第二共同作者的远程编辑120B。
在所示的示例中,由于在该区段的第五位置处插入“QUICK<空格>”的命令仍然会导致远程编辑120的适当显示(即,在“The<空格>”之后),所以第一共同作者的远程编辑120A可被合并到第二共同作者的实例100B中,而不进行位置转换。然而,如果其位置未被转换,则来自上述示例的第二共同作者的远程编辑120B将被插入到第一共同作者的实例100A的错误位置中。在进行了第一共同作者的本地编辑110A之后在第一共同作者的实例100A中的第十四个位置处插入“<空格>JUMPS”将导致该区段显示“QUICK brow JUMPSn fox”而不是“QUICK brown fox JUMPS”,现在需要在第二十个位置插入“<空格>JUMPS”,以便其在“fox”之后显示。
为了使远程编辑120能够被实时地合并分布式共同创作环境中的适当位置,编辑的指示可以经历矢量时钟转换以应对与远程编辑120同时的对该区段所作的修改。该修改可以是在终端上进行的本地编辑110,或者编辑器在编辑器进行其编辑时所不知道的来自其他共同作者的远程编辑120。每个共同作者的文档后备存储库可以存储自上一次离散时间更新以来所做的每一个编辑,无论是本地还是远程发起的,并且相关联的矢量时钟指示何时做出这些编辑以确定如何实现矢量时钟转换。
当矢量时钟转换发生时,终端可以确定在远程编辑120中指定的位置以及自从上次离散时间更新以来进行的任何修改所指定的位置(例如,先前合并的本地编辑110或其他远程编辑120)并且确定修改是否影响远程编辑120的定位。例如,比较编辑将被定位的位置,以确定修改是是远程编辑120的“上游”还是“下游”。作为修改的上游的远程编辑120(即,对远程编辑而言修改处于下游)将比修改更早地合并到共同创作的区段的编址方案中,因此其编辑的指定位置将根据修改适当地放置编辑。然而,作为修改的下游的远程编辑120可能需要将其编辑的指定位置转换以应对修改。在各个方面,上游/下游确定可以包括比较编辑的位置,其中指定较小位置值的编辑可以被确定为在指定较大位置值的编辑的上游(例如,位置0在位置1的上游)。
当远程编辑120被确定为是修改的上游时,其可以按照原来所指定的来实现。在图1A-C所示的示例中,第一共同作者的远程编辑120A在第二共同作者的实例100B中的第二共同作者的本地编辑110B的修改的上游。继续上面的示例,当第一共同作者的远程编辑120A被合并到第二共同作者的实例100B中时,由第一共同作者指定的位置将保持在第五位置,因为修改是在第一共同作者的远程编辑120A的下游进行的。
当远程编辑120被确定为是修改的下游时,其位置值可以被转换以应对任何修改,使得其被适当地显示。在图1A-C所示的示例中,第二共同作者的远程编辑120B是第一共同作者的实例100A中的第一共同作者的本地编辑110A的修改的下游。为了防止第二共同作者的远程编辑120B使该区段显示“QUICK brow JUMPSn fox”,来自第二共同作者的远程编辑120B的位置值可以转换受上游修改影响的字符的数量(例如,在上面的示例中位于下游的六个位置,以应对插入“QUICK<空格>”的修改的六个字符,使命令从插入(“14”处的“<空格>JUMPS”)改变为插入(20处的“<space>JUMPS”)。类似地,如果上游修改要删除内容,则远程编辑120可以在上游转换对应的距离。如果上游修改或组合的上游修改不导致移除内容的净插入或移除(例如,格式改变,偏移添加和删除),则下游远程编辑120可保持其指定位置。如将理解的,多个修改可以将它们各自的编辑组合以确定转换下游远程编辑120多少距离(以及什么方向),并且组合的距离可以导致不转换。然后,远程编辑120可以在转换了其指定位置的情况下实现。
如将理解的,包括位置范围而非离散位置的远程编辑120的指示也可以被类似地转换以应对上游修改。例如,将粗体格式应用于文本范围的远程编辑120可以将其指定的范围转换以应对上游修改(例如,格式(粗体,从5到12)→格式(粗体,从8到15))。在各个方面中,当指定的范围与修改重叠(例如,修改落入指定范围的至少一部分内)时,终端可以将远程编辑120应用于重叠的修改,或者暂时中止对该区段的实时更新使得远程编辑120和重叠的修改之间的任何冲突都可以在离散时间更新中解决。
也将被理解的是,远程编辑120可以位于上游修改和下游修改之间。因为下游修改不影响远程编辑的位置,所以当确定转换远程编辑120的位置什么距离或方向时,可以忽略下游修改。
在终端可以在本地实现远程编辑120之前,将所发送的VCA与本地VCA进行比较以确定终端是否处于适当状态以实现远程编辑120。因为编辑在分布式共同创作环境中构建于该区段之上,所以所发送的VCA必须与本地VCA具有因果关系,以便将远程编辑120合并。对于存在的因果关系,终端必须知道所发送的VCA所指示的所有编辑。在第一示例中,具有VCA A[A0,B0]、接收所发送的VCA B[A0,B1]以及递增B0→B1的编辑的终端将知道由所发送的VCA指示的所有编辑,并且存在因果关系。类似地,在第二示例中,具有VCA A[A2,B0]、接收所发送的VCA B[A0,B1]以及递增B0→B1的编辑的终端将知道所发送的VCA所指示的所有编辑和所有在本地进行的编辑(递增A0→A1→A2),并且存在因果关系。然而,在第三示例中,具有VCA A[A0,B0]、接收所发送的VCA B[A0,B2]以及递增B1→B2的编辑的终端将不知道所有由发送的VCA指示的编辑,这是因为编辑递增B0→B1未知,如VCA A[A0,B0]指示,并且不存在因果关系。另外,在第四示例中,具有VCA A[A0,B0,C0]、接收所发送的VCA B[A0,B1,C1]以及递增B0→B1的编辑的终端将不知道由所发送的VCA指示的全部编辑,因为编辑递增C0→C1未知,如VCA A[A0,B0,C0]表示,并且不存在因果关系。
当存在因果关系时,如由VCA所指示的,可以将编辑实时地合并到共同创作的文档的本地实例中。如上所述,合并可以涉及转换远程编辑120的位置,使得其考虑由编辑器在进行其编辑之前不知道的由终端合并的任何修改(例如,由终端或其他共同作者进行的同时编辑)。
当不存在因果关系时,如VCA所指示的,实时更新可以暂时中止。由于终端没有像编辑器那样对区段状态有全面(或更全面)的理解,所以实现指示的编辑可能会导致终端上对该区段的异常行为(例如,没有应对影响远程编辑120的位置改变)。换句话说,当终端认识到对该区段的理解不足时,可以停止实时地合并远程编辑120,使得它不会不适当地显示它们。
在一些方面中,当实时更新暂时中止时,共同创作的区段可以被锁定,使得不可以在本地进行额外的编辑。在这些方面中的一些方面中,锁定可以是本地的,使得对文档有完全理解的任何远程共同作者可以继续进行编辑。而在其它方面,当一个共同作者对该区段有不完全的理解时,该锁定可以被传送给远程共同作者,以便将来的远程编辑120不会加剧给定共同作者的不完全理解。
当共同作者恢复对该区段的完整理解时,可以恢复实时更新,并且去除编辑的任何锁定。共同作者可以由于离散时间更新的原因或通过接收其理解中缺少的远程编辑120来恢复对该区段的完整理解。例如,当终端从编辑器接收到乱序的远程编辑120(例如,B0→B1之前的B1→B2)或者在编辑器接收到它之前接收到共同作者的远程编辑120(例如,A[A0,B0,C0]处的编辑器在接收到C[A0,B0,C0→C1]的指示之前,接收到B[A0,B0→B1,C1]的指示。因此,即使在实时更新暂时中止的情况下,共同作者也可以继续接收远程编辑120并将其缓存,以便稍后合并,以便在下一次离散时间更新发生之前纠正其对该区段的不完全理解。
类似地,当两个或更多个共同作者将区段添加到文档时,在编址方案中较早添加的区段(即较低地址或“上游”)可能会影响以后添加的区段被添加到文档的方式和位置(即在较高地址,或“下游”)。区段使得文档能够被分成可单独寻址的部分,并且可以包括可单独寻址的段落、页面、文本框、单元格、单元格的列、单元格的行、表格、工作表、幻灯片以及其他电子文档的划分。换言之,文档可以被认为是特殊的区段,其中区段(例如,段落、表格、页面、单元格)是其内容。因此,本领域的技术人员将能够关于被添加到文档或从文档移除的区段应用关于被添加到区段或从区段移除的内容给出的示例。
图2A-C示出了使用矢量时钟转换来保持实时更新的近似编辑。区段中的近似编辑是在同一区段中进行的并在该区段的相同位置中进行的编辑。文档中的近似编辑是在文档的相同位置进行的编辑(例如,在该位置添加一个区段或者移除同一区段或同一区段的一部分)。如图所示,第一共同作者的实例200A(左)和第二共同作者的实例200B(右)被描绘为每个共同作者进行编辑并实现从另一个共同作者接收的编辑。可以理解的是,两个以上的共同作者可以在共同创作环境中共享编辑,并且作为编辑器的设备或应用可以同时是终端,反之亦然。
图2A示出了共同创作的区段的开始状态。在该状态下,第一共同作者的实例200A和第二共同作者的实例200B两者(统称为共同作者的实例200)是相同的并且显示文本“你最喜欢什么颜色?(What is your favorite color?)”。可以向每个共同作者提供一个实时地共同创作的文档实例,其分成几个区段。在各个方面中,区段可以包括但不限于:段落、文本行、文字、表格、图表、图像、图像层、评论等。
图2B示出了自图2A的进展,其中本地编辑被合并到实时地共同创作的文档的每个共同作者的副本中。如图所示,第一共同作者的本地编辑210A是使用粗体格式添加词语“蓝色(BLUE)”,而第二共同作者的本地编辑210B是使用斜体格式添加词语“黄色(YELLOW)”(统称为本地编辑210)。
在所示出的示例中,共同作者的本地编辑210是同时进行的,因此每个共同作者的实例200现在不同,并且相关联的VCA将相应地被更新(例如,A[A1,B0],B[A0,B1])。当在本地进行编辑并且实时更新处于活动状态时,编辑的指示以及受影响区段的本地共同作者的VCA被发送给远程共同作者。例如,第一共同作者可以发送它已经在紧接问号之后(即,该区段中的第二十九个位置)插入“BLUE”的指示,并且第二共同作者可以发送它已经在紧接问号之后(即该区段中的第二十九个位置)插入“YELLOW”的指示。
出于位置转换的目的,近似编辑以与非近似编辑进行不同的处理。因为基于它们指定的位置,近似编辑既不是在彼此上游也不是在彼此下游,指定的位置是相同的,所以近似编辑需要替代的转换方案。
图2C示出了自图2B的进展,其中在本地合并了从共同创作的文档的其他共同作者的实例实时接收的远程编辑220。因为本地编辑210是在与由远程编辑220指定的相同位置处进行的,所以共同作者可应用各种近似编辑转换方案以避免近似编辑之间的冲突。
在所示的示例中,近似编辑被显示为彼此相邻并且在每个共同作者的实例200上以相同的顺序显示。在各种其他示例中,可以引入偏移以分离近似编辑的显示(例如空格、制表符、斜杠字符、逗号字符),但是为使每个共同作者对被编辑的区段具有相同的理解,近似编辑的顺序和偏移的使用必须是相同的。
因为共同作者在分布式共同创作环境中工作,所以没有一个共同作者(或中央服务器)具有优先权来确定如何解决近似编辑;每个共同作者将需要自己就如何在其各自的实例200中显示近似编辑来达到相同的确定。在各个方面,顺序可以基于VCA,使得对应于VCA中的较早矢量时钟的共同作者将首先显示其近似编辑。例如,具有由第一指示符“A”表示的矢量时钟的第一共同作者可以使其近似编辑在具有由第二指示符“B”表示的矢量时钟的第二共同作者之前显示,并且第一和第二共同作者都将使它们的近似编辑在具有由第三指示符“C”表示的矢量时钟的第三共同作者之前显示,等等。通过使用VCA来确定在多个共同作者的实例200上显示近似编辑的单个顺序,共同作者可以避免必须包括时间戳或其他排序指示符,从而减少网络开销。
为了适当地设置近似编辑的位置,共同作者可以使用共同作者的顺序来确定哪个近似编辑将在彼此的上游或下游,并相应地转换远程编辑220的位置。例如,第一共同作者可以被认为在所有其他共同作者的上游,第二共同作者可以被认为在第一共同作者的下游但是在所有其他共同作者的上游,等等。来自上游共同作者的远程编辑220不需要被转换;它们的位置将自然地转移修改,以适当地显示来自下游共同作者的修改上游的远程编辑220。例如,图2C中的第一共同作者的远程编辑220A可以根据由VCA指示的指定顺序被合并,以使其出现在第二共同作者的本地编辑210B的上游。然而,来自下游共同作者的远程编辑220被转换由上游修改添加或去除的内容的量,以在适当位置处出现来自上游共同作者的修改的下游。例如,图2C中的第二共同作者的远程编辑220B可以向下游转换四个位置(如由第一共同作者的本地编辑210A添加的内容的数量占据四个位置)以出现在第一共同作者的本地编辑210A之后。在偏移被插入在近似编辑之间的各个方面中,远程编辑220的内容可以被转换任何额外的位置以应对偏移的插入。
终端可以使用VCA来相对于彼此在正确位置中合并一系列远程编辑220。例如,如果第一共同作者要进行一系列编辑以插入“BLUE”的键入,则当每个字符被键入时,第一共同作者的VCA将从A[A0→A1→A2→A3→A4,B0]递增,这确立了这些编辑相对于彼此合并的顺序。类似地,如果第二共同作者键入“YELLOW”,则其VCA将相应地更新(例如,B[A0,B0→B6])。当一系列远程编辑220被发送给远程共同作者时,由于给定系列中的所有编辑与另一系列中的第一编辑同时进行,因此每个编辑将按照其被合并的顺序进行转换;即进行这些编辑的顺序。例如,第二共同作者的一系列远程编辑220B(例如,插入(在29处为“Y”),插入(在30处为“E”,等等))将使其指定位置中的每一个转换由第一共同作者的一系列本地编辑210A添加(或移除)的内容量(例如,转换四个位置来应对在第二共同作者的编辑的上游添加“B”,“L”,“U”和“E”)。
通过转换远程编辑器220并将它们按原始共同作者进行的顺序合并,远程共同作者具有能够适当地显示由单个共同作者在相同位置进行的多个远程编辑220的优点。尽管终端可以实时且按正确的顺序从给定的共同作者接收这些编辑的指示,但是包含VCA使得终端能够确定合适编辑的正确顺序,即使当它们被无序地接收或指定相同的位置。例如,共同作者按住删除键或者修复字符的遗漏(例如,键入“BUE”,然后将焦点移动到在“U”和“E”之间键入“L”)可以进行具有可被正确应用的同一位置的多次编辑,即使当终端通过参考包含在发送的VCA中的矢量时钟而乱序接收时。
在近似编辑影响对内容的相同编辑的方面中,终端可通过仅实际合并编辑之一来有效地合并两个编辑。例如,如果两个共同作者从一个段落或同一个单元格的内容中删除了同一个词语,则终端将通过合并本地编辑210而有效地合并了远程编辑220。类似地,当第一共同作者删除整个句子时,而第二共同作者已经从该句子中删除了一个词语,编辑可能重叠,并且两个编辑中的较大者可以由两个共同作者应用。在某些方面,重叠的编辑可能会导致对于受影响的区段暂时中止实时更新,以便在离散时间更新中解决任何冲突。
在不能解决冲突的情况下,可以暂时中止实时更新,直到发生离散时间更新为止。在某些方面,当实时更新暂时中止时,可以提示共同作者将他们的工作保存在单独的文件中,以在冲突解决移除或拒绝编辑的情况下保留其编辑。
图3是示出用于实现用于保持实时更新的矢量时钟转换的示例方法300中涉及的一般阶段的流程图。方法300在操作310处由终端合并修改时开始。
在操作310处在终端上合并的修改可以是本地编辑110或远程编辑120。当修改是本地编辑110时,终端可以将本地编辑110的指示发送给共同创作环境中的任何共同作者以供那些共同作者合并为远程编辑120。当修改是远程编辑120时,如将理解的那样,作为修改的来源的共同作者与作为在操作320中接收到的远程编辑120的来源的共同作者不同。当合并修改时,相应地更新终端的VCA中的针对受影响区段的适当的矢量时钟(例如,针对本地编辑110的A[A0→A1,B0,C0],针对远程编辑120的A[A0,B0,C0→C1])。方法300然后进行到操作320。
在操作320处,终端接收远程编辑120及其相关联的VCA。方法300然后进行到决策操作330,其中针对被编辑的文档或区段将所发送的VCA与本地VCA进行比较,以确定远程编辑120是否与本地实例是因果关系,并且因此可以实时合并。如果远程编辑120缺乏与本地实例的因果关系,例如通过将远程编辑120建立在不知道终端的信息的基础上,则不能安全地实时合并,因为这样做会对本地实例有未知的影响;在发送本地合并非因果远程编辑120之后进行的本地编辑110时,远程编辑120可能或可能不会被正确放置,并且其错放可能级联以负面影响稍后接收的远程编辑120并导致远程共同作者的异常行为。
如果在决策操作330处确定远程编辑120与本地实例不是因果关系(例如,VCA的比较指示本地实例缺少信息或编辑),则方法300结束,使得实时更新暂时中止,直到因果关系恢复为止。在各个方面中,当通过随后接收到填充本地实例理解中的任何间隙的远程编辑120(例如,在操作320处接收到远程编辑120时由发送的VCA指示但终端未知的其它远程编辑120)来恢复因果关系时,终端保留非因果关系的远程编辑120用于稍后合并。当离散时间更新或合并操作发生时,因果关系也被恢复,从而将共同创作的所有文档实例的状态设置为相同的状态。
如果在决策操作330处确定远程编辑120与本地实例是因果关系,则方法300进行到决策操作340。在决策操作340,将所发送的VCA与本地VCA进行比较以确定远程编辑120是否与修改同时进行。
如果在决策操作340处确定远程编辑120没有与该修改同时进行,则确定做出远程编辑120的共同作者在进行远程编辑120时已经知道该修改。方法300因此进行到操作350,其中远程编辑120在指定位置处被合并到本地实例中,并且相应地更新本地VCA。方法300然后结束。
如果在决策操作340处确定远程编辑120已与修改同时进行,则确定进行远程编辑120的共同作者在进行远程编辑120时不知道该修改。方法300因此前进到决策操作360,在决策操作360处确定修改和远程编辑120是否是近似编辑。
当在决策操作360处确定修改和远程编辑120是近似编辑(即,远程编辑120指定要在该修改也被指定的文档或区段中的位置进行合并)时,方法300进行到操作365。否则,方法300继续进行决策操作370。
在操作365处,设置远程编辑120的顺序和修改。为了确保共同创作文档的每个实例以相同的顺序显示编辑,当编辑是近似编辑时,设置近似编辑将被认为相对于其它位于上游的顺序,尽管两个近似编辑指定了文件或区段中要进行合并的相同的位置。
在各个方面中,在操作365中设置的顺序可以基于所发送的VCA中的共同作者的布置或所发送的VCA中的共同作者的指示。在这样的方面,为了确保分布式共同创作环境中的共同作者的共享排序,每个共同作者的VCA中的矢量时钟的顺序将是相同的,或者每个共同作者的指示将在共同作者之中是一致的;由于所有共同作者必须就如何对多个共同作者排序达成一致,所以不会给予本地共同作者作为“第一”共同作者的偏好。在一些方面,可以基于他们何时加入共同创作环境来给予共同作者顺序。为了防止同时加入,在一些方面中,共同作者可能被限制为对共同创作的文档的只读访问,直到离散时间更新发生为止,此时指示符被分配给在整个共同创作环境中一致的每个共同作者。在对于近似编辑设置了顺序之后,方法300从操作365进行到决策操作370。
在决定操作370处,评估远程编辑120和修改的相对位置。当评估非近似编辑的相对位置时,比较由远程编辑器120和修改所指定的位置,以确定在该区段的定位系统中哪一个是上游而哪一个是下游。例如,当修改在区段的定位系统中指定比在远程编辑120指定的较低的位置(例如,对于修改的位置n相对于对于远程编辑120的位置(n+1))时,修改被确定为在远程编辑120的上游。当评估近似编辑的相对位置时,使用操作365中设定的顺序来评估哪一个是上游,哪一个是下游。例如,当远程编辑120按设定顺序在修改之前时,远程编辑120被确定为在修改的上游。可以理解的是,“上游”和“下游”的概念是彼此相反的;说明A在B的上游等同于说明B在A的下游。
当确定修改在远程编辑120的上游时,方法300进行到操作380。在操作380,计算远程编辑120的转换后的位置,由此远程编辑120指定的位置通过矢量时钟转换而被转换,以应对修改及其对共同创作区段的影响。由远程编辑120指定的位置可以根据修改如何影响该区段而向上游或下游转换。例如,如果修改要从该区段移除内容,则远程编辑120可以使其指定的位置向上游转换(例如,其指定的位置值被减小)与由修改所移除的内容的量相对应的因子。在另一个示例中,如果修改要将内容添加到该区段,则远程编辑可以使其指定的位置向下游转换(例如,其指定的位置值增加)与修改添加的内容量对应的因子。
一旦被确定为在修改的下游的远程编辑120已经计算出转换后的位置,方法300就进行到操作390,其中远程编辑120在转换后的位置处被合并到本地实例中。然后更新本地VCA,使得远程编辑120可以作为将来的远程编辑120所经历的修改。方法300然后结束。
当在决策操作370处确定修改在远程编辑120的下游时,方法300进行到操作350。因为在远程编辑120的下游进行的修改不影响远程编辑120的指定位置将在该区段中被解释的方式,当将远程编辑120合并到本地实例中时,使用由远程编辑120指定的位置。然后更新本地VCA,使得远程编辑120可以作为将来的远程编辑120所经历的修改。方法300然后结束。
图4是可操作以在分布式共同编写环境中使实时更新能够使用矢量时钟转换以减少暂时中止实时编辑,从而解决同一区段内的编辑之间的冲突的需要的共同创作引擎400的框图。共同创作引擎400可以是独立的程序或者集成到向用户提供创作特征的合适设备或应用中,其可以例如经由云服务在本地或远程提供。
如图所示,共同创作引擎400包括可操作以接收更新的指示的接收器模块410,可操作以追踪和更新矢量时钟以确定远程编辑是否与本地实例460是因果关系以及远程编辑120与已经合并到本地实例460中的修改是否是同时进行的矢量时钟管理器420,可操作以将由远程编辑120指定的位置转换成转换后的位置以应对由远程编辑120的制作者不知道的修改添加或移除的内容的转换模块430,以及可操作以将编辑合并到文档的本地实例460中的合并模块440。在各个方面中,共同创作引擎400还可以包括发送模块450,该发送模块450可操作以发送在共同创作环境中对文档的其它实例的在本地进行的编辑以实时更新那些实例。
模块和/或管理器410-450中的每个是与计算机相关的实体,包括硬件、硬件和软件的组合、软件或者在计算机上执行的软件。作为示例而非限制,模块和/或管理器可以被实现为处理器、在处理器上运行的进程、硬盘驱动器、(光和/或磁存储介质的)多个存储驱动器、对象、可执行程序、执行线程、程序和/或计算机。
接收器模块410可操作以从共同创作环境中的远程共同作者接收实时更新的指示。在各个方面,接收器模块410通过用于实时更新的快速信道接收指示。这些指示包括要合并到本地实例460的远程编辑120以及来自进行了该远程编辑120的共同作者的VCA,这指示了当进行远程编辑120时该共同作者对文档的理解。
接收器模块410还可操作以接收在与用于实时更新的快速信道不同的信道上发生的离散时间更新或合并操作的指示。离散时间更新或合并操作可以通过本领域技术人员已知的各种方式中的任何一种来实现,使用适当的模块和方法来确保一旦离散时间更新或合并完成则共同创作环境中的所有共同作者从文档的相同状态进行工作。
矢量时钟管理器420与接收器模块410通信,并且可操作用于在文档被共同创作时更新和跟踪矢量时钟。共同创作的文档的每个区段与矢量时钟阵列(即,VCA)相关联,其中VCA中的每个矢量时钟对应于共同作者。当由共同作者对一个区段进行编辑时,矢量时钟管理器420更新与该共同作者相关联的该区段的VCA内的矢量时钟。例如,当本地共同作者在本地进行编辑时,合并模块440将编辑传送给矢量时钟管理器420,矢量时钟管理器420相应地更新本地共同作者的矢量时钟。在另一示例中,当从远程共同作者接收到实时更新的指示时,当远程编辑120合并到本地实例460中时,用于接收共同作者的矢量时钟管理器420将更新与远程共同作者相关联的矢量时钟。在又一示例中,当接收到离散时间更新的指示时,矢量时钟管理器420可操作以将以离散时间更新的区段的每个VCA中的所有矢量时钟重置(例如,A→A0,B→B0等)。
当跟踪矢量时钟时,矢量时钟管理器420可操作以将所发送的VCA与对应区段的本地VCA进行比较。根据该比较,矢量时钟管理器420可操作以确定远程编辑120是否与本地实例460是因果关系,以及是否与对已经合并本地实例460的修改而言是同时进行的。
当其发送的VCA指示其基于与本地实例460包括的对文档的不同理解时,远程编辑120被确定为非因果关系的。例如,从远程共同作者接收第二远程编辑而不接收第一远程编辑的本地共同作者的矢量时钟管理器420将确定第二远程编辑是非因果关系。在VCA方面,本地共同作者的VCA最初可以是A[A0,B0],第二远程编辑的VCA可以是B[A0,B2],第一远程编辑的VCA可以是B[A0,B1],使得编辑的因果关系链将是B0→B1→B2。在另一个示例中,缺乏由第二共同作者已经合并的第三共同作者进行的编辑的知识的第一共同作者将被确定,从第二共同作者接收的编辑是非因果关系的。就矢量时钟而言,第一共同作者的矢量时钟管理器420可以将其本地VCA A[A0,B0,C0]与所发送的VCA B[A0,B1,C1]进行比较以确定其缺乏包括递增C0→C1的操作的理解。
当其发送的VCA指示其基于对修改所基于的文档的理解时,远程编辑120被确定为与修改同时发生。例如,矢量时钟管理器420可以从具有VCA B[A0,B1,C0]的第一远程共同作者接收第一远程编辑,并且从具有VCA C[A0,B0,C1]的第二远程共同作者接收第二远程编辑,表示每个远程编辑都是从基础VCA[A0,B0,C0]进行的(例如B0→B1和C0→C1)。类似地,矢量时钟管理器420可以将本地VCA与所发送的VCA进行比较以确定本地编辑110是否与远程编辑120同时发生。
如将理解的,远程编辑120也可以被确定为是因果关系的和非同时的。例如,第一共同作者可以进行编辑(例如,A[A0→A1,B0]),并将其发送给合并该编辑(例如,B[A0→A1,B0])的第二共同作者。然后,第二共同作者进行后续编辑(例如,B[A1,B0→B1]),将该后续编辑发送给第一共同作者以进行后续合并(例如,B[A1,B0→B1])。在这个示例中,发送的编辑是因果关系的,但编辑不是同时进行的,因为第二编辑是在第一编辑合并后进行的,第二共同作者在进行第二编辑时已经知道第一编辑。
转换模块430与矢量时钟管理器420和合并模块440进行通信,并且转换模块430可操作以确定远程编辑120将如何被合并模块440处理并相应地向合并模块440发信号。为了确定如何处理远程编辑120,转换模块430使用由矢量时钟管理器420做出的因果性和同时性的确定,并且可以计算转换后的位置以将远程编辑120合并到本地实例460中。
当远程编辑120已经被确定为与本地实例460无因果关系时,转换模块430通过向合并模块440指示实时更新将暂时中止来处理远程编辑120,并且非因果远程编辑120和任何随后的编辑不被合并,直到当因果关系恢复时实时更新被恢复为止。在各个方面,可以保留非因果远程编辑120,使得随后接收(但是预先进行)的远程编辑120可以用于将文档的状态链接到非因果远程编辑120并且恢复因果关系。例如,如果不按顺序接收到第一编辑和第二编辑,则保留第二编辑,直到第一编辑被接收到并且被合并从而将允许合并第二编辑为止,此时可以恢复实时更新。实时更新也可能在离散时间更新或合并操作后恢复。
当远程编辑120与本地实例460是因果关系,但不是与已经合并到本地实例460中的任何修改同时发生时,转换模块430将发信号通知合并模块440以将远程编辑120合并到它指定的位置。
当远程编辑120与本地实例460是因果关系并且与已经合并到本地实例460中的修改是同时发生时,转换模块430将确定是否转换远程编辑120的位置。转换模块430将会将远程编辑120的指定位置与修改被合并到本地实例460中的位置进行比较,以确定是否转换指定的位置以应对由将影响远程编辑120的合并的修改而添加或移除的任何内容。
当修改已经以定位方案合并到远程编辑120的下游时,通过修改添加或移除的任何内容将不会影响远程编辑120的定位。因此,转换模块430将发信号通知合并模块440将远程编辑120合并到其指定的位置。
当修改已经以定位方案合并在远程编辑120的上游时,通过修改添加或移除的任何内容都可能影响远程编辑120的定位。因此,转换模块430将标记在每个状态下添加和移除的内容而回到从其进行远程编辑120和修改的共同理解。例如,当本地共同作者已经将一系列本地编辑110合并为远程编辑120的上游并且与远程编辑120同时进行的修改时,本地编辑110中的每一个将在确定如何转换远程编辑120的指定位置时将它们对定位方案的影响进行标记。例如,当本地共同作者键入“hello”时,其矢量时钟将针对每个键入的字母前进一次(例如,对于“h”,A0→A1,对于“e”,A1→A2,等等),并且随着指示在进行远程编辑(即,包含A0)时不了解本地编辑110的VCA一起接收到的远程编辑120将受到从当前状态(即A5)回到共同的理解(即A0)而键入的每个字母的影响。在该示例中,转换模块430将来自修改的对内容的五个添加进行标记,并使用标记将远程编辑120的指定位置转换成可操作以根据修改将远程编辑120正确地放置在本地实例中的转换后的位置460。在标记对应于受修改的内容添加或移除影响(分别为正面或负面影响)的定位方案中的位置数量的方面中,可以通过将标记添加到指定位置来创建转换后的位置。如将理解的那样,添加内容的修改将导致指定位置下游的转换后的位置,移除内容的修改将导致指定位置上游的转换后的位置,并且偏移(即,添加和移除等量的内容)或不添加/移除内容(例如,格式化,插入注释)的修改将导致转换后的位置等于指定位置。
在特殊情况下,在同一位置进行修改和远程编辑120(即,近似编辑)的情况下,转换模块430将确定相对于修改而设置远程编辑120的顺序。该顺序对于分布式共同创作环境中的所有共同作者是相同的,使得每个共同作者的共同创作引擎400将独立地能够达到相同的顺序来设置近似编辑。在一个方面,每个VCA中的矢量时钟的顺序对于分布式共同创作环境中的每个共同作者可以是相同的,转换模块430可以使用该顺序来设置近似编辑的顺序。例如,第一共同作者(即An)和第二共同作者(即,Bn)的矢量时钟可以在每个共同作者的VCA中以相同顺序出现(即,A[An,Bn]和B[An,Bn]),使得第一共同作者和第二共同作者所做的近似编辑将根据矢量时钟的顺序排列。因此,每个共同作者将第一共同作者所做的近似编辑的顺序设置为在由第二共同作者进行的近似编辑上游。当远程编辑120被设置为修改的下游时,远程编辑120将具有计算以供当合并远程编辑120时使用的转换后的位置。
当进行近似编辑时,转换模块430进一步可操作以将偏移应用于远程编辑120。在一些方面中,不应用偏移,而在其他方面中,可以将空格、制表符、斜线、逗号或其他指定的字符插入在近似编辑之间。当远程编辑120在修改的上游时,在远程编辑120的末尾应用偏移量(例如,<远程编辑><偏移量>),而当远程编辑120在修改的下游时,偏移是在远程编辑120的开始处应用(例如,<偏移量><远程编辑>)。如将理解的,下游远程编辑120的转换后的位置将考虑到任何应用的偏移量。
如图所示,合并模块440与矢量时钟管理器420和转换模块430进行通信。合并模块440可操作以将来自本地共同作者的本地编辑110和来自远程共同作者的远程编辑120实时合并到本地实例460中。在各个方面中,合并模块440在编辑被接收时(即,实时)合并编辑,由此编辑过程在其发生时被显示。如转换模块430所指示的那样合并编辑,使得远程编辑120被合并到考虑到已经合并到本地实例460中的修改的位置处。随着编辑被合并,合并模块440指示它们被合并到矢量时钟管理器420来相应地递增适当的VCA中的矢量时钟。
还示出了发送模块450与矢量时钟管理器420和合并模块440通信。发送模块450可操作以将已经合并到本地实例460中的本地编辑110和相应地更新的VCA发送到参与分布式共同创作环境的远程共同作者。在各个方面中,发送的本地编辑110被原样发送,使得使用与本地共同作者相同或相似的后备存储模型的远程共同作者可以实现所发送的编辑。例如,由本地共同作者在给定区段中的第五位置处插入“QUICK”的“在5处插入(“QUICK<空格>”)”的命令也可由远程共同作者使用类似的后备存储模型来使用,因此按原样发送。在其他方面中,在共同作者可以使用不同的后备存储模型的情况下,发送模块450可操作以将本地编辑110的命令和结构转换为远程共同作者可理解的格式。例如,可以使用可扩展标记语言(XML)格式或Java脚本对象表示法(JSON)格式。
合并模块440进一步可操作以在编辑不能被实时安全地合并时暂时中止文档(或其一区段)的实时编辑。例如,远程编辑120可以被确定为与本地实例460是非因果关系,或者远程共同作者可以指示区段被锁定,或者本地共同作者否则没有权限来编辑给定区段。
当合并模块440暂时中止编辑时,虽然任何待处理的远程编辑120可以被合并到本地实例460中或被高速缓存以用于随后的合并,但是不能对其中已经暂停编辑的任何区段进行本地编辑110。待处理的远程编辑120可以被理解为与来自编辑的因果链的缺失的远程编辑120同时发生的远程编辑120。例如,如果缺少与VCA B[A0,B1,C0]相关联的编辑,则第二共同作者的任何进一步编辑将是非因果关系的(例如,B1→B2,B2→B3等等),但是由第三共同作者进行的指示B0的矢量时钟的任何编辑将与缺失的编辑B0→B1同时发生,并且因此是可以安全地合并的待处理的远程编辑120。当远程编辑120由合并模块440高速缓存时,它们根据它们的矢量时钟排队,使得如果恢复编辑(例如,在接收到缺失的编辑的情况下),则它们可以适当地合并到本地实例460中。当远程编辑120被丢弃时,在离散时间更新或合并操作发生之前,远程编辑将不会被恢复。
这里描述的共同创作引擎400可操作以改善其运行的计算设备的操作,并且,与中央管理的共同创作环境相比,通过减少网络流量和提高容错能力来改善这些计算设备是其一部分的分布式共同编写环境的操作。另外,共同创作引擎400通过使更大的编辑子集能够实时地在文档的区段内同时进行而在分布式共同编写环境中实现改进的用户体验。此外,通过提高共同创作系统实时编辑的能力,需要更少的离散时间更新,通过减少共同作者需要发送和处理的数据量进一步降低了网络开销。因此,使用本公开的计算设备可以改善计算机本身的功能或者影响网络或另一计算机的改进。
虽然已经在与在计算机上的操作系统上运行的应用程序一起执行的程序模块的一般上下文中描述了本发明,但是本领域技术人员将认识到示例和方面也可以与其他程序模块组合地实现。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。
本文所描述的方面和功能可以通过许多计算系统来操作,包括但不限于台式计算机系统,有线和无线计算系统,移动计算系统(例如,移动电话,上网本,平板电脑或平板式计算机,笔记本计算机和膝上型电脑),手持设备,多处理器系统,基于微处理器或可编程的消费电子产品,小型计算机和大型计算机。
此外,根本文描述的方面和功能可以在分布式系统(例如,基于云的计算系统)上操作,其中应用功能、存储器、数据存储和检索以及各种处理功能通过分布式计算网络(如因特网或内联网)相互远程地操作。通过板载计算设备显示器或通过与一个或多个计算设备相关联的远程显示单元来显示各种类型的用户界面和信息。例如,各种类型的用户界面和信息被显示在壁面上并且在壁面上进行交互,在壁面上投影有各种类型的用户界面和信息。与可以实践各方面的多个计算系统的交互包括:按键输入,触摸屏输入,语音或其他音频输入,其中相关联的计算设备配备有用于捕获和解释用户手势以用于控制计算设备的功能的检测(例如,照相机)功能的手势输入,等等。
图5-7和相关描述提供了可以在其中实践示例的各种操作环境的讨论。然而,相对于图5-7所示出和讨论的设备和系统仅用于示例和说明的目的,并不限制可用于实践本公开的各方面的大量计算设备配置。
图5是示出可以实现各个示例的计算设备500的物理组件(即,硬件)的框图。下文描述的计算设备组件可适于上述的计算设备。在基本配置中,计算设备500可以包括至少一个处理单元502以及系统存储器504。根据计算设备的配置和类型,系统存储器504可以包括但不限于易失性存储设备(例如,随机存取存储器)、非易失性存储设备(例如,只读存储器)、闪速存储器或这些存储器的任意组合。系统存储器504可以包括操作系统505以及适合于运行诸如编辑器和终端的软件应用550的一个或多个程序模块506。根据一个方面,系统存储器504可以包括共同创作引擎400。例如,操作系统505可以适合于控制计算设备500的操作。此外,各个方面可以与图形库、其它操作系统或者任何其它应用程序相结合实施,而不限于任何特定的应用或系统。该基本配置在图5中是由虚线508内的那些组件图示出的。计算设备500可以具有额外的特征或功能。例如,计算设备500还可以包括额外的数据存储设备(可移动的和/或不可移动的),诸如例如磁盘、光盘或磁带。这些额外的存储设备在图5中由可移动存储设备509和不可移动存储设备510来图示出。
如上所述,多个程序模块和数据文件可以被存储在系统存储器504中。当在处理单元502上执行时,程序模块506(例如编辑器,终端,共同创作引擎400)可以执行包括但不限于不限于图3中示出的方法300的一个或多个阶段的过程。根据本公开的示例可以使用的其他程序模块,并且可以包括诸如电子邮件和联系人应用、文字处理应用、电子表格应用、数据库应用、幻灯片演示应用、绘图或计算机辅助应用程序等。
此外,可以在电路中实现各示例,包括离散电子元件,包含逻辑门的封装或集成电子芯片,使用微处理器的电路,或者包含电子元件或微处理器的单个芯片。例如,可以通过片上系统(“SOC”)实践各示例,其中图5所示的每个组件或多个组件可以集成到单个集成电路中。该SOC设备可以包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元以及各应用功能,全部这些都集成(或“烧”)到芯片基板上作为单个集成电路。当经由SOC操作时,本文所述的功能可以经由与计算设备/系统500的其它组件集成到单个集成电路(芯片)上的专用逻辑来操作。本公开的示例还可以利用其它能够执行诸如例如与(AND)、或(OR)和非(NOT)的逻辑运算的技术来实践,包括但不限于机械技术、光学技术、流体技术和量子技术。另外,各方面可以实现在通用计算机或者任何其它电路或系统内。
计算设备500还可以具有输入设备512,诸如键盘、鼠标、笔、声音输入设备、触摸输入设备等。还可以包括输出设备514,诸如显示器、扬声器、打印机等。上述设备是示例,可以使用其它设备。计算设备500可以包括允许与其它计算设备518通信的一个或多个通信连接516。适合的通信连接516的示例包括但不限于RF发射器、接收器和/或收发器电路系统;通用串行总线(USB)、并行端口和/或串行端口。
本文使用的术语计算机可读介质包括计算机存储介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构或程序模块的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。系统存储器504、可移动存储设备509和非可移动存储设备510都是计算机存储介质示例(即,存储器存储)。计算机存储介质可以包括RAM、ROM、电可擦除可编程只读存储器(EEPROM)、闪速存储器或其他存储器技术,CD-ROM,数字通用盘(DVD)或其他光存储器,磁带盒,磁带,磁盘存储或其他磁存储设备,或任何其他可以用于存储信息并且可以由计算设备500访问的制品。根据一个方面,任何这样的计算机存储介质可以是计算设备500的一部分。计算机存储介质不包括载波或其他传播的数据信号。
通信介质由计算机可读指令、数据结构、程序模块或诸如载波或其他传输机制的调制数据信号中的其他数据来实现,并且包括任何信息传递介质或传输媒体。术语“调制数据信号”可以描述以对信号中的信息进行编码的方式设置或改变一个或多个特性的信号。作为示例而非限制,通信介质可以包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(RF)、红外和其它无线介质的无线介质。
图6A和6B是示出了可以实现各方面的移动计算设备600,例如,移动电话、智能电话、平板个人计算机、膝上型计算机等等参考图6A,示出了用于实现各方面的移动计算设备600的示例。在基本配置中,移动计算设备600是具有输入元件和输出元件的手持式计算机。移动计算设备600典型地包括显示器605以及允许用户输入信息到移动计算设备600的一个或多个输入按钮610。移动计算设备600的显示器605还可以充当输入设备(例如,触摸屏显示器)。如果包含,任选的侧部输入元件615允许另外的用户输入。侧部输入元件615可以是旋转开关、按钮或任何其它类型的手动输入元件。在可选的实施例中,移动计算设备600可以包含更多或更少的输入元件。例如,在一些示例中显示器605可以是触摸屏。在替选的示例中,移动计算设备600是便携式电话系统,诸如蜂窝电话。移动计算设备600还可以包括任选的键板635。任选的键板635可以是物理键板或产生于触摸屏显示器上的“软“键板。在各个实施例中,输出元件包括用于示出图形用户界面(GUI)的显示器605、可视指示器620(例如,发光二极管)和/或音频换能器625(例如,扬声器)。在一些示例中,移动计算设备600包含了用于为用户提供触反馈的振动换能器。在又一示例中,移动计算设备600包含了外围设备端口640,诸如音频输入(例如,麦克风插口)、音频输出(例如,耳机插口)以及视频输出(例如,HDMI端口),用于发送信号到外部设备或者从外部设备接收信号。
图6B是示出了移动计算设备的一个示例的体系结构的框图。也即,移动计算设备600可以包含实现一些示例的系统(即,体系结构)602。在一个示例中,系统602实现为能够运行一个或多个应用(例如,浏览器、电子邮件、记事本、通讯录管理器、消息传递客户端、游戏和媒体客户端/播放器)的“智能手机”。在一些示例中,系统602集成为计算设备,诸如集成的个人数字助理(PDA)以及无线电话。
一个或多个应用程序660(例如,编辑器和终端)可以加载到存储器662中以及运行于操作系统664上或者与操作系统664关联。应用程序的示例包括电话拨号程序、电子邮件程序、个人信息管理(PIM)程序、文字处理程序、电子表格程序、因特网浏览器程序、消息传递程序等。根据一个方面,共同创作引擎400可以加载到存储器662中。系统602还包括位于存储器662内的非易失性存储区668。非易失性存储区668可用于存储在系统602掉电的情况下不应丢失的永久性信息。应用程序650可使用信息且存储信息于非易失性存储区668中,诸如电子邮件应用使用的电子邮件或其它消息,等等。同步应用(未示出)也位于系统602上并且被编程以与位于主机上的对应的同步应用交互以保持存储在非易失性存储区668中的信息与存储在主机中的对应信息同步。应当意识到,其它应用可以加载到存储器662中且运行于移动计算设备600上。
系统602具有电源670,电源670实现为一个或多个电池。电源670可能进一步包括外部电源,诸如AC适配器或为电池补电或再充电的电力对接托架。
系统602还可以包括执行发送和接收射频通信的功能的无线电672。无线电672促进系统602与“外界”之间经由通信载波或服务提供商之间的无线连接。向无线电672发送以及从无线电672接收是在操作系统664的控制下进行的。换言之,由无线电672接收到的通信可以经由OS 664散播到应用程序665,反之亦然。
可视指示器620可以用于提供可视通知,和/或音频接口674可用于经由音频换能器625产生可听的通知。在图示的实施例中,可视指示器620是发光二极管(LED),音频换能器625是扬声器。这些设备可以直接与电源670耦合,从而当被激活时,它们在通知机制所规定的持续期间内保持接通,即使处理器660和其他组件可能为了节约电池电力而关闭。LED可以被编程以保持无限接通直至用户采取措施来指示设备的加电状态。音频接口674用来提供可听信号到用户以及从用户接收可听信号。例如,除了与音频换能器625耦合之外,音频接口674还可以与麦克风耦合以接收可听输入,例如促进电话对话。系统602可进一步包括使得板上照相机630的操作能够记录静像、视频流等的视频接口676。
实现系统602的移动计算设备600可以具有附加特征或功能。例如,移动计算设备600还可以包括附加的数据存储设备(可移动和不可移动),诸如磁盘,光盘或磁带。图6B中通过非易失性存储区域668示出了这种附加存储。
通过移动计算设备600生成或捕获以及经由系统602存储的数据/信息可以本地地存储在移动计算设备600上,如上所述,或者数据可以存储在可由设备经由无线电672或者经由移动计算设备600与关联移动计算设备600的单独的计算设备(例如,诸如因特网的分布式计算网络中的服务器计算机)之间的有线连接访问的任意数量的存储介质上。应当意识到,这些数据/信息可以通过移动计算设备600经由无线电672或者经由分布式计算网络来访问。类似地,根据公知的数据/信息传输和存储手段,包括电子邮件和协作数据/信息共享系统,这些数据/信息可轻易地在计算设备之间传输以便存储和使用。
图7是示出用于提供如上所述的数据可视化的系统的体系结构的一个示例。与编辑器、终端或共同创作引擎400关联地开发的内容、交互的内容或编辑的内容可以存储在不同的通信信道或其它存储类型。例如,可利用目录服务722、web门户724、邮箱服务726、即时消息传递库728或社交网站730来存储各个文档。编辑器、终端或共同创作引擎400可使用这些类型的系统等中的任一种来提供数据可视化,如本文所述。服务器715可以将编辑器、终端或共同创作引擎400提供给客户端705A-C。作为一个示例,服务器715可以是通过web提供编辑器、终端或共同创作引擎400的web服务器。服务器715可以通过网络710在web上将编辑器、终端或共同创作引擎400提供给客户端705。通过示例的方式,客户端计算设备可以实现且体现为个人计算机705A、平板计算设备705B和/或移动计算设备705C(例如,智能电话)或其它计算设备中。客户端计算设备的这些示例中的任意示例可以从库716获得内容。
例如,上面参照根据各方面的方法、系统和计算机程序产品的框图和/或操作示例来描述本公开的方面。框中记载的功能/动作可能不按照任何流程图所示的顺序发生。例如,取决于所涉及的功能/动作,连续示出的两个框实际上可以基本同时执行,或者有时可以以相反的顺序执行框。
在本申请中提供的一个或多个示例的描述和说明不旨在以任何方式限制或限缩所要求保护的本公开的范围。在该申请中提供的方面、示例和细节被视为足以传达所有权以及使得其他技术人员能够实现和使用所要求保护的本公开的最佳方式。本公开不应被解释为限于本申请中提供的任何方面、示例或细节。无论是组合地或者单独地显示和描述,各个特征(结构上的和方法上的)都意在被选择性地包含或省去以产生具有特定特征集合的示例。已经提供了本申请的描述和说明,本领域技术人员可以设想落入在本申请具体体现的总的发明构思的较宽方面的精神内的、没有背离本公开的较宽范围的变型例、修改例和替代的示例。
Claims (15)
1.一种用于通过对由远程编辑指定的位置进行转换来考虑已经利用实时更新被合并到共同创作的文档的本地实例中的同时修改,从而改进参与分布式共同创作环境的计算设备的功能的系统,所述系统包括:
处理器;以及
包括指令的存储器设备,所述指令在由所述处理器执行时使所述系统提供共同创作引擎,所述共同创作引擎包括:
合并模块,可操作以将所述远程编辑合并到所述共同创作的文档的本地实例中;
接收器模块,可操作以接收实时更新的指示,所述实时更新的指示包括所述远程编辑,其中所述远程编辑指定所述共同创作的文档中的要被合并的位置;
与所述合并模块通信的转换模块,可操作以确定所述远程编辑是否在所述同时修改的上游,
响应于确定所述远程编辑在所述同时修改的上游,所述转换模块可操作以发信号通知所述合并模块在所述指定的位置处合并所述远程编辑;并且
响应于确定所述远程编辑在所述同时修改的下游,所述转换模块可操作以基于所述指定的位置和所述同时修改所影响的内容的量来计算转换后的位置以将所述远程编辑合并到所述本地实例中,并且所述转换模块可操作以发信号通知所述合并模块以在所述转换后的位置处合并所述远程编辑。
2.如权利要求1所述的系统,所述共同创作引擎还包括:
与所述接收器模块、所述转换模块和所述转换模块通信的矢量时钟管理器,所述矢量时钟管理器可操作以跟踪和更新矢量时钟,以确定所述远程编辑是否与所述本地实例是因果关系;并且
其中,响应于所述矢量时钟管理器确定所述远程编辑不与所述本地实例是因果关系,所述合并模块还可操作以暂时中止编辑。
3.如权利要求2所述的系统,其中暂时中止编辑包括阻止对区段进行本地编辑。
4.如权利要求2所述的系统,其中响应于暂时中止编辑,所述合并模块进一步可操作以高速缓存所述远程编辑,直到所述矢量时钟管理器确定第二远程编辑恢复因果关系为止;并且
其中,响应于所述矢量时钟管理器确定所述第二远程编辑恢复因果关系,所述合并模块进一步可操作以通过合并所述第二远程编辑和所述远程编辑来恢复编辑。
5.如权利要求1所述的系统,所述共同创作引擎还包括:
与所述合并模块进行通信的发送模块,其可操作以将合并到所述本地实例中的本地编辑发送到所述分布式共同创作环境,所述本地编辑指定在其处进行了所述本地编辑的、在所述本地实例中的位置并且包括本地矢量时钟阵列,其中,所述本地矢量时钟阵列指示当进行所述本地编辑时共同创作的文档的本地理解。
6.如权利要求1所述的系统,其中,所述远程编辑的指示还包括矢量时钟阵列,其中所述矢量时钟阵列指示在进行所述远程编辑时所述共同创作的文档的理解。
7.如权利要求6所述的系统,其中,所述远程编辑是对所述修改的近似编辑,所述转换模块还可操作以设置所述远程编辑和所述修改的顺序,使得基于在所述分布式共同创作环境中共享的VCA中的矢量时钟的顺序而将所述远程编辑和所述修改中的一个确定为在另一个的上游。
8.根据权利要求7所述的系统,其中所述转换模块进一步可操作以当所述远程编辑对所述修改而言是近似编辑时,在所述远程编辑与所述修改之间插入偏移量。
9.一种用于通过对由远程编辑指定的位置进行转换来考虑已经利用实时更新被合并到共同创作的文档的本地实例中的同时修改,从而改进参与分布式共同创作环境的计算设备的功能的方法,所述方法包括:
将所述同时修改合并到所述共同创作的文档的本地实例中,其中所述同时修改被合并到第一位置处;
接收所述远程编辑的指示,所述指示包括所述远程编辑和合并所述远程编辑的指定位置;
确定所述指定位置是在所述第一位置的上游还是下游;
当确定所述指定位置在所述第一位置的上游时,在所述指定位置处合并所述远程编辑;
当确定所述指定位置在所述第一位置的下游时:
确定受所述指定位置的上游的所述同时修改影响的内容的量;
将所述指定位置转换受所述指定位置的上游的修改影响的内容的量以创建转换后的位置;并且
在所述转换后的位置处合并所述远程编辑。
10.如权利要求9所述的方法,其中,所述同时修改是已被合并到所述本地实例中的较早接收的远程编辑。
11.如权利要求9所述的方法,其中,所述修改从所述本地实例的一区段中移除内容,其中受所述修改影响的内容的量是从本地实例移除的字符的数目,其中,创建所述转换后的位置包括将所述指定位置减少与移除的字符数目相对应的位置值。
12.如权利要求9所述的方法,其中,所述修改将内容添加到所述本地实例的一区段,其中受所述修改影响的内容量是添加到所述本地实例的字符的数目,其中创建所述转换后的位置包括将所述指定位置增加与添加的字符数目相对应的位置值。
13.一种用于通过对由远程编辑指定的位置进行转换来考虑已经利用实时更新被合并到共同创作的文档的本地实例中的同时修改,从而改进参与分布式共同创作环境的计算设备的功能的方法,所述方法包括:
在所述分布式共同创作环境中显示所述共同创作的文档的本地实例;
在所述本地实例的区段中的位置处接收修改,其中,所述区段与包括多个矢量时钟的本地矢量时钟阵列(VCA)相关联,所述多个矢量时钟与共同创作的文档的每个实例相关联,所述多个矢量时钟反映所述本地实例已知的、每个实例中的区段的状态;
响应于接收到所述修改,递增与关联于所述区段的本地VCA中的本地实例相关联的矢量时钟;
在所述位置处将所述修改合并到所述区段中;
接收所述远程编辑的指示,所述指示包括将所述远程编辑合并到所述区段中的指定位置,以及所传送的VCA,其包括与每个实例相关联的多个矢量时钟,所述多个矢量时钟反映从其接收所述远程编辑的实例已知的、每个实例中的所述区段的状态;
基于比较所述本地VCA与所传送的VCA来确定远程编辑是否与所述本地实例是因果关系;
当确定所述远程编辑与所述本地实例是因果关系时,确定所述远程编辑是否与所述修改同时进行;
当确定所述远程编辑是与修改同时进行时,转换所述指定位置以考虑受所述修改影响的所述区段中的内容,其中所述指定位置增加值以考虑添加到所述指定位置上游的区段的内容并且减少值以考虑从所述指定位置上游的区段移除的内容,并且在转换后的指定位置处将所述远程编辑合并到所述区段中;
当确定远程编辑不是与所述修改同时进行时,在所述指定位置处将所述远程编辑合并到所述区段中;并且
当确定所述远程编辑与所述本地实例不是因果关系时,暂时中止所述本地实例的实时更新。
14.根据权利要求13所述的方法,其中包括在所传送的VCA中的所述多个矢量时钟与包括在所述本地VCA中的所述多个矢量时钟相同地排序,所述方法还包括:
确定所述修改和所述远程编辑是否彼此是近似编辑,并且如果是,则确定与从其接收到所述远程编辑的实例相关联的多个矢量时钟中的矢量时钟是否在与所述修改源自的实例相关联的多个矢量时钟中的矢量时钟之前;
当确定与从其接收到所述远程编辑的实例相关联的多个矢量时钟中的所述矢量时钟在先时,在所述指定位置处合并所述远程编辑;
当确定与从其接收到所述远程编辑的实例相关联的多个矢量时钟中的所述矢量时钟不在先时,将所述修改设置为影响所述远程编辑的上游的内容。
15.如权利要求13所述的方法,其中,所述修改是本地编辑,还包括:
将所述本地编辑的指示发送到远程实例,所述指示包括与所述区段相关联的本地VCA以及在所述区段中合并所述本地编辑的位置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/751,686 US10051020B2 (en) | 2015-06-26 | 2015-06-26 | Real-time distributed coauthoring via vector clock translations |
US14/751,686 | 2015-06-26 | ||
PCT/US2016/039124 WO2016210198A1 (en) | 2015-06-26 | 2016-06-24 | Real-time distributed coauthoring via vector clock translations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107810516A true CN107810516A (zh) | 2018-03-16 |
Family
ID=56557885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680037536.8A Pending CN107810516A (zh) | 2015-06-26 | 2016-06-24 | 通过矢量时钟转换的实时分布式共同创作 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10051020B2 (zh) |
EP (1) | EP3314554A1 (zh) |
CN (1) | CN107810516A (zh) |
WO (1) | WO2016210198A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10684997B2 (en) | 2017-10-24 | 2020-06-16 | Microsoft Technology Licensing, Llc | File consistency across file versions maintained by different services |
US11698890B2 (en) | 2018-07-04 | 2023-07-11 | Monday.com Ltd. | System and method for generating a column-oriented data structure repository for columns of single data types |
US11556512B2 (en) * | 2019-11-01 | 2023-01-17 | Palantir Technologies Inc. | Systems and methods for artifact peering within a multi-master collaborative environment |
US11775890B2 (en) | 2019-11-18 | 2023-10-03 | Monday.Com | Digital processing systems and methods for map-based data organization in collaborative work systems |
US11829953B1 (en) | 2020-05-01 | 2023-11-28 | Monday.com Ltd. | Digital processing systems and methods for managing sprints using linked electronic boards |
EP4143732A1 (en) | 2020-05-01 | 2023-03-08 | Monday.com Ltd. | Digital processing systems and methods for enhanced collaborative workflow and networking systems, methods, and devices |
US11481288B2 (en) | 2021-01-14 | 2022-10-25 | Monday.com Ltd. | Digital processing systems and methods for historical review of specific document edits in collaborative work systems |
US11366583B1 (en) * | 2021-02-02 | 2022-06-21 | Bank Of America Corporation | Computer-to-computer users# edit and event transfer and synchronization |
US11741071B1 (en) | 2022-12-28 | 2023-08-29 | Monday.com Ltd. | Digital processing systems and methods for navigating and viewing displayed content |
US11886683B1 (en) | 2022-12-30 | 2024-01-30 | Monday.com Ltd | Digital processing systems and methods for presenting board graphics |
US11893381B1 (en) | 2023-02-21 | 2024-02-06 | Monday.com Ltd | Digital processing systems and methods for reducing file bundle sizes |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102315929A (zh) * | 2011-08-31 | 2012-01-11 | 北京空间飞行器总体设计部 | 一种地面仿真系统的校时同步控制器 |
CN102420854A (zh) * | 2011-11-14 | 2012-04-18 | 西安电子科技大学 | 面向云存储的分布式文件系统 |
CN103391318A (zh) * | 2013-07-12 | 2013-11-13 | 北京金山云网络技术有限公司 | 数据处理方法、客户端、服务器端及设备 |
CN103729291A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于同步关系的并行动态数据竞争检测系统 |
US20140280463A1 (en) * | 2013-03-12 | 2014-09-18 | Dropbox, Inc. | Implementing a consistent ordering of operations in collaborative editing of shared content items |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818678B2 (en) * | 2002-10-31 | 2010-10-19 | Litera Technology Llc | Collaborative document development and review system |
US7653640B2 (en) * | 2006-07-31 | 2010-01-26 | Microsoft Corporation | Two-way and multi-master synchronization over web syndications |
US8656290B1 (en) * | 2009-01-08 | 2014-02-18 | Google Inc. | Realtime synchronized document editing by multiple users |
US20120233543A1 (en) * | 2011-03-08 | 2012-09-13 | Google, Inc. | Collaborative Electronic Document Editing |
US8682989B2 (en) * | 2011-04-28 | 2014-03-25 | Microsoft Corporation | Making document changes by replying to electronic messages |
WO2014005640A1 (en) | 2012-07-05 | 2014-01-09 | Nec Europe Ltd. | Method and system for disallowing conflicting web application events |
CN103220336B (zh) | 2013-03-21 | 2016-01-27 | 中国科学院计算技术研究所 | 一种文件同步中向量时钟的实现方法及系统 |
US9503402B2 (en) * | 2014-08-18 | 2016-11-22 | Dropbox, Inc. | Managing drafts of electronic documents across client devices |
JP2016143296A (ja) * | 2015-02-03 | 2016-08-08 | 富士通株式会社 | 情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラム |
US10909080B2 (en) * | 2015-05-04 | 2021-02-02 | Microsoft Technology Licensing, Llc | System and method for implementing shared document edits in real-time |
-
2015
- 2015-06-26 US US14/751,686 patent/US10051020B2/en active Active
-
2016
- 2016-06-24 EP EP16745556.7A patent/EP3314554A1/en not_active Ceased
- 2016-06-24 WO PCT/US2016/039124 patent/WO2016210198A1/en active Application Filing
- 2016-06-24 CN CN201680037536.8A patent/CN107810516A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102315929A (zh) * | 2011-08-31 | 2012-01-11 | 北京空间飞行器总体设计部 | 一种地面仿真系统的校时同步控制器 |
CN102420854A (zh) * | 2011-11-14 | 2012-04-18 | 西安电子科技大学 | 面向云存储的分布式文件系统 |
US20140280463A1 (en) * | 2013-03-12 | 2014-09-18 | Dropbox, Inc. | Implementing a consistent ordering of operations in collaborative editing of shared content items |
CN103391318A (zh) * | 2013-07-12 | 2013-11-13 | 北京金山云网络技术有限公司 | 数据处理方法、客户端、服务器端及设备 |
CN103729291A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于同步关系的并行动态数据竞争检测系统 |
Also Published As
Publication number | Publication date |
---|---|
US10051020B2 (en) | 2018-08-14 |
EP3314554A1 (en) | 2018-05-02 |
US20160381099A1 (en) | 2016-12-29 |
WO2016210198A1 (en) | 2016-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107810516A (zh) | 通过矢量时钟转换的实时分布式共同创作 | |
Kleppmann et al. | Local-first software: you own your data, in spite of the cloud | |
CN110546662B (zh) | 协作审阅工作流图 | |
CN104221011B (zh) | 使用文档评论来跟踪共同创作冲突 | |
US10733553B2 (en) | Action item extraction for work item creation | |
CN103023961B (zh) | 经由墙型计算设备的工作空间协作 | |
US10198420B2 (en) | Telling interactive, self-directed stories with spreadsheets | |
US9215434B2 (en) | Systems and methods for session recording and sharing | |
US10409779B2 (en) | Document sharing via logical tagging | |
CN105531699B (zh) | 用于组织演示幻灯片的自动化系统 | |
CN107636641A (zh) | 用于处理附加至电子邮件消息的注释的统一消息传送平台 | |
US10936797B2 (en) | Collaborative document editing using state-based revision | |
CN108431797A (zh) | 电子文档的存储器节约的版本控制 | |
CN109313634A (zh) | 用于单个文件的文件同步暂停 | |
CN107633381A (zh) | 多用户和多设备协作 | |
JP2011227894A (ja) | 通信セッションを管理する為にグラフィカル・ユーザ・インターフェース内に永続的セッションを生成するシステムと方法。 | |
CN106068498A (zh) | 将本地现场信息造影到基于云的计算系统 | |
Cao et al. | The Hero's Journey-Template-Based Storytelling for Ubiquitous Multimedia Management. | |
Gericke et al. | Message capturing as a paradigm for asynchronous digital whiteboard interaction | |
US20180121293A1 (en) | Code base synchronization between source control systems | |
US8000952B2 (en) | Method and system for generating multiple path application simulations | |
van der Werf et al. | Facilitating collaborative decision making with the software architecture video wall | |
US20170220232A1 (en) | Smart slides in a presentation program | |
CN106030572B (zh) | 与外部内容项的经编码的关联 | |
US20230039792A1 (en) | Deep tagging artifact review session |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |