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

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

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

大家用哪个?

阅读 4.8k
4 个回答

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

发号器

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题