0

私は、ユーザーが電子メールを登録して、一意の 6 桁の PIN を受け取ることができる Web サイトの機能を持っています。

PIN の乱数を生成し、それが既存の登録済み PIN に対して一意であることを確認すると (そうでない場合はループ バック)、後の登録でかなりのサーバー負荷が発生することを理解しています。

代わりに、使用可能な PIN リストを事前に定義し、登録時にそのリストから PIN を選択し、それをユーザーに関連付けてから、使用可能な PIN リストから削除することにしました。

このリストの管理を処理する最も効率的な方法は何ですか? インデックス、配列、またはテキスト ファイルのみを含むデータベースでテーブルを使用する必要がありますか? 目安として、私のリストには 500,000 個の一意の使用可能な 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