全局唯一ID(GUID)生成方案对比

简介:

全局唯一ID(GUID)生成方案对比

本文汇总了各大公司的全局唯一ID生成方案,并做了一个简单的优劣比较

背景:在实现大型分布式程序时,通常会有全局唯一ID(也成GUID)生成的需求,用来对每一个对象标识一个代号。本文就列举了博主收集的各种全局唯一ID生成的方案,做一个简单的类比和备忘。

GUID的基本需求

一般对于唯一ID生成的要求主要这么几点:

  • 毫秒级的快速响应
  • 可用性强
  • prefix有连续性方便DB顺序存储
  • 体积小,8字节为佳

业界成熟方案列举

目前看到过的唯一ID生成方法主要有以下几种:

各个方案优劣的对比

四种方案各有优劣,下面简要描述以下:

  • 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的存储过程,性能较差
原文发布时间:2015-04-12
本文来自云栖合作伙伴“linux中国”
目录
打赏
0
0
0
0
26198
分享
相关文章
|
11月前
uView guid 全局唯一标识符
uView guid 全局唯一标识符
88 0
|
11月前
|
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
1199 0
ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)
一、需求: 我们在开发中经常遇到一种数据库表的设计:一个表中包含父子信息数据,也就是常说的树形数据. —> 最常见的例子就是省市区一体表,就是通过id、pid、level来进行控制,从而一张表来存储数据.我们进行拿数据的时候,不用再连表拿取,直接通过(start with connect by prior)直接便利就会得到数据.
826 2
ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
场景应用:id全局唯一且自增,如何实现?
场景应用:id全局唯一且自增,如何实现?
259 0
全局唯一ID(自增ID、UUID、雪花算法)
一、介绍 系统唯一id是我们在设计阶段常常遇到的问题。在复杂的分布式系统中,几乎都需要对大量的数据和消息进行唯一标识。在设计初期,我们需要考虑日后数据量的级别,如果可能会对数据进行分库分表,那么就需要有一个全局唯一id来标识一条数据或记录。生成唯一id的策略有多种,但是每种策略都有它的适用场景、优点以及局限性。