Java分布式ID-UUID

首先必须明确的结论,UUID不适合作为分布式ID。

1、Java代码实现方式

public class Test {
    public static void main(String[] args){
        System.out.println(UUID.randomUUID());
    }
}

结果:2f0d4999-5b0c-41c6-9ad8-d30a8bda79b6 (总共36位,减去4个-,剩余32位置)

2、UUID基本组成(具体组成自己看,自己品,问我我也不清楚)

UUID 是 通用唯一识别码,其中组成可以分为三部分:

2.1当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。

2.2时钟序列

2.3全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

3、作为分布式ID优缺点

优点:简单,代码方便;性能好,全球唯一

缺点:没有排序,无法保证递增;使用字符存储,查询效率低;占用空间大,传输效率低;

4、是否适合作为分布式id?

可以肯定的和你说,不适合。互联网公司基本都是使用mysql数据库,原因如下:

4.1. 首先分布式id一般都会是主键,但是安装mysql官方推荐越短越好,UUID每一个都很长,所以不推荐。

4.2. 既然分布式id是主键,然后主键是包含索引的,然后mysql的索引是B+树实现,每次插入UUID都得进行索引的优化,对B+树非常不友好。(具体去看看mysql索引使用的算法B+树)

4.3. 信息不安全。MCA地址可能会造成内存泄露。因为算法中包含了MAC地址。

5、适合的场景

综合上述:全球唯一、无序性(主要的问题)、占用空间大。

比如:充值会员的激活码、银行账户号、游戏的点卡等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值