YouTube网址算法?

Ben*_*enB 40 algorithm

您将如何生成YouTube使用的唯一视频网址?

例:

Sun*_*Jha 28

YouTube使用Base64编码为每个视频生成ID.生成ID的参与者包括

(AZ)+(az)+(0-9)+( - )+(_).(64个字符).

使用Base64编码,最多只能有11个字符,它们可以生成73个以上的Quintilian唯一ID.那么大的ID池是多少?

嗯,这足以让地球上的每个人每隔一分钟生成18000年的视频.

他们只需要使用11个字符(64*64*64*64*64*64*64*64*64*64*64)即可获得如此巨大的数字,如果他们需要更多ID,他们只需添加1个字符即可他们的身份证

因此,当视频在YouTube上传时,他们基本上会随机选择73 + Quintilian的可能性,看看它是否已被拍摄.如果没有使用它,否则寻找另一个.

有关详细说明,请参阅此视频.

  • 我之前看过这个视频,但是我不确定"检查它是否已被拍摄"就像听起来一样简单.如果在服务器检查时由不同的服务器选择该怎么办?当它回来时,它再也不可能如此肯定了 (4认同)
  • 是的,他们必须使用锁……如果有 200 台服务器不断检查这 1 台服务器,这不会使该台服务器非常繁忙吗?我认为一种方法是让单个服务器一次生成 1000 个这样的 Base64 ID,注册它们被占用,并且每次这 200 个服务器中的任何一个需要一些 ID 时,只需一次给它们 1000 个 (4认同)

Eli*_*sky 22

使用一些非平凡的散列函数.碰撞概率非常低,取决于功能,参数和输入域.请记住,加密哈希值专门设计为对非随机输入具有非常低的冲突率(即两个接近但不相等的输入的完全不同的哈希值).

Jeff Attwood的这篇文章是对这个主题的一个很好的概述.

这里是一个在线的散列运算单元,你可以玩.

  • 为什么在不需要的时候甚至允许碰撞的可能性?只需在0000000000处启动ID,并为每个新页面增加.如果这对你来说"看起来"不够随意,那么只需要取几个大质数P和Q,然后使用序列hash(n)= Pn mod Q (10认同)
  • @PeterAlexander 他们不会像这样增加它,所以你无法查看私人视频 (3认同)
  • YouTube是否使用哈希函数? (2认同)

dra*_*ard 9

不需要使用哈希.它可能只是通过base64或某些等价物传递的准随机64位值.

通过准随机,我的意思是它只是与计数整数的一对一映射,只是改组.

例如,您可以采用单调递增的数据库ID并将其乘以2 ^ 64附近的某个素数,然后将结果与base64相乘.如果您不希望人们猜测,您可以选择更复杂的映射,或者只选择一个不在数据库中的随机数.

普通base64会在结尾处添加一个等号,但在这种情况下它是暗示的,因为大小是已知的.字符映射很容易成为标准之外的东西.

  • *"例如,您可以采用单调增加的数据库ID并将其乘以2 ^ 64附近的某个素数,然后将结果与base64相乘."*为什么是素数?为什么这么大?我理解得越大,得到的id就越"安全",但这是一个非常大的数字,特别是在乘以标量ID之后,比如在数亿的值范围内. (2认同)

Ami*_*miy 5

您可以使用任何库或某些语言(例如Python)在标准库中提供它。

例子:

import secrets


id_length = 12
random_video_id = secrets.token_urlsafe(id_length)
Run Code Online (Sandbox Code Playgroud)