每天、每部门生成从1开始的流水号,如何高效不重复。

IdleMan 发布于 07/22 14:40
阅读 599
收藏 0

几千个部门,还会持续缓慢增长。

现在的表(部门ID,日期,当前流水号),每天部门内的第一个操作重置流水号,悲观锁递增流水号,性能有点瓶颈。

加载中
2
zzkk123
zzkk123

redis自增incr

1
张亦俊
张亦俊

绑定时间的业务,就是非常坑,性能肯定不好搞

1
-Jacen-
-Jacen-

redis,用部门ID+日期作为key,然后用incr,设置超时时间。

0
szjay
szjay

snowflake 算法

IdleMan
IdleMan
只能是1、2、3、4、5...自然序列哦,老铁
0
isscy
isscy

如果部门少的话还好说, 就维护一个单号池,按需pop,耗尽就去db取,但部门多起来性能也就差了

0
mickelfeng
mickelfeng

1、用redis每天每个部门生成一个号池,号码根据需求生成,生成1万,10万,百万不等。号码是连续的。获取就用pop

2、楼上也有使用 redis,用部门ID+日期作为key,然后用incr,设置超时时间。

0
绿皮火车
绿皮火车

真是服了,你公司有多少人,10万人,20万人撑死了吧,一天产生20万笔足够了吧,还考虑锁,真是可笑,我之前在城商行,人家银行6000多万的客户,都是简简单单存储过程,根据分行+部门+业务代码+人员+日期流水号,生成的,一点问题都没有,现在懂不懂锁,锁个几把,完全没有必须要,懂不懂考虑性能,都是瞎几把搞

不知道你想干嘛
不知道你想干嘛
:yum: 有道理,哈哈。 搞个复合主键 , 每次获取(部门ID,日期) + 最大的 流水号 ,然后 最大的 流水号+1 .
0
Joyzhou
Joyzhou

我也没看懂,复杂度不是O(n)么,就有性能问题了?

返回顶部
顶部