Python 为url目的生成看似随机的唯一数字

Python 为url目的生成看似随机的唯一数字,python,database,algorithm,base64,uniqueidentifier,Python,Database,Algorithm,Base64,Uniqueidentifier,所以我想知道youtube的网址。特别是视频idwatch?v=XZmGGAbHqa0。类似的tinyurl服务也是如此 我偶然看到汤姆的录像带,那很有趣。但是,以随机方式生成一个看似随机的数字,检查重复项看起来相当昂贵 如果您没有观看视频,youtube会生成一个巨大的唯一数字,并对其进行base64编码。不确定youtube的整个过程是否如此简单,但我正试图写一些类似的东西 我遇到了一个名为模乘逆的数学函数。使用这个函数以及一点扩展的欧几里德算法将从给定的输入生成一个唯一的数字。反转也是可能

所以我想知道youtube的网址。特别是视频id
watch?v=XZmGGAbHqa0
。类似的tinyurl服务也是如此

我偶然看到汤姆的录像带,那很有趣。但是,以随机方式生成一个看似随机的数字,检查重复项看起来相当昂贵

如果您没有观看视频,youtube会生成一个巨大的唯一数字,并对其进行base64编码。不确定youtube的整个过程是否如此简单,但我正试图写一些类似的东西

我遇到了一个名为模乘逆的数学函数。使用这个函数以及一点扩展的欧几里德算法将从给定的输入生成一个唯一的数字。反转也是可能的,但如果不知道种子,就不可能轻易地反转或使用暴力。所以我们可以很容易地从数据库中的后续id中获得一个大的随机数。也许甚至可以

但我有困惑

正如tom在视频中提到的,跨多个服务器同步后续id可能会导致问题和开销。但是如果我们不把它放在后面,找到一个唯一的id难道不是一项乏味而昂贵的任务吗?我们必须检查db中的id是否可用

我应该避免在url中混用后续ID吗?或者用类似乘法逆的东西来掩盖它是好的

我为什么要这么做?要节省存储空间还是要节省url空间?我仍然需要生成一些看似随机、独特的东西,并且能够快速生成它,而无需复制和搜索它

有没有更好的方法来实现我的目标?我检查了所有类似的so问题和一些博客帖子。其中一个是


抱歉,如果我不能很好地解释,我很困惑该问什么。

这就是为什么您完全忽略了确保随机生成的数字唯一性的问题,而使用伪随机置换(PRP)族来转换预协调计数器的原因

PRP族类似于PRF族,因为它是一种密码,接受密钥和明文并生成密文,只是它在明文和密文之间有一对一的映射

这使得我们可以使用类似于Twitter雪花的设计,然后简单地将内部顺序标识符编码为非顺序外部标识符

有关Python的实现,请参见

卢比先生和拉科夫先生。如何从伪随机函数构造伪随机置换。《暹罗计算机杂志》,第17(2):373-386页,1988年4月


有意思。。我也找到了一个叫UUID的东西。学习所有这些和你提到的东西。