有序列表存储在不保留订单的客户端数据库中(认为sqlite表)。列表的多个版本将同时存储和编辑,有时会合并。为了在同时进行编辑时保持顺序,使用了rank(位置)属性对列表进行排序。
rank
属性应该是什么样?插入列表时,可以使用哪种算法来确定新商品的rank
?
在待办事项应用程序中,多个脱机客户端编辑同一列表,但偶尔会联机并同步。待办事项列表是一组无序的实体,例如:
[{id: 1001, rank: 1}, {id: 1002, rank: 2}, {id: 1003, rank: 3}]
通过rank
属性,客户端可以在任意位置添加项目或重新排序列表。在我的示例中,整数用于指示位置,但是可以使用任何可排序的JSON数据类型(字符串,浮点数甚至集合)代替。 id
属性是随机生成的。
当客户上线时,其列表将自动合并。在此过程中,不应丢失任何更新,并且合并后的列表应符合用户的期望。
假定以下约束:
在插入新项目时,对列表项目重新编号可能是不可避免的。但是,就重新编号事件影响合并而言,应将令人惊讶的合并行为降至最低。