大家用什么全局唯一ID,是专门搞个自增ID还是弄GUID?
最近在搞分表,只好弄全局唯一ID,是专门搞个自增ID还是弄GUID?
自增ID是数字,自增系统 出现问题 就蛋疼了, GUID字符串生成的每次都不一样,但是很长。
大家用哪个?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
最近在搞分表,只好弄全局唯一ID,是专门搞个自增ID还是弄GUID?
自增ID是数字,自增系统 出现问题 就蛋疼了, GUID字符串生成的每次都不一样,但是很长。
大家用哪个?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
可以用 Twitter 的
snowflake
这里有个解释
twitter-snowflake,64位自增id算法详解
不同的语言也都有实现,可以自行搜索一下。
其实你就是希望拿到一个唯一值,然后根据这个唯一进行规则判断,然后写入到一个表中去。你看一下你需要插入的记录,存不存在唯一值,这个唯一值是否需要对应业务。只是需要一个唯一值,简单写法就是根据时间戳加随机数,然后取余数,写入表中
发号器
如果想要全局唯一递增ID,通过ZooKeeper的PERSISTENT_SEQUENTIAL类型节点获取递增。通过取模分表
不能插入之前查重。既然分表就意味着高并发。查的时候没重复,不意味着插的时候不重复。然后ZooKeeper嘛,分布式应用你不用ZooKeeper,逗我玩?
如果是UUID,则发号器干几件事情:
1、预生成一堆UUID,丢到队列里。
2、需要用号,从队列取一个号,并添加到布隆过滤器里。
3、守护线程发现队列里预备号太少,则再生成一堆新的预备号,通过布隆过滤器校验后,丢到队列里。
解决了UUID生成慢和可能撞车的问题。
通过UUID后X位分表。X根据业务规模定,规模越大X越大,表分得越细。
也可以根据其他业务规则分表,例如用户的订单表,则可以根据用户的ID分表。这样同一个用户的订单会存在同一张表里,避免查的时候跨表。
java 里面写APP的接口,需要用UUID确认一个唯一的用户,使用的是
UUID.randomUUID().toString()