摘要
数据库分库分表同时因为服务是多节点部署的,所以就会引申出分布式系统中唯一主键ID的生成问题。一般我们唯一ID的有以下特性:
- 整个系统ID唯一
- ID是数字类型,而且是趋势递增的
- ID简短,查询效率快
下面我们看下常见的几种ID生成方式
UUID/GUID
使用guid或者uuid作为主键id
优点
- 代码实现简单。
- 本机生成,没有性能问题
- 因为是全球唯一的ID,所以迁移数据容易
缺点
- 每次生成的ID是无序的,无法保证趋势递增
- UUID的字符串存储,查询效率慢
- 存储空间大
- ID无业务含义,不可读
MySQL主键自增
这个方案就是利用了MySQL的主键自增auto_increment,默认每次ID加1。对于我们分表的业务场景中通过卫不同的表设置不同的步长以及初始值实现。
优点
- 数字化,id递增
- 查询效率高
- 具有一定的业务可读
缺点
- 存在单点问题ÿ