# 数据库:分布式主键 id 的 7 种生成策略

作者:Tom哥
公众号:微观技术
博客:https://offercome.cn (opens new window)
人生理念:知道的越多,不知道的越多,努力去学

当面对海量数据存储时,我们常用的技术方案就是分库分表,这里面有个关键问题:「主键 id 要如何生成?」

之前我们玩单表时,直接借助 MySQL 存储引擎自动生成

现在分表后,如果每个表的id 还是从 1 开始自增生成,虽然数据分布在不同的库中,但id是相同的,这个对上层的业务来说肯定是无法接受的,我们需要一个全局唯一的id

就像软件架构讲究高内聚、低耦合,不同团队合作时,我们只关心系统对接层面的规范,至于系统内部如何实现,外部并不关心。 数据量太大一样,单表存储不了,要引入分表,至于分多少表,或者采用 NoSQL 介质存储,上层的业务调用方并不关心,他们关心的是通过 RPC 接口根据不同的查询条件可以获取到数据。 大家都是各司其职,做好自己分内的专业事情。

那分布式主键id 需要具备哪些特点:

  • 全局唯一性:这个是最基本的要求,不能出现重复 id
  • 高性能:响应速度一定要快,否则很容易成为业务瓶颈
  • 高可用:由于处于流程的关键节点,如果服务挂了,会阻塞整个流程,要主备部署,保证其高可用
  • 方便性:业务单一,接入系统不要太过复杂,最好能开箱即用,引入一个jar包,简单配置一下即可

讲了这么多,知道不能使用数据库自增主键id 了,还提了这么多实现要求,该怎么办,问题总是要解决的

上次更新: 2023/3/4