Php 使随机字符串不在数据库中

Php 使随机字符串不在数据库中,php,database,Php,Database,在编写应用程序时,我希望为数据库中的某些实体提供随机标记,例如ABCD。这些字符总是四个字符,可以包含大写字母和数字 问题是,如何分配它们?我们永远不会使用它提供的160万种可能性,但随着数据库越来越满,使用此L4伪代码生成随机字符串的“搜索”时间将以指数级增长: function makeUniqueKey() { while (true) { $key = strtoupper(str_random(4)); if (!DB::table('items

在编写应用程序时,我希望为数据库中的某些实体提供随机标记,例如ABCD。这些字符总是四个字符,可以包含大写字母和数字

问题是,如何分配它们?我们永远不会使用它提供的160万种可能性,但随着数据库越来越满,使用此L4伪代码生成随机字符串的“搜索”时间将以指数级增长:

function makeUniqueKey() {
    while (true) {
        $key = strtoupper(str_random(4));
        if (!DB::table('items')->where('key', '=', $key)->count()) {
            return $key;
        }
    }
}

我想这更像是一个OCD好奇的问题,但非指数算法是否有任何巧妙的技巧来为数据库中的项目创建随机、唯一的键?

最好不要随机分配它们。最简单的是增量(例如:从aaaa开始,一直到ZZZZ)

不管怎样,我都会将这个字符串映射到一个数字<代码>aaaa=1,
ZZZZ=52^4


然后,您可以选择一个随机数,然后在数据库中搜索第一个间隙。应该可以使用存储过程。这将使性能下降至少是线性的,而不是随着数据集的增加而呈指数下降。

while循环最终将变成无限长的4个字符长的随机字符串。只有这么多的组合。是的,执行时间将接近无穷大,因为表中的条目数目转到<代码>(字符)^(字符串长度) HMM,这是一个有趣的解决方案,绝对要考虑。