ホームページ > バックエンド開発 > PHPチュートリアル > php+mysql 大規模ユーザー ログイン ソリューションの分析、mysql ユーザー ログイン_PHP チュートリアル

php+mysql 大規模ユーザー ログイン ソリューションの分析、mysql ユーザー ログイン_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:10:33
オリジナル
699 人が閲覧しました

php+mysql 大規模ユーザーログインソリューション分析、mysql ユーザーログイン

この記事では、例を通じて php+mysql の大量ユーザー ログイン ソリューションを分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

Baidu、QQ、360 などの大企業はすべて、数億人のユーザーを抱えており、すべてのサブ Web サイトが 1 つのアカウントを通じてログインするだけでなく、このレベルの他の Web サイトが使用できるユーザー プラットフォームも開いています。これらの企業には、登録とログインを維持するための専門チームがあり、詳細な設計は非常に優れています。次に、設計計画について簡単に説明します。

ビッグデータに関しては、PHP ではなく、主に MySQL に負荷がかかります。10 台のマシンで処理できない場合は、20 台または 100 台を使用してください。これはボトルネックではありません。

ただし、MySQL は単一のスレーブ データベースを作成しても、データの更新はマシンを追加するだけでは解決できません。また、クエリは Memcache キャッシュによって負荷を軽減することもできます。多数のスレーブ データベースを作成する必要はありません。通常は 1 つのマスターと 4 つのスレーブで十分です。

以下では主にデータベースソリューションを紹介します:

ユーザーは「ログイン名」、「メールアドレス」、「携帯電話番号」でログインできるものとします。

テーブル構造は次のとおりです:

ログイン名とIDのテーブル、login_hashに従って100のテーブルに分割


コードをコピーします

コードは次のとおりです:CREATE TABLE user_login( login_name VARCHAR() ユーザーのログイン名。ログインするための「ログイン名」、「電子メール」、または「携帯電話番号」を指定できます
login_hash ユーザーのログイン名の BIGINT HASH コード
user_id BIGINT ユーザー ID
); user_login のようなテーブルを作成します
; user_login のようにテーブル user_login1 を作成します
… …
user_login のようにテーブル user_login100 を作成します
IDとユーザー情報のテーブル、user_idに従って100のテーブルに分割

CREATE TABLE user_info(
user_id BIGINT ユーザー ID
login_pwd CHAR() ユーザーのログインパスワード … … その他の情報、自宅住所、携帯電話番号、性別など

);

user_info のようなテーブル user_info0 を作成します
user_info のようなテーブル user_info1 を作成します
… …
CREATE TABLE user_info2 LIKE user_info;


ビジネス実装ロジック:


サーバーに応じて: 自己増加 ID サービス (Oracle のシーケンスと同等) を実装するか、自分で実装することもできます (PHP+MySQL または C を使用)。目的は、このサービスから ID を取得することです。毎回取得される ID の数は、前回に基づいて +1 されます。ただし、テーブル内でインクリメントできない点が異なります。 登録プロセス:

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 を実行します:

コードをコピーします

コードは次のとおりです: INSERT INTO user_login88 (login_name, login_hash, user_id) VALUES ('songhuan@zixue.it', 183239324323, 1); INSERT INTO user_info15 (user_id, login_pwd) VALUES (115, 'afieflefiefladifadfadfe');
ログインプロセス:

1) ユーザーのログイン タイプが電子メールの場合 (例: $loginName='songhuan@zixue.it')、ログイン名の前にプレフィックス ログイン名の結果を追加します (例: $loginName='mail_songhuan@zixue.it')
2)

コードをコピーします

コードは次のとおりです:

$loginHash=ord(md5($loginName)); 3)
コードをコピーします

コードは次のとおりです:

$tableName = 'user_login' ($loginHash%100);結果が user_login88 の場合 4) SQL を実行します:
コードをコピーします

コードは次のとおりです:

SELECT id FROM user_login88 WHERE login_hash = $loginHash; データをクエリできない場合は、ログイン名が存在しません
5) id=115 が取得できたら、

コードをコピーします

コードは次のとおりです:

$tableName = 'user_info'.(115%100); SELECT id, pwd … FROM user_info15 WHERE id = 115;

6) パスワードを照合します。パスワードが等しくない場合は false を返します

7) パスワードが等しい場合、ユーザーIDを暗号化してCOOKIEに入れ、ユーザー情報をMemcacheに保存します。

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/934927.html技術記事 php+mysql 大量ユーザー ログイン ソリューション、mysql ユーザー ログインの分析 この記事では、php+mysql 大量ユーザー ログイン ソリューションを例とともに分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート