From 30ae5085e8121fab8d99e18201c736f1ade72111 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Fri, 18 Jan 2019 10:51:38 +0800 Subject: [PATCH] docs: update database-shard-global-id-generate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新分库分表后如何生成唯一ID --- .../database-shard-global-id-generate.md | 17 ++++++++++++++--- .../images/database-id-sequence-step.png | Bin 0 -> 28989 bytes images/database-id-sequence-step.png | Bin 0 -> 28989 bytes 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 docs/high-concurrency/images/database-id-sequence-step.png create mode 100644 images/database-id-sequence-step.png diff --git a/docs/high-concurrency/database-shard-global-id-generate.md b/docs/high-concurrency/database-shard-global-id-generate.md index d61ce49..ea25594 100644 --- a/docs/high-concurrency/database-shard-global-id-generate.md +++ b/docs/high-concurrency/database-shard-global-id-generate.md @@ -5,15 +5,25 @@ 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个**全局唯一**的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 ## 面试题剖析 -### 数据库自增 id +### 基于数据库的实现方案 +#### 数据库自增 id 这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。 这个方案的好处就是方便简单,谁都会用;**缺点就是单库生成**自增 id,要是高并发的话,就会有瓶颈的;如果你硬是要改进一下,那么就专门开一个服务出来,这个服务每次就拿到当前 id 最大值,然后自己递增几个 id,一次性返回一批 id,然后再把当前最大 id 值修改成递增几个 id 之后的一个值;但是**无论如何都是基于单个数据库**。 **适合的场景**:你分库分表就俩原因,要不就是单库并发太高,要不就是单库数据量太大;除非是你**并发不高,但是数据量太大**导致的分库分表扩容,你可以用这个方案,因为可能每秒最高并发最多就几百,那么就走单独的一个库和表生成自增主键即可。 +#### 设置数据库 sequence 或者表自增字段步长 +可以通过设置数据库 sequence 或者表的自增字段步长来进行水平伸缩。 + +比如说,现在有 8 个服务节点,每个服务节点使用一个 sequence 功能来产生 ID,每个 sequence 的起始 ID 不同,并且依次递增,步长都是 8。 + +![database-id-sequence-step](/images/database-id-sequence-step.png) + +**适合的场景**:在用户防止产生的 ID 重复时,这种方案实现起来比较简单,也能达到性能目标。但是服务节点固定,步长也固定,将来如果还要增加服务节点,就不好搞了。 + ### UUID -好处就是本地生成,不要基于数据库来了;不好之处就是,UUID 太长了,**作为主键性能太差**了,另外 UUID 不具有有序性,会造成 B+ 树索引在写的时候有过多的随机写操作,频繁修改树结构,从而导致性能下降。 +好处就是本地生成,不要基于数据库来了;不好之处就是,UUID 太长了、占用空间大,**作为主键性能太差**了;更重要的是,UUID 不具有有序性,会导致 B+ 树索引在写的时候有过多的随机写操作(连续的 ID 可以产生部分顺序写),还有,由于在写的时候不能产生有顺序的 append 操作,而需要进行 insert 操作,将会读取整个 B+ 树节点到内存,在插入这条记录后会将整个节点写回磁盘,这种操作在记录占用空间比较大的情况下,性能下降明显。 适合的场景:如果你是要随机生成个什么文件名、编号之类的,你可以用 UUID,但是作为主键是不能用 UUID 的。 @@ -27,7 +37,8 @@ UUID.randomUUID().toString().replace(“-”, “”) -> sfsdf23423rr234sfdaf 适合的场景:一般如果用这个方案,是将当前时间跟很多其他的业务字段拼接起来,作为一个 id,如果业务上你觉得可以接受,那么也是可以的。你可以将别的业务字段值跟当前时间拼接起来,组成一个全局唯一的编号。 ### snowflake 算法 -snowflake 算法是 twitter 开源的分布式 id 生成算法,就是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。 +snowflake 算法是 twitter 开源的分布式 id 生成算法,采用 Scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。 + - 1 bit:不用,为啥呢?因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。 - 41 bit:表示的是时间戳,单位是毫秒。41 bit 可以表示的数字多达 `2^41 - 1`,也就是可以标识 `2^41 - 1` 个毫秒值,换算成年就是表示69年的时间。 - 10 bit:记录工作机器 id,代表的是这个服务最多可以部署在 2^10台机器上哪,也就是1024台机器。但是 10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意思就是最多代表 `2^5`个机房(32个机房),每个机房里可以代表 `2^5` 个机器(32台机器)。 diff --git a/docs/high-concurrency/images/database-id-sequence-step.png b/docs/high-concurrency/images/database-id-sequence-step.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b3dc662e4bf73f5d1bd1b27f191ad0e62ae82 GIT binary patch literal 28989 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 w?7(BHbF{hU+=oc5Snji|(36|+E3Du{lK=n! literal 0 HcmV?d00001 diff --git a/images/database-id-sequence-step.png b/images/database-id-sequence-step.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b3dc662e4bf73f5d1bd1b27f191ad0e62ae82 GIT binary patch literal 28989 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 w?7(BHbF{hU+=oc5Snji|(36|+E3Du{lK=n! literal 0 HcmV?d00001