如何生成全局唯一ID
版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 前言 在分布式环境中,生成全局唯一ID是非常需求。本文将介绍几种常见生成方法,并对它们的优缺点做出点评。 0. 8个字节 语言或数据库 内建类型 Golang uint64 Java long Python int MySQL bigint unsigned 2 ^ 32(4个字节)最多只有40多亿,对于高并发的系统,肯定不是够的。 以新浪微博为例,每天的新增的微博量都过亿,所以考虑到ID的容量,这个ID的长度至少是8个字节 1. UUID 长度: 为16 bytes, 128 bits 44e91a8a58d111e8ae84784f43a6cab8 见参考资料1: 5种版本 时间的版本 DCE Security MD5哈希 (伪)随机数 SHA-1哈希 以Version 1为例子 time_inc + clk_seq + node points time_inc时间精度为100 ns 即使在100ns以内,2次生成的time_inc也不会重复,因为会自动加1 clk_seq 为2个bytes一般是随机数(2 ^ 16 为65536) 协议文档中写明,此字段可以用来防止时钟回拨,但是在高并发情况下,也很难保证不出现冲突。 node取mac地址 下面是python的uuid库生成的一组ID a7748921-58d9-11e8-a727-784f43a6cab8 a70b016e-58d9-11e8-8a8c-784f43a6cab8 a6991957-58d9-11e8-8874-784f43a6cab8 a5b143ba-58d9-11e8-9600-784f43a6cab8 2. snowflake 长度: 8 bytes ...