数据库主键选择的一些方案比较

数据库中每一条记录都需要有一个唯一的标识,一般来说有两种选择方式:

  • 使用业务字段做主键
    很多情况下很难找到一个业务字段是唯一标识
    业务字段长度有可能改变

  • 使用自动生成的唯一ID作为主键

    • 唯一性,生成就不会变更,可以随意引用
    • 单库单表场景下:
      • 自增字段作为ID
    • 分库分表场景下:
      • UUID
        1.一般用来生成Request ID来标记单次请求
        2.生成的ID最好具有单调递增性,也就是有序,而UUID不具备这个特点,ID有可能成为排序字段
        3.ID有序也会提升数据的写入性能(B+树存储索引,顺序写入不需要寻道)
        4.不具备业务含义,UUID无意义
        5.32个16进制数字组成,比较耗费空间
      • 搭建发号服务来生成ID
        Snowflake 算法,简单易实现,全局唯一、单调递增,还包含一定的业务意义
        • 嵌入到业务中,分布在业务服务器中
        • 部署独立的发号器服务
posted @ 2019-10-11 11:02  james_cai  阅读(637)  评论(0)    收藏  举报