Skip to content

thinwind/numerical-id-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

numerical-id-generator

数值型id生成器

原理介绍


基于Snowflake的ID生成器 ID长度64位,结构如下:

+--------+-----------------+---------------+-------------+------------+
|  1bit  |      41bit      |     5bit      |   7bit      |   10bit    |
+--------+-----------------+---------------+-------------+------------+
|  sign  | delta timestamp |  data center  | machine id  |  sequence  |
+--------+-----------------+---------------+-------------+------------+

各段含义如下:

----------------------------------------------------------------------------
|      sign      |  1位  |  符号位  |  取值为0,保证id值不为负                  |
----------------------------------------------------------------------------
|    timestamp   |  41位 |  时间戳  |  当前时间与开始时间的时间戳差              |
----------------------------------------------------------------------------
|   data center  |  5位  | 数据中心 |  0~31,最多32个数据中心                   |
----------------------------------------------------------------------------
|    machine id  |  7位  | 机器标识 |  0~127,每个数据中心最多可以部署128台机器   |
----------------------------------------------------------------------------
|    sequence    |  10位 | 序列计数 |  每个机器同一毫秒内最多可以产生1024个id号   |
----------------------------------------------------------------------------

性能测试


理论上,每台机器1秒最多产生10241000(100w)个id

实测结果如下:

  • 机器: 15款 MBP
  • CPU: 2.9 GHz 双核Intel Core i5
  • 内存: 8 GB 1867 MHz DDR3
  • 线程数: 100
  • MAX: 99.8w
  • MIN: 72.9w
  • AVG: 91.4w