在分布式与高并发的情况下,生成订单号应满足以下几点:
-
全局唯一
-
订单号信息安全要求(不可推测性)
-
趋势递增要求
-
效率(生成、使用、索引)
-
控制并发(时间)
策略一:UUID和GUID(通用唯一识别码)
组成:当前日期+时间+时钟序列+机器识别码(Mac地址或其他),正常情况下十几年之内可以达到全球唯一性。
优点:简单
UUID.randomUUID()
缺点:
1. 用户不友好,无序,不可读
2. 索引关联效率较低,查询慢
3. 分布式集群情况下有几率重复
策略二:数据库自增ID
在数据库集群环境下,不同的数据库节点可以设置不同的起步值、相同的步长值来实现订单号唯一
tab_A 起步值1 步长值10
1
11
21
31
41
tab_B 起步值2 步长值10
2
12
22
32
42
优点:
1. 无需编码
2. 递增
缺点:
1. DB单点故障
2. 高并发下插入数据需