0

我在一个网站上有一个功能,用户可以在其中注册电子邮件,然后收到一个唯一的 6 位数 PIN。

我知道,如果我为 PIN 生成一个随机数,然后检查它与现有注册 PIN 的唯一性(如果不是,则循环返回),这将在以后的注册中产生相当大的服务器负载。

因此,我选择预定义可用 PIN 列表,在注册时从该列表中选择一个 PIN,将其与用户关联,然后将其从可用 PIN 列表中删除。

处理此列表管理的最有效方法是什么?我应该在数据库中使用带有索引、数组还是仅使用文本文件的表?作为指南,我的列表中有 500,000 个唯一可用的 PIN。

目前,我已将其分解为文本文件,然后循环选择可用的 PIN 并将每个 PIN 依次发布到数据库中。使用 PIN 时,它会从文本文件中删除。

这是最佳实践吗?是否有更快/更好的方法来处理大量请求?尝试以这种方式处理它会遇到什么问题?:

//getting pin list and file where the pin exists
$sel_file = "";
for($i=1;$i<=10;$i++) {
    $sel_file = "pinlist/".$i.".txt";
    $pin_list = file($sel_file);
    if(count($pin_list)!=0) {
        break;
    }
}

if(count($pin_list)==0) {
    echo "Sorry we are full";
    exit;
}

//selecting pin
$pin = $pin_list[0];

//deleting pin and saving file
unset($pin_list[0]);
file_put_contents($sel_file,implode("",$pin_list));

//insert data
mysqli_query($conn,"INSERT INTO users(user_pin,user_email) VALUES('{$pin}','{$_POST['srEmail']}')");

编辑:回答一些评论;PIN 是另一个程序的唯一访问令牌。最重要的功能是能够处理对可用引脚列表的并发请求,因此我假设这不包括平面 txt 文件方法。数组可能仍然比标准数据库更好地实现这一点,我是对的吗?

4

0 回答 0