我们在用springboot进行后端开发时,有时会使用雪花算法生成的ID值来替换数据库的自增值,当把该ID值传给前端时就会出现精度丢失的问题,因为雪花算法一般会生成18位或者19位宽度的数字,而前段只能使用16位宽度的数字。
在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id,而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?
但是一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,当我们使用mysql的自增长主键时,充分感受到了它的好处:整个系统ID唯一,ID是数字类型,而且是趋势递增的,ID简短,查询效率快,在分布式系统中显然由于单点问题无法使用mysql自增长了,此时需要别的解决方案来支撑分布式业务。
如果要实现分布式多机同时提供服务,那么就要废弃 Redis 和 Channel 预存预取机制,接着放弃 Channel 而改用即时生成,这样便可以同时使用多个 Server,但性能的瓶颈就转移到了 KV 存储,性能等同于单机 Redis 的性能。