全域性唯一ID(GUID)生成方案對比
本文彙總了各大公司的全域性唯一ID生成方案,並做了一個簡單的優劣比較
背景:在實現大型分散式程式時,通常會有全域性唯一ID(也成GUID)生成的需求,用來對每一個物件標識一個代號。本文就列舉了博主收集的各種全域性唯一ID生成的方案,做一個簡單的類比和備忘。
GUID的基本需求
一般對於唯一ID生成的要求主要這麼幾點:
- 毫秒級的快速響應
- 可用性強
- prefix有連續性方便DB順序儲存
- 體積小,8位元組為佳
業界成熟方案列舉
目前看到過的唯一ID生成方法主要有以下幾種:
- UUID 16位元組
- Twitter的Snowflake 8位元組
- Flikr的資料庫自增 4/8位元組
- Instagram的儲存過程 8位元組
- 基於MySQL UUID的變種 16位元組
各個方案優劣的對比
四種方案各有優劣,下面簡要描述以下:
- 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的儲存過程,通用性差
- UUID變種:timestamp + machine number + random (具體見:變種介紹)
- 優: 開發成本低
- 劣: 基於MySQL的儲存過程,效能較差
相關文章
- 分散式全域性ID生成方案彙總和對比分散式
- Snowflake 全域性唯一Id 生成
- 探索 PHP 如何生成全域性唯一的 idPHP
- 分散式全域性ID生成方案分散式
- 分散式全域性唯一ID分散式
- Spring Boot 工程整合全域性唯一ID生成器 VestaSpring Boot
- Java使用雪花演算法實現生成全域性唯一idJava演算法
- 框架篇:分散式全域性唯一ID框架分散式
- oracle,使用SYS_GUID()生成32位唯一字串OracleGUI字串
- 使用Flex生成GUIDFlexGUI
- 生成按時間增長的全域性唯一主鍵
- 【高併發】之分散式全域性唯一 ID分散式
- AppID 的英文全稱是 Application Identifier AppID(應用程式識別符號)GUID(全域性唯一識別符號)APPIDE符號GUI
- 分散式唯一ID的幾種生成方案分散式
- [OARCLE]在Oracle中生成GUID型別--SYS_GUID()函式OracleGUI型別函式
- 全域性唯一ID生成常見的幾種方式和twitter/snowflake(雪花演算法)解析演算法
- js生成GUID程式碼例項JSGUI
- 忘掉 Snowflake,感受一下效能高出 587 倍的全域性唯一 ID 生成演算法演算法
- 面試基礎之:叢集高併發情況下如何保證分散式唯一全域性Id生成面試分散式
- Facade對應物件 全域性唯一還是時刻變化物件
- 生成分散式唯一ID的幾種解決方案分散式
- php中生成標準uuid(guid)的方法PHPGUI
- 一個比 UUID 快百倍的唯一 ID 生成器UI
- 為 fastapi 新增全域性唯一請求id,用於日誌跟蹤ASTAPI
- JavaScript生成GUID統一識別符號JavaScriptGUI符號
- 生成GUID的一個很不錯的方法GUI
- 全域性負載均衡方案負載
- 分散式唯一id生成策略分散式
- 分散式系統全域性唯一Id(SnowFlake)雪花演算法實現分散式演算法
- SAP UI5 確保控制元件 id 全域性唯一的實現方法UI控制元件
- 分散式唯一 ID 生成器分散式
- 微服務之唯一ID生成策略微服務
- 分散式唯一ID生成服務分散式
- 分散式唯一 ID 生成器 - IDGen分散式
- C# 利用 System.Guid.NewGuid() 生成卡密CDKC#GUI
- GUID獲取16位19位22位的唯一字串GUI字串
- Python 根據id生成唯一碼Python
- CoffeeScript攻略3.10:生成唯一ID