CN105808517A - 一种操作包围盒的协同编辑一致性维护方法 - Google Patents
一种操作包围盒的协同编辑一致性维护方法 Download PDFInfo
- Publication number
- CN105808517A CN105808517A CN201610130095.8A CN201610130095A CN105808517A CN 105808517 A CN105808517 A CN 105808517A CN 201610130095 A CN201610130095 A CN 201610130095A CN 105808517 A CN105808517 A CN 105808517A
- Authority
- CN
- China
- Prior art keywords
- bounding box
- bbo
- sid
- collaborative editing
- conversion
- 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.)
- Granted
Links
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/197—Version control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种操作包围盒的协同编辑一致性维护方法,首先基于转换语义定义依赖关系,然后进行本地操作处理和远程操作处理;在本地操作处理和远程操作处理过程中将具有依赖关系的插入操作组织成包围盒,并且控制包围盒的容量大小;本地操作包括插入操作和删除操作,删除操作按照作用位置关系降序排列。本发明能够支持在对等网络环境下多用户实时协同编辑同一份文档;本发明能够确保多用户的协同结果是一致的;本发能够提高操作的响应性。
Description
技术领域
本发明属于计算机支持的协同工作技术领域,涉及一种实时文本协同编辑方法,具体涉及一种操作包围盒的协同编辑一致性维护方法。
背景技术
协同编辑是计算机支持的协同工作中的一个重要应用领域。协同编辑作为一种分布式系统,允许地理位置上分散的用户共同编辑同一份文档。每个站点都会存储该文档的一份副本。因此,在对该站点文档的修改都会立即呈现给用户,然后通过网络将这些操作发送给其他用户。不同用户的操作经常发生冲突并且操作之间是乱序执行的。一致性维护方法就是为了实现高并发情况下多用户能够得到一致的结果,从而提高工作效率。
操作转换(OperationalTransformation,OT)是目前实时协同编辑工作中的常用的一种一致性维护方法。OT合并所有操作的执行效果,通过把操作转换成另一种执行形式实现一致的结果。具体来说,对本地操作立即执行,因此能够很好的满足实时性的要求;对接收到的远程操作,首先要将该操作对已执行的并发操作进行转换,然后才执行转换的结果。OT能够确保即使在不同站点执行的操作顺序不同,最终也能得到一致的结果。OT从协同编辑系统中抽象出两个元操作(插入操作,删除操作),用于修改线性结构的对象文档。在文本编辑应用中,操作的对象是字符。由于转换是基于操作对象的位置,OT可以支持任何线性排列的复杂对象。但是,现有的方法存在以下两个比较突出的缺点:(1)随着操作的不断积累,记录会不断增大,导致操作响应时间延长;(2)依赖关系基于操作发生的先后关系,不能够适应协同规模的动态变化。
发明内容
为了解决上述技术问题,本发明提供了一种实现文档协同编辑的方法,该方法通过建立操作的包围盒及其重构的操作历史记录,能够实现所有协同人员获得一致的文档,提高工作效率;该方法支持对等网络环境,允许用户动态加入或者离开协同会话,提高操作的响应时间,支持大规模的协同。
本发明所采用的技术方案是:一种操作包围盒的协同编辑一致性维护方法,其特征在于:
首先基于转换语义定义依赖关系;
定义1.依赖关系;给定任意两个操作Oa和Ob,若Oa在Ob之前执行,则称Ob依赖于Oa;当且仅当Oa和Ob的作用对象位置关系满足以下三种情况:(1)Ob.t=Oa.t=ins,Ob.p=Oa.p,Ob.sid≥Oa.sid,则称Ob右依赖于Oa;(2)Ob.t=Oa.t=ins,Ob.p=Oa.p+1,Ob.sid≤Oa.sid;则称Ob左依赖于Oa;(3)Ob.t=del,Oa.t=ins,Ob.p=Oa.p,则称Ob正依赖于Oa;
定义2.操作;对于任何一个操作o,o.t表示操作的类型:插入记为ins、删除记为del,o.c表示操作的作用字符,o.p表示操作的位置,o.sid表示产生该操作的站点号;每个操作id由<sid,num>唯一标识,num代表sid站点产生的操作数目;操作的包含转换只会改变o.p的值,其他属性保持不变;
然后进行本地操作处理和远程操作处理;在本地操作处理和远程操作处理过程中将具有依赖关系的插入操作组织成包围盒,并且控制包围盒的容量大小。
作为优选,所述本地操作处理包括以下子步骤:
步骤1.1:每个站点产生的操作o在该站点立即执行;
步骤1.2:将操作o转换到对应于物理视图上的操作ov,包括插入操作和删除操作;
步骤1.3:从右到左扫描操作历史记录,判断是否有操作与操作ov存在依赖关系;
步骤1.4:如果有操作od与ov存在依赖关系,则停止扫描;
步骤1.5:将操作ov和依赖信息广播到其他站点。
所述远程操作处理包括以下子步骤:
步骤2.1:每个站点接收到操作o,如果o不依赖于任何操作,则进入步骤2.2;如果o依赖于操作od,则判断od是否已经在操作历史记录中;如果是,则进入步骤2.3,否则加入到等待队列;
步骤2.2:将o与操作历史记录中的所有操作包围盒进行包含转换IT(o,bbo),得到被转换后的操作oy,进入步骤2.4;
步骤2.3:在操作历史记录的第k个位置中找到od,对位于k之后的操作进行包含转换IT(o,bbo),得到被转换后的操作oy,进入步骤2.4;
步骤2.4:将操作oy从物理视图转换成逻辑视图上的操作ow;
步骤2.5:执行ow。
作为优选,所述控制包围盒的容量大小,当操作的包围盒超过规定的容量阀值,则不能容纳新的操作,该操作将形成新的包围盒。
作为优选,步骤2.2和步骤2.3中所述包含转换IT(o,bbo),操作的包围盒bbo具有如下属性:bbo.p表示包围盒的位置;bbo.sid表示包围盒的优先级;bbo.len表示包围盒的操作数目;bbo.ops表示存储操作的容器;bbo.inc表示包围盒位置的增量;操作与操作包围盒的转换请见下表;
作为优选,步骤2.4中所述从物理视图到逻辑视图上的转换是通过二分搜索实现的,其具体实现过程是:二分搜索返回oy.p在所有删除操作的位置顺序为index,同时如果存在某个操作位置等于oy.p,则返回True,否则返回False。设删除操作的数目为|HD|;
(1)对于插入操作,如果二分搜索返回Ture,ow.p设置为oy.p+index+1-|HD|;如果返回False,ow.p设置为oy.p+index-|HD|;
(2)对于删除操作,如果二分搜索返回Ture,ow.p设置为-1;如果返回False,ow.p设置为oy.p+index-|HD|。
本发明的有益效果是:本发明支持对等网络环境的协同编辑工作;本发明能够确保多用户的协同结果是一致的;本发明支持快速地操作响应;
附图说明
图1是本发明实施例的本地操作处理流程图;
图2是本发明实施例的远程操作处理流程图;
图3是本发明实施例的逻辑视图和物理视图示意图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
本发明提供的一种操作包围盒的协同编辑一致性维护方法,首先基于转换语义定义依赖关系;
定义1.依赖关系;给定任意两个操作Oa和Ob,若Oa在Ob之前执行,则称Ob依赖于Oa;当且仅当Oa和Ob的作用对象位置关系满足以下三种情况:(1)Ob.t=Oa.t=ins,Ob.p=Oa.p,Ob.sid≥Oa.sid,则称Ob右依赖于Oa;(2)Ob.t=Oa.t=ins,Ob.p=Oa.p+1,Ob.sid≤Oa.sid;则称Ob左依赖于Oa;(3)Ob.t=del,Oa.t=ins,Ob.p=Oa.p,则称Ob正依赖于Oa;
定义2.操作;对于任何一个操作o,o.t表示操作的类型:插入记为ins、删除记为del,o.c表示操作的作用字符,o.p表示操作的位置,o.sid表示产生该操作的站点号;每个操作id由<sid,num>唯一标识,num代表sid站点产生的操作数目;操作的包含转换只会改变o.p的值,其他属性保持不变,操作o1对o2进行包含转换之后的结果请见表1;
表1操作o1对o2进行包含转换之后的结果
然后进行本地操作处理和远程操作处理;在本地操作处理和远程操作处理过程中将具有依赖关系的插入操作组织成包围盒,并且控制包围盒的容量大小。
请见图1,本实施例的本地操作处理包括以下步骤:
(1)每个用户发起的操作都会立即作用于文档,并分解成多个元操作o;
(2)每一个元操作o被转换到对应于物理视图上的操作ov;根据操作类型分两种:
对于o是插入操作,从右到左与操作历史记录中的每一个删除操作比较位置大小,如果大于,则将o.p更新为o.p+1并继续比较前一个删除操作;如果小于等于,则将位于删除操作之前的所有操作位置加1,并停止比较;
对于o是删除操作,从右到左与操作历史记录中的每一个删除操作比较位置大小,如果大于等于,则将o.p更新为o.p+1并继续比较前一个删除操作;如果小于,则停止比较,在当前位置加入删除操作。
(3)从右到左扫描操作历史记录,如果ov的位置不在当前待检查包围盒bbo的空间范围内,则ov不依赖bbo中的任何操作,排除bbo的影响,继续检查下一个包围盒;如果ov的位置在bbo的空间范围内,则ov需要与bbo包含的操作逐一进行判断。按照操作类型分两种情况:
对于ov是插入操作,ov.p小于bbo.p或者大于bbo.p+bbo.len,则ov.p更新为ov.p-bbo.len,否则,记录ov的位置在变量pos中,并对bbo中的每个操作进行排斥转换;
对于ov是删除操作,ov.p小于bbo.p或者大于bbo.p+bbo.len-1,则ov.p更新为ov.p-bbo.len,否则,对bbo中的每个操作进行排斥转换;
(4)对于插入操作,ov依赖包围盒bbo中的操作od,首先记录下od的操作id以及依赖关系,如果没有超过包围盒预设的阀值容量M,则将ov.p更新为pos,加入到bbo末端并将索引值<bi,oi>记录到hash表中,键为<ov.sid,ov.num>,bi为bbo在操作历史记录中的位置,oi为ov在bbo中的位置。如果包围盒已经装满了M个操作,则将ov.p更新为vpos,并用ov初始化一个新的包围盒,加入到操作历史记录末端,同样记录操作的索引<bi,oi>到hash表中。对于删除操作,不需要合并到包围盒,只需记录下od的操作id以及依赖关系;
(5)将操作ov以及依赖信息广播到其他站点。如果ov不依赖任何操作,则依赖信息为空,否则,依赖信息包含od的操作id以及依赖关系。
请见图2,本实施例的远程操作处理包括以下步骤:
(6)对操作历史记录中的所有包围盒进行包根据接收到信息,如果操作o没有依赖任何操作,那么直接进入(7);如果操作o依赖操作od,利用hash表判断od是否已经在操作历史记录中,如果在,则取出od的操作索引<bi,oi>,否则将操作o加入到等待队列。
操作的包围盒具有如下属性:bbo.p表示包围盒的位置;bbo.sid表示包围盒的优先级;bbo.len表示包围盒的操作数目;bbo.ops表示存储操作的容器;bbo.inc表示包围盒位置的增量。操作与操作包围盒的转换请见表2。最终,用转换的结果oy初始化一个新的包围盒,并加入到操作历史记录的末端。将oy的操作id加入到hash表中。
表格2操作与操作包围盒的转换
(7)取出第bi个包围盒中的第oi个操作,记为od,根据依赖关系,更新操作o的位置。即如果o左依赖于od,则o.p=od.p+1;如果o右依赖于od,则o.p=od.p;如果o正依赖于od,则o.p=od.p。然后对包围盒中位于oi之后的操作进行包含转换,得到oy。
如果o是插入操作且第bi个包围盒未装满,oy被加入到该包围盒,将oy与bi之后的包围盒逐个进行交换;交换的方式在表3中给出。
表3包围盒交换方式
如果o是插入操作且第bi个包围盒已装满,oy继续对位于bi之后的包围盒进行包含转换,转换的结果初始化一个新的包围盒,加入到操作历史记录中。
如果o是删除操作,oy对包围盒中位于oi之后的操作进行包含转换,然后继续对位于bi之后的包围盒进行包含转换。
(8)将oy转换成逻辑视图上的操作ow是通过二分搜索计算位于o.p之前的删除字符的数目。
(9)最终在文档上执行ow。
请见图3,将oy从物理视图转换成逻辑视图是通过二分搜索实现的,其具体过程为:二分搜索返回oy.p在所有删除操作的位置顺序为index,同时如果存在某个操作位置等于oy.p,则返回True,否则返回False。设删除操作的数目为|HD|;
(3)对于插入操作,如果二分搜索返回Ture,ow.p设置为oy.p+index+1-|HD|;如果返回False,ow.p设置为oy.p+index-|HD|;
(4)对于删除操作,如果二分搜索返回Ture,ow.p设置为-1;如果返回False,ow.p设置为oy.p+index-|HD|。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (5)
1.一种操作包围盒的协同编辑一致性维护方法,其特征在于:
首先基于转换语义定义依赖关系;
定义1.依赖关系;给定任意两个操作Oa和Ob,若Oa在Ob之前执行,则称Ob依赖于Oa;当且仅当Oa和Ob的作用对象位置关系满足以下三种情况:(1)Ob.t=Oa.t=ins,Ob.p=Oa.p,Ob.sid≥Oa.sid,则称Ob右依赖于Oa;(2)Ob.t=Oa.t=ins,Ob.p=Oa.p+1,Ob.sid≤Oa.sid;则称Ob左依赖于Oa;(3)Ob.t=del,Oa.t=ins,Ob.p=Oa.p,则称Ob正依赖于Oa;
定义2.操作;对于任何一个操作o,o.t表示操作的类型:插入记为ins、删除记为del,o.c表示操作的作用字符,o.p表示操作的位置,o.sid表示产生该操作的站点号;每个操作id由<sid,num>唯一标识,num代表sid站点产生的操作数目;操作的包含转换只会改变o.p的值,其他属性保持不变;
然后进行本地操作处理和远程操作处理;在本地操作处理和远程操作处理过程中将具有依赖关系的插入操作组织成包围盒,并且控制包围盒的容量大小。
2.根据权利要求1所述的操作包围盒的协同编辑一致性维护方法,其特征在于,所述本地操作处理包括以下子步骤:
步骤1.1:每个站点产生的操作o在该站点立即执行;
步骤1.2:将操作o转换到对应于物理视图上的操作ov,包括插入操作和删除操作;
步骤1.3:从右到左扫描操作历史记录,判断是否有操作与操作ov存在依赖关系;
步骤1.4:如果有操作od与ov存在依赖关系,则停止扫描;
步骤1.5:将操作ov和依赖信息广播到其他站点;
所述远程操作处理包括以下子步骤:
步骤2.1:每个站点接收到操作o,如果o不依赖于任何操作,则进入步骤2.2;如果o依赖于操作od,则判断od是否已经在操作历史记录中;如果是,则进入步骤2.3,否则加入到等待队列;
步骤2.2:将o与操作历史记录中的所有操作包围盒进行包含转换IT(o,bbo),得到被转换后的操作oy,进入步骤2.4;
步骤2.3:在操作历史记录的第k个位置中找到od,对位于k之后的操作进行包含转换IT(o,bbo),得到被转换后的操作oy,进入步骤2.4;
步骤2.4:将操作oy从物理视图转换成逻辑视图上的操作ow;
步骤2.5:执行ow。
3.根据权利要求1所述的操作包围盒的协同编辑一致性维护方法,其特征在于:所述控制包围盒的容量大小,当操作的包围盒超过规定的容量阀值,则不能容纳新的操作,该操作将形成新的包围盒。
4.根据权利要求2所述的操作包围盒的协同编辑一致性维护方法,其特征在于:步骤2.2和步骤2.3中所述包含转换IT(o,bbo),操作的包围盒bbo具有如下属性:bbo.p表示包围盒的位置;bbo.sid表示包围盒的优先级;bbo.len表示包围盒的操作数目;bbo.ops表示存储操作的容器;bbo.inc表示包围盒位置的增量;操作与操作包围盒的转换请见下表;
5.根据权利要求2所述的操作包围盒的协同编辑一致性维护方法,其特征在于:步骤2.4中所述从物理视图到逻辑视图上的转换是通过二分搜索实现的,其具体实现过程是:二分搜索返回oy.p在所有删除操作的位置顺序为index,同时如果存在某个操作位置等于oy.p,则返回True,否则返回False;设删除操作的数目为|HD|;
(1)对于插入操作,如果二分搜索返回Ture,ow.p设置为oy.p+index+1-|HD|;如果返回False,ow.p设置为oy.p+index-|HD|;
(2)对于删除操作,如果二分搜索返回Ture,ow.p设置为-1;如果返回False,ow.p设置为oy.p+index-|HD|。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610130095.8A CN105808517B (zh) | 2016-03-08 | 2016-03-08 | 一种操作包围盒的协同编辑一致性维护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610130095.8A CN105808517B (zh) | 2016-03-08 | 2016-03-08 | 一种操作包围盒的协同编辑一致性维护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105808517A true CN105808517A (zh) | 2016-07-27 |
CN105808517B CN105808517B (zh) | 2018-03-02 |
Family
ID=56467853
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610130095.8A Expired - Fee Related CN105808517B (zh) | 2016-03-08 | 2016-03-08 | 一种操作包围盒的协同编辑一致性维护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105808517B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110738022A (zh) * | 2019-10-22 | 2020-01-31 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012122265A1 (en) * | 2011-03-08 | 2012-09-13 | Google Inc. | Collaborative electronic document editing |
CN104077425A (zh) * | 2014-07-28 | 2014-10-01 | 武汉大学 | 一种基于操作转换的文本编辑实时协同方法 |
CN104462037A (zh) * | 2014-11-04 | 2015-03-25 | 华南理工大学 | 文档协同编辑中的一致性维护方法 |
US20150199307A1 (en) * | 2012-08-08 | 2015-07-16 | Google Inc. | Pluggable Architecture For Optimizing Versioned Rendering of Collaborative Documents |
-
2016
- 2016-03-08 CN CN201610130095.8A patent/CN105808517B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012122265A1 (en) * | 2011-03-08 | 2012-09-13 | Google Inc. | Collaborative electronic document editing |
US20150199307A1 (en) * | 2012-08-08 | 2015-07-16 | Google Inc. | Pluggable Architecture For Optimizing Versioned Rendering of Collaborative Documents |
CN104077425A (zh) * | 2014-07-28 | 2014-10-01 | 武汉大学 | 一种基于操作转换的文本编辑实时协同方法 |
CN104462037A (zh) * | 2014-11-04 | 2015-03-25 | 华南理工大学 | 文档协同编辑中的一致性维护方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110738022A (zh) * | 2019-10-22 | 2020-01-31 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
CN110738022B (zh) * | 2019-10-22 | 2023-06-16 | 上海海事大学 | 一种基于操作转换的html实时协同编辑方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105808517B (zh) | 2018-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9542440B2 (en) | Enterprise graph search based on object and actor relationships | |
CN103905311B (zh) | 流表匹配方法和装置以及交换机 | |
US9208137B2 (en) | Method to preview an undo/redo list | |
CN104537076B (zh) | 一种文件读写方法及装置 | |
EP2741216A1 (en) | Document collaboration method | |
CN108733713A (zh) | 数据仓库中的数据查询方法及装置 | |
CN103605778B (zh) | 一种视频文件的定位方法、装置及系统 | |
CN104598517A (zh) | 基于普通数据库的树型结构表的存储与查询技术 | |
CN106874501A (zh) | 一种SpreadJS表格自动生成并绑定数据库表的方法 | |
CN101534477A (zh) | 一种表项管理方法和装置 | |
CN105808517A (zh) | 一种操作包围盒的协同编辑一致性维护方法 | |
CN109408790A (zh) | 一种多人编辑文档的方法 | |
CN105955828B (zh) | 一种支持字符串操作的实时协同编辑一致性维护方法 | |
CN102999532A (zh) | 用户配置数据的方法及装置 | |
CN103812774A (zh) | 基于tcam的策略配置方法、报文处理方法及相应装置 | |
CN106202102B (zh) | 批量数据查询方法和装置 | |
CN108009195A (zh) | 一种基于大数据的降维转换方法、电子设备、存储介质 | |
CN109635161B (zh) | 一种海量数据环境下跨域异地协同设计方法 | |
CN106875152A (zh) | 一种任务创建方法及装置 | |
Frazier et al. | Unleashing the Potential of Additive Manufacturing: FAIR AM Data Management Principles | |
WO2019156842A1 (en) | Systems, methods, and software for implementing a notes service | |
CN101286903A (zh) | 一种网络审计领域提高会话完整性的方法 | |
CN103152245A (zh) | 一种巡航路线控制方法及系统 | |
CN103095561B (zh) | 一种巡航控制方法及系统 | |
CN105654222A (zh) | 带文档管理的团队协作系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180302 Termination date: 20200308 |
|
CF01 | Termination of patent right due to non-payment of annual fee |