python 如何生成这样一个列表,列表的元素值是唯一且递增的,用来做排序的权值
需求大概是这样的,数据库的表ordering
字段拿来做排序,希望ordering值都是递增的,而且唯一,排序就实现了,下次处理新的数据,被选中的新数据一定会排在最前面。所以需要python来生成这样一个列表。
我想到用时间戳来做这个值,那么查到数据后,把当前时间戳赋值给ordering,于是我在前端想对100条数据中的任意几条排序,只要在前端把想排序的加上序号,被选中的数据给到后端处理,把这些数据按序号排序后,ordering字段赋值时间戳。
本地测试是对的,但是在服务器上就不行了,服务器运行速度太快,导致序号1,2,3 都可能被赋值同一个时间戳,于是我又想了个办法,就是 ordering = timestamp - 序号
这样虽然不会出现ordering重复的情况了。
但是我觉得这个还是不严谨,因为在很极端的情况下是会出现重复的
比如当前时间戳是123456,此次需要计算的序号是1,2
ordering 是 123455, 123454
下一个时间戳是123457 排序序号是3,
ordering 是123454 出现重复了
所以,python能不能去生成一个列表,列表的元素值是唯一且递增的,总觉得这种需求应该是常见的吧?大家怎么解决这个问题的,我上述的方法可以用了,只是从理论上来看,是有缺陷的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
给个思路参考一下.
将 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.
Python 无法简单地解决这个问题。因为操作数据库数据的机器,不止你一台。
数据库的 sequence 功能,可以产出你要的,唯一,递增的东西。https://www.postgresql.org/do...
可以用数据库自增id排序
python的话
自己总结一下:我提问的需求有点偏离,重定应该放在数据库排序权值的字段上,而不是让python生成这样一个列表。
python需要实现一个函数返回一个值,让这个值在这个数据库中是唯一且递增的。 数据库如果是运用在商品的场景,一个人只会对自己的商品进行操作,那么他的数据虽然和别人在一张表上,但是操作只是自己的,用时间戳+排序号组成新的值,这个值对于这个用户来说就是唯一且递增的,如果场景不是这样,我认为可以把id(用户字段id)加上,来实现对整个表是唯一且递增的。