赞
踩
思路: 基于数据库主键ID自增的特性生成订单号,不推荐此方案的原因有如下几点:
思路: JDK自带UUID工具类,生成UUID足够快速、方便,业界不使用UUID作为分布式唯一ID,或者订单号的原因在于:
分布式唯一ID生成器,主要有类snowflake方案和分库分表形式的数据库自增ID方案。目前分布式唯一ID方案已经很成熟,能做到高性能、高可用、递增等。在订单场景下,主要问题在于不利于分库分表,如下图。将分布式唯一ID作为订单号不利于分库分表原因如下:
思路: 牺牲通用性,根据订单场景将影响分库分表的业务因子融入到订单号中,比如用户id,根据订单号分库分表路由时,通过位移对业务因子取模路由即可,实现订单号和业务因子路由的一致性,如下图所示(需要哪些因子,占用几位看实际情况)。这样做的好处是:
以用户的订单库为例进行说明,订单号由三部分组成:时间戳+分库分表因子+随机数。用户因子为用户ID哈希后的某10位,这样无论是按照订单ID还是用户ID查询,最终都会用户因子分库分表,从而路由的分表也会一致,如下所示:
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。