这是我参与「第五届青训营」笔记创作活动的第9天
UUID (通用唯一标识符)和雪花(Snowflake)算法该如何选择?
UUID是一种标准格式,它使用随机数和时间戳来生成128位长的唯一标识符。它通常用于分布式系统中,因为它可以在不同机器上生成唯一标识符,且不会出现重复。
雪花算法(Snowflake)是Twitter开发的另一种生成唯一标识符的方法。它使用时间戳、机器编号和随机数来生成64位的唯一标识符。它也适用于分布式系统中,因为它可以在不同机器上生成唯一标识符,且不会出现重复。
- 如果您需要更高的唯一性,可以使用 UUID。
- 如果您需要更短的标识符长度,可以使用 Snowflake 算法。
- 如果您需要在分布式系统中生成唯一标识符,两者都可以使用。
需要注意的是,雪花算法需要单独的机器标识,而UUID不需要。如果你的系统是在一个机器上的就选择UUID,在分布式环境下就使用雪花算法。
UUID不依赖于任何第三方系统,所以在性能和可用性上都比较好,但是如果用它来作为数据库主键,它会存在以下几点问题。
- 排序
- UUID生成的ID不具备单调递增性
- 有序ID会提升数据的写入性能
- 不具备业务含义
- Snowflake的核心思想是将64bit的二进制数字分成若干部分,每一部分都存储有特定含义的数据,比如说时间戳,机器ID,序列号等,最终生成全局唯一有序的ID
发送Ajax请求,请求后端接口创建订单并且返回订单号出现订单号精度丢失的情况
解决方式
- 前端:问题出在前端的Long长度,没有后端Long的长度长这样,前端获取到数据后会对数据进行转换,发现长度大于前端的Long最大长度就会精度丢失,那么我们应该直接让他返回字符串的数据不让他转换!
- 后端:我们更改后端实体类的值通过@JsonFormat值把Long类型的值转成String类型的值