【发布时间】:2019-09-28 09:34:20
【问题描述】:
所以我想知道 youtube 的网址。特别是视频 ID watch?v=XZmGGAbHqa0。类似的 tinyurl 服务也一样。
我看到了 Tom 的 Will YouTube Ever Run Out Of Video IDs? 视频,这很有趣。但是以随机方式生成一个看似随机的数字,检查重复项看起来相当昂贵。
如果您还没有观看视频,youtube 会生成一个大的唯一编号并对其进行 base64 编码。不确定整个过程在 youtube 中是否那么简单,但我正在尝试编写类似的内容。
我遇到了一个名为Modular Multiplicative Inverse. 的数学函数,将它与一些扩展欧几里得算法 结合使用,将从我们给定的输入中生成一个唯一的数字。逆向也是可能的,但是在不知道种子的情况下,将无法轻易地逆向或蛮力。所以我们可以很容易地从数据库中的后续 id 中得到一个很大的随机数。甚至可能是 base64。
但我有一些困惑。
正如汤姆在视频中提到的,跨多个服务器同步后续 ID 可能会导致问题和开销。但是如果我们不做后续,找到一个唯一的 id 会不会是一项繁琐而昂贵的任务?我们必须检查 id 是否在 db 中可用。
我应该避免将 url 与后续 id 混合吗?或者用乘法逆之类的东西掩盖它是好的?
我为什么要base64呢?节省存储空间还是节省 url 空间?我仍然需要生成一些看似随机、独特的东西,并且能够快速生成它而无需复制和搜索。
有更好的方法来实现我正在尝试的目标吗?我确实检查了所有类似的问题和一些博客文章。其中this
对不起,如果我不能很好地解释,我很困惑该问什么。
【问题讨论】:
标签: python database algorithm base64 uniqueidentifier