CN105955828B - 一种支持字符串操作的实时协同编辑一致性维护方法 - Google Patents

一种支持字符串操作的实时协同编辑一致性维护方法 Download PDF

Info

Publication number
CN105955828B
CN105955828B CN201610238983.1A CN201610238983A CN105955828B CN 105955828 B CN105955828 B CN 105955828B CN 201610238983 A CN201610238983 A CN 201610238983A CN 105955828 B CN105955828 B CN 105955828B
Authority
CN
China
Prior art keywords
node
new
executing following
lmodel
following step
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.)
Active
Application number
CN201610238983.1A
Other languages
English (en)
Other versions
CN105955828A (zh
Inventor
何发智
吕晓
蔡维纬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Fuguang Information Technology Co ltd
Original Assignee
Wuhan University WHU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN201610238983.1A priority Critical patent/CN105955828B/zh
Publication of CN105955828A publication Critical patent/CN105955828A/zh
Application granted granted Critical
Publication of CN105955828B publication Critical patent/CN105955828B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting

Abstract

本发明公开了一种支持字符串操作的实时协同编辑一致性维护方法,方法中的每个站点都维护两层数据结构:视图层(View)和模型层(Model);Model包括哈希表(HT)和双链表(Lmodel);HT哈希存储所有结点(Node),其中,Node存储操作的字符串;Lmodel全序链接HT中的NodeView包括一个双链表(Lview),是由Lmodel中可见的Node链接而成;方法的控制流程分为本地操作处理和远程操作处理;本地操作产生后,遍历Lmodel,找到目标结点后执行本地操作,并生成远程操作(Oremote)后向各个站点传播;当接收到Oremote时,首先在HT中获取目标结点,然后在Lmodel中获取操作位置,执行远程操作。本发明能够支持在大规模对等网络环境下多用户实时协同编辑同一份文档,能够确保多用户的实时协同编辑的一致性。

Description

一种支持字符串操作的实时协同编辑一致性维护方法
技术领域
本发明属于计算机支持的协同工作领域,涉及一种实时文本协同编辑方法,具体涉及一种支持字符串操作的实时协同编辑一致性维护方法。
背景技术
实时协同编辑是计算机支持的协同工作中的一个重要应用领域。实时协同编辑系统有别于传统的分布式系统,允许不同地理位置的用户同时编辑同一份文档,每个站点都存储共享文档的副本。由于多用户可同时编辑共享文档的副本,因而给共享文档的一致性维护带来了挑战。
可交换的复制数据类型(Commutative Replicated Data Type,CRDT)方法是近几年新兴的一致性维护方法。主要思想,通过分配给操作对象唯一全局的ID,使得并发操作可以交换执行。基于操作对象的ID将其全序的映射到内部数据结构中,可维护操作意图的一致性,并收敛于一致性的结果。与传统的一致性维护的方法相比,CRDT方法的计算效率更高,具有很好的操作响应性。然而,大部分CRDT方法都不支持字符串的操作。
发明内容
为了解决上述技术问题,本发明提供了一种支持字符串的CRDT方法,尤其适合大规模的支持字符串操作的实时协同编辑一致性维护方法。
本发明所采用的技术方案是:一种支持字符串操作的实时协同编辑一致性维护方法,其特征在于:所述方法中的每个站点都维护两层数据结构:视图层View和模型层Model;所述模型层Model包括哈希表HT和双链表Lmodel;所述哈希表HT哈希存储所有结点Node,其中,每个结点Node存储操作的字符串;所述双链表Lmodel全序链接所述哈希表HT中的结点Node;所述视图层View提供了用户交互的界面,包括一个双链表Lview,是由所述双链表Lmodel中所有可见的结点Node链接而成;所述方法的控制流程分为本地操作处理和远程操作处理;本地操作产生后,遍历所述双链表Lmodel,找到目标结点后执行本地操作,并生成操作的传播形式Oremote后向各个站点传播;当接收到远程操作时,首先在所述哈希表HT中获取有效目标结点,然后在所述双链表Lmodel中获取有效的操作位置,执行远程操作;所述视图层View和所述模型层Model之间的同步过程为所述双链表Lview链接所述双链表Lmodel中所有可见结点。
作为优选,本地操作具体实现包括以下子步骤:
步骤1.1:用户产生本地元操作O;
步骤1.2:判断元操作O是否为插入操作;
若是,则执行下述步骤1.3;
若否,则执行下述步骤1.15;
步骤1.3:判断结点Node是否为双链表Lmodel中的头结点;
若是,则执行下述步骤1.4;
若否,则执行下述步骤1.7;
步骤1.4:创建新结点New_Node;
步骤1.5:将新结点New_Node链接到Lmodel中的头结点后;
步骤1.6:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤1.7:判断是否在结点Node内部插入;
若是,则执行下述步骤1.8;
若否,则执行下述步骤1.12;
步骤1.8:创建新结点New_Node;
步骤1.9:将结点Node分裂为两个子结点,分别记作FNode和LNode;
步骤1.10:将新结点New_Node链接到FNode和LNode之间;
步骤1.11:将新结点New_Node、FNode和LNode添加到所述哈希表HT中,本流程结束;
步骤1.12:创建新结点New_Node;
步骤1.13:将新结点New_Node链接到双链表Lmodel中的Node后;
步骤1.14:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤1.15:判断删除字符串是否跨越多个结点;
若是,则执行下述步骤1.16;
若否,则执行下述步骤1.19;
步骤1.16:删除第一个结点Node;
步骤1.17:删除中间n-1个结点Node;
步骤1.18:删除最后一个结点Node,本流程结束;
步骤1.19:判断是否删除整个结点;
若是,则执行下述步骤1.20;
若否,则执行下述步骤1.21;
步骤1.20:将结点Node置为墓碑,本流程结束;
步骤1.21:判断是否删除结点前部分;
若是,则执行下述步骤1.22;
若否,则执行下述步骤1.24;
步骤1.22:将结点Node分裂为子结点FNode和LNode;
步骤1.23:将FNode置为墓碑,本流程结束;
步骤1.24:判断是否删除结点后部分;
若是,则执行下述步骤1.25;
若否,则执行下述步骤1.27;
步骤1.25:将结点Node分裂为子结点FNode和LNode;
步骤1.26:将LNode置为墓碑,本流程结束;
步骤1.27:将结点Node分裂为三个子结点,记作FNode、MNode和LNode;
步骤1.28:将MNode置为墓碑,本流程结束。
作为优选,远程操作具体实现包括以下子步骤:
步骤2.1:针对接收到的远程操作O,判断O是否为插入操作;
若是,则执行下述步骤2.2;
若否,则执行下述步骤2.21;
步骤2.2:寻找目标结点Node;
步骤2.3:判断目标结点Node是否为双链表Lmodel中的头结点;
若是,则执行下述步骤2.4;
若否,则执行下述步骤2.12;
步骤2.4:判断目标结点Node后是否有其它并发插入的结点;
若是,则执行下述步骤2.5;
若否,则执行下述步骤2.9;
步骤2.5:创建新结点New_Node;
步骤2.6:比较新结点New_Node与其它并发插入结点的标识符Key,找插入位置;
步骤2.7:找并发插入结点的标识符Key小于New_Node的标识符Key的第一个结点,记作Tar_Node,新结点New_Node插入到Tar_Node前;
步骤2.8:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.9:创建新结点New_Node;
步骤2.10:将新结点New_Node链接到所述双链表Lmodel中的Node后;
步骤2.11:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.12:判断是否在结点Node内部插入;
若是,则执行下述步骤2.13;
若否,则执行下述步骤2.17;
步骤2.13:创建新结点New_Node;
步骤2.14:将结点Node分裂为两个子结点FNode和LNode;
步骤2.15:将新结点New_Node链接到FNode和LNode之间;
步骤2.16:将新结点New_Node、FNode和LNode添加到所述哈希表HT中,本流程结束;
步骤2.17:创建新结点New_Node;
步骤2.18:比较新结点New_Node与Node后其他并发插入结点的标识符Key,找插入位置;
步骤2.19:找并发插入结点中的标识符Key小于New_Node的标识符Key的第一个结点,记作Tar_Node,新结点New_Node插入到Tar_Node前;
步骤2.20:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.21:判断删除字符串是否跨越多个结点;
若是,则执行下述步骤2.22;
若否,则执行下述步骤2.25;
步骤2.22:删除第一个结点Node;
步骤2.23:删除中间n-1个结点Node;
步骤2.24:删除最后一个结点Node,本流程结束;
步骤2.25:判断是否删除整个结点;
若是,则执行下述步骤2.26;
若否,则执行下述步骤2.27;
步骤2.26:将结点Node置为墓碑,本流程结束;
步骤2.27:判断是否删除结点前部分;
若是,则执行下述步骤2.28;
若否,则执行下述步骤2.30;
步骤2.28:将结点Node分裂为FNode和LNode;
步骤2.29:将FNode置为墓碑,本流程结束;
步骤2.30:判断是否删除结点后部分;
若是,则执行下述步骤2.31;
若否,则执行下述步骤2.33;
步骤2.31:将结点Node分裂为FNode和LNode;
步骤2.32:将LNode置为墓碑,本流程结束;
步骤2.33:将结点Node分裂为三个子结点,记作FNode、MNode和LNode;
步骤2.34:将MNode置为墓碑,本流程结束。
作为优选,如果要维持结点Node之间的全序关系不仅需要给每个结点Node分配唯一的ID,而且还需要维护一个哈希表HT。
作为优选,当ID中若干判定条件相等情况下,则能用站点号来定序,基于哈希表HT和唯一的ID,通过哈希映射,能在O(1)时间内找到双链表Lmodel中目标结点Node。
作为优选,双链表Lmodel中的Node可能由于并发并发操作导致Node分裂,因此需要找Node分裂的子结点,故需要给子结点分配唯一的ID;找到子结点后,能执行相应的插入或删除操作。
本方法不仅可维护操作意图的一致性还能实现结果一致性。该方法比目前典型的CRDT方法的效率都高,可提供很好的操作响应性,并适合大规模的协同编辑环境。
附图说明
图1:本发明实施例的整体框架图;
图2:本发明实施例的本地操作流程图;
图3:本发明实施例的远程操作流程图;
图4:本发明实施例的协同工作场景示意图;
图5:本发明实施例的三个站点的协同工作场景示意图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
请见图1,本发明提供的一种支持字符串操作的一致性维护方法的每个站点都维护两层数据结构:视图层(View)和模型层(Model)。Model包括哈希表(HT,Hash Table)和双链表(Lmodel)。HT哈希存储所有结点Node。其中,每个Node存储操作的字符串。Lmodel全序链接HT中的Node。View提供了用户交互的界面,包括一个双链表Lview,是由Lmodel中所有可见的Node链接而成。
控制流程分为本地操作处理和远程操作处理。本地操作产生后,遍历Lmodel,找到目标结点后执行本地操作,并生成操作的传播形式Oremote后向各个站点传播。当接收到远程操作时,首先在HT中获取有效目标结点,然后在Lmodel中获取有效的操作位置,执行远程操作。View和Model之间的同步过程为Lview链接Lmodel中所有可见结点(不包括Lmodel中的墓碑结点)。
以下通过具体实施例对本发明做进一步的阐述;
请见图2,本实施例的本地操作处理分为本地插入操作和本地删除操作,执行步骤如下:
(1)本地插入操作
基于插入操作的目标结点Node在Lmodel中位置,分两种情况:第一,如果在头结点插入,直接将新结点New_Node链接到Lmodel中,并将New_Node添加到HT中;第二,如果不在头结点插入,在Lmodel中找到目标结点后,具体分两种情况:①如果在目标结点内插入,目标结点被分裂成前后两个子结点FNode和LNode,需要将FNode、新结点New_Node、LNode链接到Lmodel中,并将这三个结点添加到HT中;②如果在目标结点后插入,需要将新结点New_Node链接到Lmodel中,并且将New_Node添加到HT中。
(2)本地删除操作
本地删除操作需要考虑五种情况。第一,删除整个结点,直接将其置为墓碑。第二,删除结点前部分,导致原始结点分裂成前后两个结点,将前结点置为墓碑,并将前后结点链接到Lmodel中。第三,删除结点后部分,导致原始结点分裂成前后两个结点,将后结点置为墓碑,并将前后结点链接到Lmodel中。第四,删除结点的中间部分,导致原始结点分裂成前、中、后三个结点,将中间结点置为墓碑,并将这三个结点链接到Lmodel中。第五,删除的字符序列跨越多个结点。
请见图3,本实施例的远程操作处理分为远程插入操作和远程删除操作,执行步骤如下:
(1)远程插入操作
根据接收的远程插入操作的原结点的key,在HT中找有效的目标结点。找到目标结点后,插入新结点New_Node分如下两种情况。(1)目标结点不是头结点,分①②两种情况。①在目标结点后插入,需要与目标结点后的多个并发插入结点比较各自的key,直到某个并发插入结点的key<新结点New_Node的key,将New_Node双向链接到该并发结点前,并将New_Node插入到HT中;②在目标结点内插入,导致目标结点被分裂成前后两个结点FNode和LNode,将新结点New_Node双向链接到FNode和LNode之间,并将New_Node、FNode和LNode插入到HT中。(2)目标结点是头结点,分为①②两种情况。①目标结点后有多个结点,需要逐个遍历目标结点后的结点,直到某个结点的key<新结点New_Node的key,将New_Node双向链接到该结点前,并将New_Node插入到HT中;②目标结点后无结点,直接将New_Node双向链接到目标结点后,将新结点New_Node插入到HT中。
(2)远程删除操作
远程删除操作需要考虑两种情况。第一,若删除的字符串位于一个结点内,直接将删除的字符串设置为墓碑。第二,若删除的字符串跨越多个结点,需要先删除第一结点,再删除中间的n-1个结点,最后删除第n个结点,分别将相应的结点设置为墓碑。
首先进行相关定义:
定义1Node<key,flag,visible,content,prior,next,link,list>是一个八元组。key为Node的唯一标识;flag表示Node是否分裂;visible表示Node是否可见;content表示存储的字符串;prior、next和link用于链接Node;list存储分裂的Node。
定义2ID<s,ssv,site,offset,len>为一个五元组,s为session的标识符,一个全局递增整数;ssv为状态向量sv[k]的求和,site为站点号;offset为偏移量,即当前Node的最左面字符与原始Node(未被分裂的结点)的最左面字符的距离,初值为0;len为Node的长度,即对应字符串的长度。
定义3给定Node1和Node2的ID为如果当且仅当满足下列条件之一:(1)(2)如果有或(3)如果有或(4)如果有
基于定义1到定义3,在图4的协同工作场景中,有site1,site2和site3共同参与,且session的计数为1。各操作O1,O2,O3,O4对应的字序列长度分别3,4,6,5,各站点产生的操作及对应的sv如图4所示。操作结点的ID分别为: 基于定义2和定义3,有
图5为一个session中三个站点的协同工作场景。假设session的计数为1,初始状态为空,站点号大小为site1<site2<site3,其中为在第i个站点的第j个状态,表示为墓碑字符。为更好描述字符序列对应的结点的前后位置和结点分裂情况,本文用“-”连接字符序列对应的结点。site1产生本地操作O1=insert(0,0,“aaa”),O4=insert(1,2,“ddd”);site2产生本地操作O2=insert(0,0,“bbb”),O5=insert(1,1,“eee”);site3产生本地操作O3=insert(0,0,“ccc”),O6=delete(1,1,2)。各个操作的SV分别为SV(O1)=(1,0,0),SV(O2)=(0,1,0),SV(O3)=(0,0,1),SV(O4)=(2,1,0),SV(O5)=(0,2,0),SV(O6)=(0,0,2)。各个操作对象分配的ID为 按照ID的全序机制,有
表1给出该方法的执行过程。利用本发明提出的支持字符串操作的协同编辑方法,三个站点都收敛于“cc-c-b-eee-b-ddd-b-aaa”,即“cbeeebdddbaaa”。综上所述,支持字符串的文本编辑实时协同方法,能够实现多个站点维护协同结果的一致性。
表1各站点操作的执行
本方法比目前典型的CRDT方法的效率都高,可提供很好的操作响应性,并适合大规模的协同编辑环境。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

Claims (4)

1.一种支持字符串操作的实时协同编辑一致性维护方法,其特征在于:所述方法中的每个站点都维护两层数据结构:视图层View和模型层Model;所述模型层Model包括哈希表HT和双链表Lmodel;所述哈希表HT哈希存储所有结点Node,其中,每个结点Node存储操作的字符串;所述双链表Lmodel全序链接所述哈希表HT中的结点Node;所述视图层View提供了用户交互的界面,包括一个双链表Lview,是由所述双链表Lmodel中所有可见的结点Node链接而成;所述方法的控制流程分为本地操作处理和远程操作处理;本地操作产生后,遍历所述双链表Lmodel,找到目标结点后执行本地操作,并生成操作的传播形式Oremote后向各个站点传播;当接收到远程操作时,首先在所述哈希表HT中获取有效目标结点,然后在所述双链表Lmodel中获取有效的操作位置,执行远程操作;所述视图层View和所述模型层Model之间的同步过程为所述双链表Lview链接所述双链表Lmodel中所有可见结点;
本地操作具体实现包括以下子步骤:
步骤1.1:用户产生本地元操作O;
步骤1.2:判断元操作O是否为插入操作;
若是,则执行下述步骤1.3;
若否,则执行下述步骤1.15;
步骤1.3:判断结点Node是否为双链表Lmodel中的头结点;
若是,则执行下述步骤1.4;
若否,则执行下述步骤1.7;
步骤1.4:创建新结点New_Node
步骤1.5:将新结点New_Node链接到Lmodel中的头结点后;
步骤1.6:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤1.7:判断是否在结点Node内部插入;
若是,则执行下述步骤1.8;
若否,则执行下述步骤1.12;
步骤1.8:创建新结点New_Node
步骤1.9:将结点Node分裂为两个子结点,分别记作FNodeLNode
步骤1.10:将新结点New_Node链接到FNodeLNode之间;
步骤1.11:将新结点New_NodeFNodeLNode添加到所述哈希表HT中,本流程结束;
步骤1.12:创建新结点New_Node
步骤1.13:将新结点New_Node链接到双链表Lmodel中的Node后;
步骤1.14:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤1.15:判断删除字符串是否跨越多个结点;
若是,则执行下述步骤1.16;
若否,则执行下述步骤1.19;
步骤1.16:删除第一个结点Node
步骤1.17:删除中间n-1个结点Node
步骤1.18:删除最后一个结点Node,本流程结束;
步骤1.19:判断是否删除整个结点;
若是,则执行下述步骤1.20;
若否,则执行下述步骤1.21;
步骤1.20:将结点Node置为墓碑,本流程结束;
步骤1.21:判断是否删除结点前部分;
若是,则执行下述步骤1.22;
若否,则执行下述步骤1.24;
步骤1.22:将结点Node分裂为子结点FNodeLNode
步骤1.23:将FNode置为墓碑,本流程结束;
步骤1.24:判断是否删除结点后部分;
若是,则执行下述步骤1.25;
若否,则执行下述步骤1.27;
步骤1.25:将结点Node分裂为子结点FNodeLNode
步骤1.26:将LNode置为墓碑,本流程结束;
步骤1.27:将结点Node分裂为三个子结点,记作FNodeMNodeLNode
步骤1.28:将MNode置为墓碑,本流程结束;
远程操作具体实现包括以下子步骤:
步骤2.1:针对接收到的远程操作O,判断O是否为插入操作;
若是,则执行下述步骤2.2;
若否,则执行下述步骤2.21;
步骤2.2:寻找目标结点Node
步骤2.3:判断目标结点Node是否为双链表Lmodel中的头结点;
若是,则执行下述步骤2.4;
若否,则执行下述步骤2.12;
步骤2.4:判断目标结点Node后是否有其它并发插入的结点;
若是,则执行下述步骤2.5;
若否,则执行下述步骤2.9;
步骤2.5:创建新结点New_Node
步骤2.6:比较新结点New_Node与其它并发插入结点的标识符Key,找插入位置;
步骤2.7:找并发插入结点的标识符Key 小于New_Node的标识符Key的第一个结点,记作Tar_Node,新结点New_Node插入到Tar_Node前;
步骤2.8:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.9:创建新结点New_Node
步骤2.10:将新结点New_Node链接到所述双链表Lmodel中的Node后;
步骤2.11:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.12:判断是否在结点Node内部插入;
若是,则执行下述步骤2.13;
若否,则执行下述步骤2.17;
步骤2.13:创建新结点New_Node
步骤2.14:将结点Node分裂为两个子结点FNodeLNode
步骤2.15:将新结点New_Node链接到FNodeLNode之间;
步骤2.16:将新结点New_NodeFNodeLNode添加到所述哈希表HT中,本流程结束;
步骤2.17:创建新结点New_Node
步骤2.18:比较新结点New_NodeNode后其他并发插入结点的标识符Key,找插入位置;
步骤2.19:找并发插入结点中的标识符Key 小于New_Node的标识符Key的第一个结点,记作Tar_Node,新结点New_Node插入到Tar_Node前;
步骤2.20:将新结点New_Node添加到所述哈希表HT中,本流程结束;
步骤2.21:判断删除字符串是否跨越多个结点;
若是,则执行下述步骤2.22;
若否,则执行下述步骤2.25;
步骤2.22:删除第一个结点Node
步骤2.23:删除中间n-1个结点Node
步骤2.24:删除最后一个结点Node,本流程结束;
步骤2.25:判断是否删除整个结点;
若是,则执行下述步骤2.26;
若否,则执行下述步骤2.27;
步骤2.26:将结点Node置为墓碑,本流程结束;
步骤2.27:判断是否删除结点前部分;
若是,则执行下述步骤2.28;
若否,则执行下述步骤2.30;
步骤2.28:将结点Node分裂为FNodeLNode
步骤2.29:将FNode置为墓碑,本流程结束;
步骤2.30:判断是否删除结点后部分;
若是,则执行下述步骤2.31;
若否,则执行下述步骤2.33;
步骤2.31:将结点Node分裂为FNodeLNode
步骤2.32:将LNode置为墓碑,本流程结束;
步骤2.33:将结点Node分裂为三个子结点,记作FNodeMNodeLNode
步骤2.34:将MNode置为墓碑,本流程结束。
2.根据权利要求1所述的支持字符串操作的实时协同编辑一致性维护方法,其特征在于:如果要维持结点Node之间的全序关系不仅需要给每个结点Node分配唯一的ID,而且还需要维护一个哈希表HT
3.根据权利要求2所述的支持字符串操作的实时协同编辑一致性维护方法,其特征在于:当ID中判定条件相等情况下,则能用站点号来定序,基于哈希表HT和唯一的ID,通过哈希映射,能在O(1)时间内找到双链表Lmodel中目标结点Node
4.根据权利要求3所述的支持字符串操作的实时协同编辑一致性维护方法,其特征在于:双链表Lmodel中的Node由于并发操作导致Node分裂,因此需要找Node分裂的子结点,故需要给子结点分配唯一的ID;找到子结点后,能执行相应的插入或删除操作。
CN201610238983.1A 2016-04-18 2016-04-18 一种支持字符串操作的实时协同编辑一致性维护方法 Active CN105955828B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610238983.1A CN105955828B (zh) 2016-04-18 2016-04-18 一种支持字符串操作的实时协同编辑一致性维护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610238983.1A CN105955828B (zh) 2016-04-18 2016-04-18 一种支持字符串操作的实时协同编辑一致性维护方法

Publications (2)

Publication Number Publication Date
CN105955828A CN105955828A (zh) 2016-09-21
CN105955828B true CN105955828B (zh) 2019-01-29

Family

ID=56918034

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610238983.1A Active CN105955828B (zh) 2016-04-18 2016-04-18 一种支持字符串操作的实时协同编辑一致性维护方法

Country Status (1)

Country Link
CN (1) CN105955828B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107608598A (zh) * 2017-07-17 2018-01-19 捷开通讯(深圳)有限公司 终端及其view字符的复制方法、存储装置
CN109241571B (zh) * 2018-08-07 2022-05-13 武汉大学 一种基于crdt的支持特征cad模型的实时协同编辑方法
CN110347749A (zh) * 2019-06-27 2019-10-18 绿漫科技有限公司 一种基于crdt的分布式类json数据自动合并的方法及系统
CN112738234B (zh) * 2020-12-29 2022-08-23 中国人民解放军海军工程大学 一种基于crdt的轻量级异步移动协同编辑方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102355478A (zh) * 2011-07-12 2012-02-15 北京大学 基于半分布式实时协同编辑软件的协同处理方法
CN104462037A (zh) * 2014-11-04 2015-03-25 华南理工大学 文档协同编辑中的一致性维护方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140152665A1 (en) * 2012-11-30 2014-06-05 Sap Ag Multi-media collaborator

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102355478A (zh) * 2011-07-12 2012-02-15 北京大学 基于半分布式实时协同编辑软件的协同处理方法
CN104462037A (zh) * 2014-11-04 2015-03-25 华南理工大学 文档协同编辑中的一致性维护方法

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
A CRDT Supporting Selective Undo for Collaborative Text Editing;Weihai Yu 等;《Proceedings of the 15th IFIP WG 6.1 International Conference on Distributed Applications and Interoperable Systems》;20150604;第9038卷;193-206 *
Consistency maintenance in real-time collaborative graphics editing systems;Chengzheng Sun 等;《ACM Transactions on Computer-Human Interaction (TOCHI)》;20020331;第9卷(第1期);1-41 *
Replicated abstract data types: Building blocks for collaborative applications;Hyun-Gul Roh 等;《Journal of Parallel and Distributed Computing》;20110331;第71卷(第3期);第360-362页第5节 *
Supporting String-Wise Operations and Selective Undo for Peer-to-Peer Group Editing;Weihai Yu;《GROUP "14 Proceedings of the 18th International Conference on Supporting Group Work》;20141112;第227-229页第3-4节,第231-232页第8节 *
Weihai Yu.Supporting String-Wise Operations and Selective Undo for Peer-to-Peer Group Editing.《GROUP "14 Proceedings of the 18th International Conference on Supporting Group Work》.2014,第227-229页第3-4节,第231-232页第8节. *
一种高效率的实时协同编辑中的意图保持操作转换算法;蔡维纬 等;《计算机学报》;20150723;第38卷(第10期);2041-2053 *
实时协同文本编辑系统中共享文档的一致性维护;王名悠 等;《福建电脑》;20060301(第3期);102,107-108 *

Also Published As

Publication number Publication date
CN105955828A (zh) 2016-09-21

Similar Documents

Publication Publication Date Title
CN105955828B (zh) 一种支持字符串操作的实时协同编辑一致性维护方法
CN103368851B (zh) 基于资源复用的Openflow流表存储优化方法
CN103560963B (zh) 一种OpenFlow流表存储空间压缩方法
Lv et al. A string-wise CRDT algorithm for smart and large-scale collaborative editing systems
Sannino et al. Fundamental partial compositeness
CN107395501A (zh) 一种网络服务功能链的跨域部署方法
CN103218692B (zh) 基于活动间依赖关系分析的工作流挖掘方法
Kelly Jr et al. Optimal fish harvesting for a population modeled by a nonlinear parabolic partial differential equation
CN103336782B (zh) 一种关系型分布式数据库系统
CN109857803A (zh) 数据同步方法、装置、设备、系统及计算机可读存储介质
Sun et al. Dynamic analysis of digital twin system based on five-dimensional model
Kleppmann Moving elements in list CRDTs
CN103106269B (zh) 一种基于搜索空间约减的Web服务组合方法
CN106095821A (zh) 一种通用表单配置管理方法
CN112288397A (zh) 流程模板配置方法、流程执行方法、装置和电子设备
CN109241571A (zh) 一种基于crdt的支持特征cad模型的实时协同编辑方法
Rinberg et al. Array CRDTs using delta-mutations
CN101539960A (zh) 复制式协同CAD系统中保持用户意愿的Undo/Redo方法
CN104932982B (zh) 一种消息访存的编译方法及相关装置
Xu et al. A novel batch-based LKH tree balanced algorithm for group key management
Nédelec et al. Concurrency effects over variable-size identifiers in distributed collaborative editing
CN105739975A (zh) 一种基于web浏览器的鱼骨图在线编辑方法
Zegour Scalable distributed compact trie hashing (CTH*)
CN112738234B (zh) 一种基于crdt的轻量级异步移动协同编辑方法
Esquivel-Gómez et al. On the growth of directed complex networks with preferential attachment: effect upon the prohibition of multiple links

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
TR01 Transfer of patent right

Effective date of registration: 20210408

Address after: No.8, Huyue East Road, Longchi street, Liuhe District, Nanjing City, Jiangsu Province

Patentee after: Nanjing Beidou innovation and Application Technology Research Institute Co.,Ltd.

Address before: 430072 Hubei Province, Wuhan city Wuchang District of Wuhan University Luojiashan

Patentee before: WUHAN University

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230704

Address after: No.8, Huyue East Road, Longchi street, Liuhe District, Nanjing City, Jiangsu Province

Patentee after: Nanjing Fuguang Information Technology Co.,Ltd.

Address before: No.8, Huyue East Road, Longchi street, Liuhe District, Nanjing City, Jiangsu Province

Patentee before: Nanjing Beidou innovation and Application Technology Research Institute Co.,Ltd.

TR01 Transfer of patent right