4

有序列表存储在不保留顺序的客户端数据库中(想想 sqlite 表)。列表的多个版本将同时存储和编辑,偶尔会合并。为了在面对并发编辑时保持顺序,使用排名(位置)属性对列表进行排序。

属性应该是什么rank样的?rank插入列表时可以使用什么算法来确定新项目?

解释

在待办事项应用程序中,多个离线客户端编辑同一个列表,但偶尔会上线并同步。待办事项列表是一组无序的实体,例如:

[{id: 1001, rank: 1}, {id: 1002, rank: 2}, {id: 1003, rank: 3}]

通过该rank属性,客户端可以在任意位置添加项目或重新排序列表。在我的示例中,整数用于指示位置,但可以使用任何可排序的 JSON 数据类型(字符串、浮点数,甚至是集合)。该id属性是随机生成的。

当客户上线时,他们的列表会自动合并。在此过程中,不应丢失任何更新,并且生成的合并列表应符合用户的期望。

假设以下约束:

  • 项目应具有确定的排序顺序。
  • 客户端需要能够在任何位置插入待办事项(在第一项之前,在第一项之后,...,在最后一项之后)。
  • 在任何时候都不应该在两个项目之间插入一个项目。

插入新项目时,重新编号列表项目可能是不可避免的。然而,就重新编号事件影响合并而言,应尽量减少令人惊讶的合并行为。

4

0 回答 0