需求大概是这样的,数据库的表ordering
字段拿来做排序,希望ordering值都是递增的,而且唯一,排序就实现了,下次处理新的数据,被选中的新数据一定会排在最前面。所以需要python来生成这样一个列表。
我想到用时间戳来做这个值,那么查到数据后,把当前时间戳赋值给ordering,于是我在前端想对100条数据中的任意几条排序,只要在前端把想排序的加上序号,被选中的数据给到后端处理,把这些数据按序号排序后,ordering字段赋值时间戳。
本地测试是对的,但是在服务器上就不行了,服务器运行速度太快,导致序号1,2,3 都可能被赋值同一个时间戳,于是我又想了个办法,就是 ordering = timestamp - 序号
这样虽然不会出现ordering重复的情况了。
但是我觉得这个还是不严谨,因为在很极端的情况下是会出现重复的
比如当前时间戳是123456,此次需要计算的序号是1,2
ordering 是 123455, 123454
下一个时间戳是123457 排序序号是3,
ordering 是123454 出现重复了
所以,python能不能去生成一个列表,列表的元素值是唯一且递增的,总觉得这种需求应该是常见的吧?大家怎么解决这个问题的,我上述的方法可以用了,只是从理论上来看,是有缺陷的。
给个思路参考一下.
将 ordering 字段类型设置成 bitint(8字节), 字段值由两部分组成, 各占 4 字节:
这样可达到唯一且递增的结果. 比如 A 时间点增加 3 个记录, 字段值如下
其中 order_val() 是这样的 python 函数
A + T 时间点增加 2 个记录, 字段值如下
由于 A+T > A(T>0), 对任意序列 x,y, 都有 order_val(A+T,x) > order_val(A,y), 即使 y > x.