我最近为自己购买了一个用于缩短个人 URL 的域。我创建了一个函数来生成 4 个字符的字母数字字符串作为参考。
但
如何检查它们是否已被使用?我无法检查数据库中是否存在每个 URL,或者这只是它的工作方式,我必须这样做?如果是这样,如果我生成了 13.000.000 个 URL(共 14.776.336 个)怎么办。我是否需要继续生成字符串,直到找到一个不在数据库中的字符串?
这看起来不是正确的方法,任何人都可以给我一些建议吗?
我最近为自己购买了一个用于缩短个人 URL 的域。我创建了一个函数来生成 4 个字符的字母数字字符串作为参考。
但
如何检查它们是否已被使用?我无法检查数据库中是否存在每个 URL,或者这只是它的工作方式,我必须这样做?如果是这样,如果我生成了 13.000.000 个 URL(共 14.776.336 个)怎么办。我是否需要继续生成字符串,直到找到一个不在数据库中的字符串?
这看起来不是正确的方法,任何人都可以给我一些建议吗?
我想到的一种内存效率更高且速度更快的方法是遵循。这个问题完全不用数据库就可以解决。这个想法是,您可以将它们存储在内存中,而不是将使用的 url 存储在数据库中。并且由于将它们存储在内存中会占用大量内存,因此我们将使用一个位集(位数组),并且每个 url 只有一个位。
这样您就可以永远避免使用 DB,查找速度非常快,并且占用的内存最少。
我从这个地方借来的想法
一个折中的解决方案是生成一个随机id,如果已经在数据库中,就找第一个比它大的空id。(如果在上述范围内找不到任何空白区域,请绕行。)
如果您不希望 id 不可猜测(如果您只使用 4 个字符,则可能不会),这种方法可以正常工作并且速度很快。
一种算法是尝试几次找到N个字符的空闲url,如果仍然没有找到,则增加N。从N = 4开始。