summary:
- 解决的场景是:
当订单系统并发量足够大的时候, 基于 订单号(order_sn)是先生成后写入库 的事实, 需要能够满足系统生成的订单不会重复. 当出现重复订单号的时候, 需要如何处理. - 该文章抛砖引玉, 提到的思路可以借鉴.归纳几个点:
- 讨论的一个限制条件是订单号长度为16byte, 订单号大致能够反应出订单的生成时间(即: 可以看出年月日时分秒)
- 订单生成时间 + 随机数 # 思路: (随机数)来降低 同一瞬间(订单生成时间) 生成的订单 的重复率
- 压缩订单生成时间 扩展随机数 # 思路: 压缩订单生成时间所占用的位数, 扩展随机数的位数
- 倒转高位低位 # 扩展思路: 高位为随机数, 低位为时间. 高位可以表示的范围较大
- 10进制 混和 16进制 # 扩展思路: 进制基数越大占用位数越小, 留给的随机数位数则越大
- 耗时 # 限制条件: 最求最佳的性价比, 消耗最小的计算机资源来完成
- test: 10 + 26 + 26 = 62, 62^15 - 62^11 ~ 678909652912205984715540480[共27位, 4位随机数, 62进制], 62^15 - 62^7 ~ 768909704948763146938028160[共27位, 8位随机数, 62进制]
技术点
伪随机数生成器:
MersenneTwister算法
Mersenne Twister算法译为马特赛特旋转演算法,是伪随机数发生器之一,其主要作用是生成伪随机数。此算法是Makoto Matsumoto (松本)和Takuji Nishimura (西村)于1997年开发的,基于有限二进制字段上的矩阵线性再生。可以快速产生高质量的伪随机数,修正了古老随机数产生算法的很多缺陷。
|
|