为什么YouTube,Imgur等大多数网站都将随机字符用作其内容ID,而不是像MySQL中由自动增量创建的序列号那样只是序列号?
解释一下我的意思:
在URL中:https://www.youtube.com/watch?v=QMlXuT7gd1I
最后的QMlXuT7gd1I指示该页面上的特定视频,但我假设该视频在数据库中也具有唯一的数字ID。为什么他们创建并使用此字母数字字符串而不是仅使用视频的数据库ID?
我正在创建一个站点,用于标识上述URL中的内容,但是我目前仅使用数据库ID。我正在考虑切换到随机字符串,因为所有主要站点都这样做,但是我想知道为什么在实现它之前先这样做。
谢谢!
最佳答案
有些站点是因为分片而这样做的。
当您仅编写一个进程(一个服务器)时,可以制作一个自动递增的ID,而无需重复ID,但是当您有多个服务器(具有多个进程)来编写内容(例如youtube)时,则无法使用自动递增id了。避免重复的同步代价将是巨大的。
例如,如果您阅读mongodb's ocjectid documentation,则可以看到ID的以下结构:
一个4字节的值,表示自Unix纪元以来的秒数,
一个3字节的机器标识符,
一个2字节的进程ID,以及
一个3字节的计数器,以随机值开头。
最后,它只有12个字节。问题是当您以十六进制表示时,看起来好像是24个字节,但这仅是在您显示它时才出现。
该系统的另一个优点是,时间戳包含在id中,因此您可以将id解耦以获得时间戳。
关于php - 为什么网站使用随机字母数字ID而不是数据库ID来标识内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27540702/