10 | 发号器:如何保证分库分表后ID的全局唯一性?

 

 

 建议你搭建发号器服务来生成全局唯一的 ID。

怎么不用UUID?

因为在系统设计时,ID 有可能成为排序的字段。

ID 有序也会提升数据的写入性能。

不能作为 ID 的另一个原因是它不具备业务含义

最后,UUID 是由 32 个 16 进制数字组成的字符串,如果作为数据库主键使用比较耗费空间。

 

 Snowflake 算法设计的非常简单且巧妙,性能上也足够高效,同时也能够生成具有全局唯一性、单调递增性和有业务含义的 ID,但是它也有一些缺点,其中最大的缺点就是它依赖于系统的时间戳,一旦系统时间不准,就有可能生成重复的 ID。所以如果我们发现系统时钟不准,就可以让发号器暂时拒绝发号,直到时钟准确为止。

 

主要的问题是,如果超出了4096个,你要怎么处理?如果时钟错乱,你要怎么处理? 

 

posted @ 2020-02-09 20:12  lakeslove  阅读(485)  评论(0编辑  收藏  举报