一般全局ID作为数据库的主键使用,主要有3种实现方式。
1,UUID:唯一但是不连续,作为字符串索引效率低,也不保证随机。
2,自增序列:绝对递增,长度可控,作为索引时效率高。
3,snowflake:按时间趋势递增,单独使用时效率较高。
目前我们项目主要使用第二种方式,部分使用UUID。
项目架构为dubbo+zk,使用专门流水服务器来生产ID,序号存储在数据库的流水表中。
可以自定义流水的生成规则:步长,起始值,最大值,缓存个数。
流水服务器以接口的方式对外提供服务,并将数据库的ID缓存起来,减少数据库的压力。
请求方可以按自己的需求来获取ID,比如,一次获取多少个?
同时在客户端也可以作二级缓存,以支持更大的并发。
为了防止临界值时,请求时间过长,增加预警机制,低于阈值时,提前补充。