>  기사  >  백엔드 개발  >  高并发网站的自增主键如何防止出现重复情况?

高并发网站的自增主键如何防止出现重复情况?

WBOY
WBOY원래의
2016-07-06 13:52:591776검색

比如说新浪微博的微博id,注册用户的用户uid,百度贴吧的帖子号tid等等我观察过都是按照发布时间呈现递增关系,但是我很好奇这种高并发网站一般都是分布式数据库,数据库之前肯定还有缓存,消息队列等中间件,那么如何保证最终插入多个数据库时他们之间主键自增的情况下不出现重复?

而且现在也有很多碰撞概率较低的随机id生成算法为什么没有被这些高并发网站所采用?是否是效率原因?

回复内容:

比如说新浪微博的微博id,注册用户的用户uid,百度贴吧的帖子号tid等等我观察过都是按照发布时间呈现递增关系,但是我很好奇这种高并发网站一般都是分布式数据库,数据库之前肯定还有缓存,消息队列等中间件,那么如何保证最终插入多个数据库时他们之间主键自增的情况下不出现重复?

而且现在也有很多碰撞概率较低的随机id生成算法为什么没有被这些高并发网站所采用?是否是效率原因?

给你推荐一个科普ID生成器或者叫全局发号器的知识文章
http://weibo.com/p/1001603800404851831206

然后再推荐一个用PHP实现的Twitter内部命名为SnowFlake的ID生成器
https://github.com/sschiau/Particle.php

我准备开始胡说了。。。。

系统是从无到有,由小到大的居多。

一开始钱少事多时间紧,自然什么事官方支持,什么是简单好维护的就用什么。后期转换成本高,风险大,收益又低的话,谁会去整这些有的没的。

其次,高并发,大多数都不会是并发写。

最后,就算遇到你说的情况,那么起个发号器,发自增id也可以的。好了现在的问题是,如何起一个分布式的发号器了。。。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.