この記事では、例を通じて php+mysql の大量ユーザー ログイン ソリューションを分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
Baidu、QQ、360 などの大企業はすべて、数億人のユーザーを抱えており、すべてのサブ Web サイトが 1 つのアカウントを通じてログインするだけでなく、このレベルの他の Web サイトが使用できるユーザー プラットフォームも開いています。これらの企業には、登録とログインを維持するための専門チームがあり、詳細な設計は非常に優れています。次に、設計計画について簡単に説明します。
ビッグデータに関しては、PHP ではなく、主に MySQL に負荷がかかります。10 台のマシンで処理できない場合は、20 台または 100 台を使用してください。これはボトルネックではありません。ただし、MySQL は単一のスレーブ データベースを作成しても、データの更新はマシンを追加するだけでは解決できません。また、クエリは Memcache キャッシュによって負荷を軽減することもできます。多数のスレーブ データベースを作成する必要はありません。通常は 1 つのマスターと 4 つのスレーブで十分です。
以下では主にデータベースソリューションを紹介します:ユーザーは「ログイン名」、「メールアドレス」、「携帯電話番号」でログインできるものとします。
テーブル構造は次のとおりです:
ログイン名とIDのテーブル、login_hashに従って100のテーブルに分割
コードをコピーします
);
user_info のようなテーブル user_info0 を作成します
user_info のようなテーブル user_info1 を作成します
… …
CREATE TABLE user_info2 LIKE user_info;
ビジネス実装ロジック:
1) ユーザー名、電子メール、携帯電話番号、パスワード、その他の形式を確認します。省略… 2) サービスから ID を取得します。たとえば、115 とします。
3) ユーザーのログイン タイプが電子メールの場合 (例: $loginName='songhuan@zixue.it')、ログイン名の前にプレフィックス ログイン名の結果を追加します (例: $loginName='mail_songhuan@zixue.it')
4) ログイン名のハッシュ値を見つけます: $loginHash=md5($loginName); md5 値のハッシュについては、ASC コードを見つけるか、独自のアルゴリズムを使用して、最終的に $loginHash=16- を取得します。ビットまたは 32 ビット整数
5) $tableName = 'user_login' . ($loginHash%100)、user_login テーブル名を取得した場合、結果は user_login88 です。
$tableName = 'user_info' . (115%100)、user_info テーブル名を取得した場合。
6) SQL を実行します:
コードをコピーします
コードをコピーします
コードは次のとおりです:
コードは次のとおりです:
コードは次のとおりです:
コードをコピーします
コードは次のとおりです:
6) パスワードを照合します。パスワードが等しくない場合は false を返します
7) パスワードが等しい場合、ユーザーIDを暗号化してCOOKIEに入れ、ユーザー情報をMemcacheに保存します。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。