并发编辑合并

时间:2016-11-16 11:18:58

标签: python python-2.7

我试图实现简单的并发编辑模型。向文件添加和删除数据由事件处理。 活动过程:

  1. 要求更改ID(基本上是时间戳)
  2. 从服务器获取ID
  3. 使用ID向服务器发送更改。(更改包括索引,事件类型(ADD,REMOVE),可选字符(对于ADD))
  4. 服务器获得更改
  5. 事件队列先到先得(多个更改可以有相同的原始字符串),所以我将事件应用于内容
  6. 新内容应该是下一个事件库,因此需要移动下一个事件索引(合并)。
  7. 问题是如何将新内容与基础合并(多个事件可以具有相同的基础)。

    服务器有字符串:"Hello Worl"

    2客户想要改变,都以此为基础。 C1添加","索引5(从0开始计数) C2添加" d"索引10。

    因为","然后添加了" d"会导致"Hello, Wordl"。 索引应移动+1(在这种情况下)。

    一般情况下我们可以同时拥有更多事件,因此合并将更加复杂。差异可能是+10或-5等。

    检测基数中索引X之前的内容有多少变化的好方法是什么?

    我正在使用python。

    编辑:

    我想到了它,我想我知道什么是解决它的好方法。 让我们说我们有字符串abcdefg和abdeg。我现在想扩展第二个字符串,使其与第一个字符串相匹配:abcdefg - ab#de#g。从这里我可以看到变化的位置。我不关心替换只插入和删除。这个东西适用于大多数情况,但会有像aaaaaa和aa这样的问题,但是这些字符串在我的系统中不太可能。任何人都知道我应该用什么来达到这个目的?

1 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是跟踪链表。服务器可以通过在新节点周围重新附加列表来在节点之后插入字符,并且删除类似。您不是发送索引,而是将节点ID /地址发送到服务器

如果有人删除了您想要插入的节点后该怎么办?为了不破坏模型,删除的节点需要保持连接到列表(幻像),因此服务器在插入这样一个删除的节点之后可以在节点之前插入(或者之前如果两个被删除等等)。< / p>

这将要求服务器上的一些垃圾清理偶尔删除幻像节点,使任何具有先前时间戳的客户端请求无效。

空间方面这不是更多 - 每个char需要两个指针,也许有点开销。如果你想要一些代码建议评论。