全局唯一ID生成规则,UUID、雪花算法、美团leaf算法
一、业务背景
当单表数据量急剧上升后,表的查询性能会逐渐下降,会涉及到分库分表操作,如何确保数据均匀分布,可以通过全局唯一的ID。
全局唯一的ID生成规则要求:
- 全局唯一性
- 有序递增
- 高可用
- 时间上的特性(例如互联网订单,从订单号可以看出具体时间的信息)
二、UUID算法:
UUID含义是通用唯一识别码 (Universally Unique Identifier),格式:32个16进制字符,4个横线 (8-4-4-4-12);
例如:d13a0096-abca-11ea-8997-acbc32785ec1
组合部分:
1、当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同;
2、时钟序列;
3、全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
缺点:
UUID算法生成的ID虽然是唯一的,但是不是有序的,显然不适合作为数据库主键的生成策略,可以使用UUID作为令牌桶(限流算法)的生成规则。
三、雪花算法:
从辩证法来考虑,世界上不存在一模一样的两片雪花,问题时间回拨,还是会生成两个相同的ID,
四、美团的Leaf,两种实现:
1、基于数据库层面的Leaf-segment
每个Leaf中预存一定的UUID,减少与数据库的交互,但是增加节点,扩容会存在问题。
2、Leak -Snowflake 解决时间回拨问题;