阿古达芝麻开门 - 博客园

全局唯一ID生成方案

其实,这个全局唯一ID的问题,我并没有觉得很特别,甚至我觉得,如果生成全局唯一ID的时候,能把用户ID+时间戳也基本可以满足大部分业务的“全局唯一”的需求了。确实,生成全局ID的方法有很多,适应不同的场景、需求以及性能要求,所以即便是同一个系统,你也根据不同的业务场景设计不同的ID生成策略。

 

UUID

一种本地生成ID的方法,缺点是无法保证趋势递增,uuid过长,往往用字符串表示,作为主键建立索引查询效率低

 

使用数据库的 auto_increment 来生成

使用现有数据库生成,但是往往数据库很容易成为性能瓶颈,另外数据库要做HA,保证生成ID高可用

 

SnowFlake 算法

SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图

 

 SnowFlake可以保证:所有生成的id按时间趋势递增,整个分布式系统内不会产生重复id。但是因为机器的原因会发生时间回拨,我们的雪花算法是强依赖我们的时间的,如果时间发生回拨,有可能会生成重复的ID。SnowFlake示例代码如下:

 

 

 

 

关注公众号“一米源码”发送消息“Snow”获取示例源码

posted @   阿古达芝麻开门  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示