保存行排序顺序的最佳方法

Posted

技术标签:

【中文标题】保存行排序顺序的最佳方法【英文标题】:Best way to save a sorting order for rows 【发布时间】:2020-10-21 20:10:29 【问题描述】:

我有一个表格,其中的行具有特定的顺序。用户可以在排序的任何位置插入新行。

我们目前的策略是:

使用 Integer 类型的名为“order_index”的列 行的“order_index”以 10000 分隔 插入新行时,在相邻行之间分配整数 如果行变得过于紧密(有一个分隔),则锁定并重新将“order_index”分配给所有行,递增 10000

这显然有点复杂,并且重新分配不是最佳的,因为它需要的时间比我们想要的要长。 有更好的方法吗?

【问题讨论】:

是否有任何索引/检索要求?我的想法最初是针对此类问题的链接列表,例如this。插入时间会很快,但检索时间可能会很慢。 @Garrett 这里需要更多的上下文来提供解决方案。你能解释一下你如何决定一个新的行应该位于开始和结束范围之间。例如,新行应该在 10000 到 20000 之间 您还没有指出用户如何指示行在序列中的位置,但是对于 order_index 使用数字而不是整数。最初的 2 行可以设置为任何所需的值。然后在插入时只平均 order_index 前一行和下一行以获得当前行的 order_index。 (注意:numeric 列在小数点后最多提供 16383 位数字,因此有足够的空间)。对于新的第一个或最后一个 order_index,添加或减去任何值。确切的过程是用户可以重新排序 order_index。 @JonWarren 一个链表可以解决这个问题,尽管我们首先尝试过,但数据从未保持原始状态(它以一些像循环一样的混乱结束)。 @SUMITPATRO 我们知道新行应该在哪一行之后。 【参考方案1】:

如果使用浮点索引,中间总是有一个数字。

【讨论】:

我也是这么想的,但是意识到浮点数据类型实际上可以具有彼此最大程度接近的数字,并且它们之间没有选择(因为它们具有有限的精度)。

以上是关于保存行排序顺序的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

拖放列表,从mysql中的元素中保存顺序的最佳性能

使用 JQuery Sortable 重新排序后如何将 .NET Gridview 行顺序保存到数据库

当订单保存无关紧要时,uint64s序列的最佳压缩方法

在 C# 中按字母顺序对 XML 文档进行排序

哪个是按顺序发送大型 UDP 数据包的最佳方法

如何保存排序顺序?