数据库中数据的id生成和算法

id生成策略

自增主键

一般使用整数类型的id可使用自增主键的策略去生成id

优点:

  • 简单、易于使用和理解。
  • 保证唯一性,无需额外的查询操作。
  • 提高查询性能,因为ID是有序的,且支持索引。

缺点:

  • 不适用于分布式系统,因为每个节点都需要维护一个独立的计数器,可能会导致冲突和性能问题。
  • 暴露了表中的数据增长模式,可能导致信息泄漏和数据分析的问题。

使用方法:可使用Mybatis-Plus

UUID(Universally Unique Identifier)

优点:

  • 全局唯一性,可以在不同的数据库服务器上生成,确保全局唯一性。
  • 分布式支持,独立性。

缺点:

  • 占用较多的存储空间,因为UUID是一个128位的数字,通常以32位的十六进制数表示。
  • 无序性,可读性较低。

适用场景:适用于需要分布式支持、全局唯一性和独立生成ID的场景,特别是在没有数据库连接的情况下。

使用方法:可使用Hutool工具中的IdUtil生成

组合ID

原理:根据多个字段的组合来生成唯一的ID。通常使用字段的值进行哈希运算,以生成一个唯一的标识符。

优点:可以根据业务逻辑自定义ID生成规则。

缺点:需要确保组合字段的唯一性,否则可能导致ID冲突。

适用场景:适用于需要根据多个字段组合来生成唯一ID的场景。

雪花算法(Snowflake)

原理:生成一个64位的long型数字作为全局唯一ID。它包含时间戳、工作机器ID、数据中心ID和序列号等部分。

优点:

  • 支持分布式环境,生成的ID有序且唯一。
  • 包含时间戳信息,可以用于排序。

缺点:

  • 依赖于机器的唯一标识,不同机器之间的时间同步问题可能导致ID重复。
  • 需要确保工作机器ID和数据中心ID的唯一性。

适用场景:适用于需要分布式支持、有序和唯一ID的大规模系统,如微服务架构、分布式数据库等。

获取id的问题

如果使用mybatis-plus框架时,当使用@TableId指定某个id的生成策略后,在将该数据插入数据库后,该id会自动保存在刚操作过的实体类中,可直接读取

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值