アプリケーションを作成しているときに、データベース内の特定のエンティティ (ABCD など) にランダムなタグを付けたいと考えています。これらは常に 4 文字で、大文字と数字を含めることができます。
問題は、それらをどのように割り当てるかです。これが提供する 160 万の可能性を使用することはありませんが、データベースがいっぱいになると、この L4 疑似コードを使用してランダムな文字列を生成するための「シーク」時間が指数関数的に長くなります。
function makeUniqueKey() {
while (true) {
$key = strtoupper(str_random(4));
if (!DB::table('items')->where('key', '=', $key)->count()) {
return $key;
}
}
}
これはOCDの好奇心の質問だと思いますが、データベース内のアイテムのランダムで一意のキーを作成するための非指数アルゴリズムの巧妙なトリックはありますか?