Java youtube如何计算每个视频的唯一11位代码
Youtube似乎每个视频都有一个唯一的11位代码。代码包括Java youtube如何计算每个视频的唯一11位代码,java,algorithm,youtube,Java,Algorithm,Youtube,Youtube似乎每个视频都有一个唯一的11位代码。代码包括1-9、A-Z、A-Z,以及一些符号,如+.*等 他们如何计算每个视频的唯一代码?我正在做一件事,我想给每个记录分配一个唯一的代码,所以问题就来了 我的问题/关注是: 如果他们在运行中(当视频被提交时)就必须检查为视频准备的代码是否已经存在?对于像他们这样的庞大数据集,这将是一项昂贵的操作 他们会每晚或每月运行一个批处理作业之类的东西,创建唯一的代码并将它们存储在数据库中。然后,在提交视频时,只需获取一个代码并将其标记为“已使用” 对于
1-9、A-Z、A-Z
,以及一些符号,如+.*
等
他们如何计算每个视频的唯一代码?我正在做一件事,我想给每个记录分配一个唯一的代码,所以问题就来了
我的问题/关注是:
ID
列,然后以某种方式将唯一的ID
列转换为11位代码,这样做有意义吗- 为表中的记录创建唯一代码李>
- 用户可以与任何人共享带有该唯一代码的url李>
- 当有人通过唯一代码进来时。然后,他们的“进来”与使用唯一代码共享url的原始用户绑定李>
对完整的可能URL集使用哈希函数,然后对照索引数据库进行检查的问题在于,它消除了同步的可能性。考虑上传视频所需的时间,检查他们的数据库需要几乎没有时间,这不是问题。当您考虑预计算时,同样的问题也会发生:如果您想使用分布式计算机,那么需要在单个访问点上进行同步,我相信他们确实会这样做。我认为你的第三点可能是最接近正确的,然后由于某种原因,ID被编码成了一个更长的数字(我实际上不确定它相对于int值的优势是什么;有人有一个好的理由吗?这里有一种方法可以有效地做到这一点,并且使它看起来是随机的:-
编辑:-我知道给定的解决方案是针对数字的,但您始终可以使用每个数字的简单映射将数字转换为符号。所有这些来回的操作让我对youtube的后端做了更多的研究。这是我想到的 这让我相信他们正在使用MySQL存储视频元数据。以下部分内容取决于使用关系数据存储的假设 我认为11个字符的base64 id实际上是一个base64编码的64位值
64^11=(2^6)^11=2^66
,这太接近于2^64
,不可能是巧合
我强烈怀疑这个id的一部分来自存储视频元数据的碎片的id。假设他们对碎片id使用24位(16777216)。他们可能使用整个范围,但他们没有1600万个碎片。相反,他们可能会为每个碎片分配一系列这些碎片ID,以简化重硬处理。指定给给定视频的碎片id可能是伪随机的。当碎片开始填满时,他们将其拆分并更新范围。简单
剩余比特的至少一部分可能是碎片本地的自动递增值
如果在此之后还有剩余的位,它们可能被伪随机数、时间戳或类似的东西占用。还可能包括其他特定于实施的数据,但如果他们必须迁移,这可能会导致大问题,因此我怀疑他们会回避这一点。缩短GUID是否会违背其唯一性的目的?编辑以添加更多解释。11位base64字符串包含66位,或略低于10^20位的可能性。可能足够好,但绝对不能防碰撞。但是,如果它包含一个全局时间戳(置换?),这可能就足够了。@JimGarrison我怀疑他们担心会破坏7378697600000000000个视频。我认为即使是谷歌也无法找到足够的驱动器来支持它that@Floegipoky它不是按顺序分配的编号。。。它是随机生成的(可能包含时间戳,也可能不包含时间戳),因此发生冲突的可能性很小。这些数字可能是内部顺序的,并以更简洁的表示形式表示,不存在重叠的可能性。您描述的字符集正好有64个值,这意味着表示可能只是以64为基数。这个问题似乎离题了,因为它要求读心术。