MySQL 如何保存有顺序的列表?

2021-05-24 12:44:08 +08:00
 phony2r

有一个表表示一个列表的每一小项 id/name/order, 其中 order 表示小项在列表中的顺序

现在这个列表是可以拖动进行排序的, 这样的话每次排序都会产生大量的 order 变化, 比如 1 移到 4, 就会产生 2->1 / 3->2 / 4->3 / 1->4 一共 4 个 order 变化

类似的, 加入 1 移到 100 的话就会产生 100 个 order 变化

如果批量更新的话, MySQL 的性能是个问题, 而且也无法保证原子性(部分更新 order 成功部分失败)

像这种带顺序的列表应该怎么设计?

4151 次点击
所在节点    MySQL
23 条回复
cwang22
2021-05-25 07:28:36 +08:00
数据可以试试 Jira 排序 ticket 的做法 LexoRank

排序 key 的格式大概是`2|i019qh`,更新读取都是 O(1),后台任务定期 rebalance


https://tmcalm.nl/blog/lexorank-jira-ranking-system-explained/
crclz
2021-05-25 11:29:04 +08:00
使用 mysql 的 json 类型。
CEBBCAT
2021-05-25 16:15:04 +08:00
@crclz #22 可以仔细讲讲吗?没听懂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778830

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX