#24·xray

需要帮助:优化片段标识符

作者: nathansobo创建于 2018年3月6日更新于 2018年5月3日
标签help wanted

Xray 的缓冲区是一种 CRDT,它存储了每一段插入的文本,这些文本都被插入到一个巨大的 copy-on-write B 树中。插入是不可变的,每一段插入最初都以完整的形式添加到树中。之后,每当在现有的插入文本中插入新文本时,这些插入会被分割成片段。因此,树最终包含了交织的片段序列,每个片段都来自不同的原始插入。保留所有这些片段及其与原始插入的连接,使我们能够以逻辑方式描述缓冲区中的位置,即以一个唯一描述在不可变插入中某个位置的 (insertion_id, offset) 对来表示。要确定这种逻辑位置在文档中所处的位置,我们需要确定指定插入的位置所包含的片段中包含了指定的偏移量。为了实现这一点,每个插入都通过 Buffer::insertions 映射与辅助树关联。这些树只包含原始插入的片段,并将偏移量范围映射到 FragmentId。一旦找到特定 (insertion_id, offset) 对的片段 ID,您就可以使用它在包含文档完整文本的主 fragments 树中进行查找。请参阅我在 InfoQ 2017 上的演讲 Xray CRDT: Collaborative Editing with Tachyon 以获得更清晰的解释。

内容来源: atom-archive/xray