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

时间:2013-08-31 22:46:43

标签: php database

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

无论我将此字符串映射到数字。 aaaa = 1ZZZZ = 52^4

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

相关问题