大家用什么全局唯一ID,是专门搞个自增ID还是弄GUID?

发布于 2022-09-05 15:27:44 字数 112 浏览 21 评论 0

最近在搞分表,只好弄全局唯一ID,是专门搞个自增ID还是弄GUID?

自增ID是数字,自增系统 出现问题 就蛋疼了, GUID字符串生成的每次都不一样,但是很长。

大家用哪个?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

请你别敷衍 2022-09-12 15:27:45

可以用 Twitter 的 snowflake

这里有个解释 twitter-snowflake,64位自增id算法详解

不同的语言也都有实现,可以自行搜索一下。

枯叶蝶 2022-09-12 15:27:45

其实你就是希望拿到一个唯一值,然后根据这个唯一进行规则判断,然后写入到一个表中去。你看一下你需要插入的记录,存不存在唯一值,这个唯一值是否需要对应业务。只是需要一个唯一值,简单写法就是根据时间戳加随机数,然后取余数,写入表中

一笔一画续写前缘 2022-09-12 15:27:45

发号器

如果想要全局唯一递增ID,通过ZooKeeper的PERSISTENT_SEQUENTIAL类型节点获取递增。通过取模分表
不能插入之前查重。既然分表就意味着高并发。查的时候没重复,不意味着插的时候不重复。然后ZooKeeper嘛,分布式应用你不用ZooKeeper,逗我玩?

如果是UUID,则发号器干几件事情:
1、预生成一堆UUID,丢到队列里。
2、需要用号,从队列取一个号,并添加到布隆过滤器里。
3、守护线程发现队列里预备号太少,则再生成一堆新的预备号,通过布隆过滤器校验后,丢到队列里。
解决了UUID生成慢和可能撞车的问题。
通过UUID后X位分表。X根据业务规模定,规模越大X越大,表分得越细。

也可以根据其他业务规则分表,例如用户的订单表,则可以根据用户的ID分表。这样同一个用户的订单会存在同一张表里,避免查的时候跨表。

沙沙粒小 2022-09-12 15:27:45

java 里面写APP的接口,需要用UUID确认一个唯一的用户,使用的是UUID.randomUUID().toString()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文