本文目标是介绍市面上风行的UID生成形式、优劣状况,帮忙读者依据本人的产品类型和用户规模抉择适合的生成计划。
什么是UID?
UID是一个零碎内用户的惟一标识,
UID的个性: 唯一性、可公开播送、存在可能价值等。
唯一性
通过UID能够疾速映射到一个具体的惟一用户上,相似于hash、短网址映射。
可公开播送
UID能够和用户的账号造成对应关系。对于某些以手机号、邮箱这些隐衷内容为登录账号的零碎,如果想减少转账这种业务,输出对方的UID,能够做到隐衷爱护。
存在可能价值
相似QQ靓号、B站短ID、微博ID这种能够存在局部价值。
风行的生成形式
- 随机生成-一般查重模式
- 经典表ID自增模式
- 号池模式
- 随机生成-查重模式-加位法
- 类Snowflake模式
- UUID模式
随机生成-一般查重模式
应用rand函数随机成生后果,再去user表上查重,不反复就作为用户的UID,反复则持续rand到不反复为止。
长处: 生成速度快、逻辑简略、生成号段格局能够通过过滤器管制。
毛病: 当用户总数变高的时候,反复率会变高。
实用: 用户总量不会很高,对于靓号没有什么要求。
经典表ID自增
将user表的id设置为auto_increment,插入会主动生成ID,将表的主键ID作为UID.
长处: 不须要被动治理,主动生成,不会反复。
毛病: 容易裸露零碎的实在用户数,不适宜须要良好数据的商业公司。
实用: 一般的社区、博客内容等不关注UID模式的零碎。
号池模式
生成一批UID寄存到号池内, 注册一个取走一个。
长处: 对于靓号的管制精准、号池管制切当的话,不会产生反复。
毛病: 对于号池服务的稳定性很高, 对于号池内数据的减少和删除须要被动治理,否则会产生反复。
实用: 对靓号要求管制严格,实用于个别的等级荣誉感、靓号荣誉感较高的玩家社区。
随机生成-查重模式-加位法
加位查重法是一般查重法的降级,当碰到了反复号码的时候,向号码尾部减少一个随机数字,如果反复就持续减少,直到不反复为止。
长处: 绝对于一般查重法,反复后的再次获取次数能够缩小
毛病: 反复后再获取率随着用户数回升,也会遭逢瓶颈。
实用: 同一般查重模式。
类Snowflake模式
Snowflake是一个经典的号段生成算法,同时市面上存在大量的XXXflake算法.个别用作订单号。 次要讲一下Snowflake的原理
应用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号,最初还有一个符号位,永远是0
长处: 不须要被动治理就可保障防重性,能够依据业务配比调整bit。
毛病: 生成的数据后果比拟长,索引须要被动优化。
实用: 不存在UID靓号需要
UUID模式
UUID是一个国际标准算法,具体介绍就不赘述了,优缺点和类Snowflake统一
长处: 不须要被动治理就可保障防重性。
毛病: 生成的数据后果比拟长,索引须要被动优化。
实用: 不存在UID靓号需要
总结
个别对于预计百万用户以内的零碎,将UID设置为10位,应用随机成产-一般查重模式即可。查重基本上不会损耗过多性能,还能够依据过滤器过滤掉靓号,基本上能够解决大部分的业务需要。
对于预计超过百万的用户,最重要的是关注业务对于UID的依赖和靓号的需要,抉择适合的计划。