プロセスは非常に簡単です。
ユーザーが登録用のフィールドに入力した後、mysqlデータベーステーブルの「activation_key」という列はランダムに生成された長い文字列を保持し、別の列activated
は値0を保持します。
アクティベーションメールは、列のランダムキー値を含むアクティベーションリンクとともに登録者のメールに送信されactivation_key
ます。リンクをクリックすると、URLはデータベースで長い文字activation_key'
列を含む列を検索します。そのような値がある場合、「activation_key」は空白に設定され、「activate」列は1に設定されます。.
アクティベーションキー文字列が生成されると、生成されているキーがすでに存在するかどうかが検索され、存在する場合は、別のランダムな値が生成されて一意のキーが取得されます。
したがって、少数のメンバーになる予定のメンバーが登録を保留している場合、同様の文字列検索が実際にテーブル内の行に対して実行されます。
この時点まで、すべてが大丈夫です。
ただし、新しいメンバーが、登録を完了した別のメンバー用に以前に生成されたアクティベーション文字列を取得すると考えてください。
万が一、登録済みのメンバーが古いメールのアクティベーションリンクをクリックすると、実際に登録を完了していなくても、他の新しいメンバーは登録を完了します。
そのため、「activation_key」テーブルを空白に設定しないことにしました。そのため、既存または将来のすべてのメンバーに対して同様の文字列検索が実行されました。
それは結構です。ただし、ユーザー数が多い場合、つまり1 lacを超える場合は、アクティベーションメールを送信するための登録プロセスに時間がかかります。
1)データベース探索コストを最小限に抑える他の方法はありますか?
2)この場合、Facebookのようなメガサイトはどのようなポリシーを取りますか?