分布式ID生成器的剖析与设计
ID是身份标识,你所涉及的每类业务都会有一个,身份证, 手机号, QQ号。那么问题来了,如何设计一个算法,能快速生成ID又能有效地避免冲突。
往小了说,在存储领域每一行数据都会有一个ID,关系型数据库有 auto increment, 非关系型数据库,如mongodb有自己的objectID 算法。
对于各种ID我们可以简化为2类:
1.去中心化,统一长度,规则占坑类, mongodb属于这一类, guid 属于这类类。
2.中心化,ID自增,auto increment属于这一类。
mongodb id
mongodb的ID规则
| 长度(byte) | 含义 |
|---|---|
| 4 | unix epoch到当前的秒数 |
| 3 | 机器标识 |
| 2 | 进程标识 |
| 3 | 扩展计数 |
机器标识可以防止不同机器出现相同ID, 进程标识则可以在同一台机器上防止出现冲突。
对于这种设计, 我想说 good! 无论是单机还是