Heim >Backend-Entwicklung >PHP-Tutorial >高并发网站的自增主键如何防止出现重复情况?

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

WBOY
WBOYOriginal
2016-07-06 13:52:591842Durchsuche

比如说新浪微博的微博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也可以的。好了现在的问题是,如何起一个分布式的发号器了。。。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn