bitsCN.com
引:最近业务开发过程中需要涉及到全局唯一ID生成。之前零零总总的收集过一些相关资料,特此整理以便后用
唯一ID生成的主要目的是:为一个分布式系统的数据object产生一个唯一的标识。一般对于唯一ID生成的要求主要这么几点:
- 毫秒级的快速响应
- 可用性强
- prefix有连续性方便DB顺序存储
- 体积小,8字节为佳
目前看到过的唯一ID生成方法主要有以下几种:
- UUID 16字节
- Twitter的Snowflake 8字节
- Flikr的数据库自增 4/8字节
- Instagram的存储过程 8字节
四种方案各有优劣,下面简要描述以下:
UUID:优:java自带,好用。劣:占用空间大
Snowflake: timestamp + work number + seq number优:可用性强,速度快劣:需要引入zookeeper 和独立的snowflake专用服务器
Flikr:基于int/bigint的自增优:开发成本低劣:如果需要高性能,需要专门一套MySQL集群只用于生成自增ID。可用性也不强
Instagram:41b ts + 13b shard id + 10b increment seq优: 开发成本低劣: 基于postgreSQL的存储过程,较为偏门bitsCN.com
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn