php+mysql大量使用者登入解決方案分析,mysql使用者登入_PHP教程

來源:互聯網
上載者:User

php+mysql大量使用者登入解決方案分析,mysql使用者登入


本文執行個體分析了php+mysql大量使用者登入解決方案。分享給大家供大家參考。具體分析如下:

百度、QQ、360等大公司都擁有上億的使用者量,不僅所有子網站都通過一個帳號登入,而且還開放使用者平台,提供給其他網站使用,這種層級的資料量和訪問量,如果不做最佳化,估計很快就會宕機,這些公司都是一個專門的團隊,維護一個註冊登入,細節設計的非常優秀,現在粗略談下他們的設計方案.

大資料的時候,壓力不在PHP,主要在MySQL,PHP可以做負載平衡,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
);
CREATE TABLE user_login0 LIKE user_login;
CREATE TABLE user_login1 LIKE user_login;
… …
CREATE TABLE user_login100 LIKE user_login;
ID與使用者資訊表,根據user_id分100張表

CREATE TABLE user_info(
user_id BIGINT 使用者ID
login_pwd CHAR() 使用者登入密碼
… … 其他資訊,家庭住址、手機號、性別等等
);

CREATE TABLE user_info0 LIKE user_info;
CREATE TABLE user_info1 LIKE user_info;
… …
CREATE TABLE user_info2 LIKE user_info;
業務實現邏輯:

依賴伺服器:實現一個自增ID的服務(相當於oracle的sequence),也可以自己實現(用PHP+MySQL或者用C實現都可以)。目的是可以 從這個服務中取ID,每次取的ID數都是在上次基礎上+1,和MySQL的autoincrement很像,只是不能在表內部自增。

註冊流程:

1)驗證使用者名稱、郵箱、手機號、密碼等格式。省略…

2)從服務中取一個ID,假設是115。

3)如果使用者的登入類型是郵箱(如:$loginName='songhuan@zixue.it'),則在登入名稱前加上首碼登入名稱結果(如:$loginName='mail_songhuan@zixue.it')

4)求登入名稱的HASH值:$loginHash=md5($loginName); 對md5值hash,可以求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程式設計有所協助。

http://www.bkjia.com/PHPjc/934927.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/934927.htmlTechArticlephp+mysql大量使用者登入解決方案分析,mysql使用者登入 本文執行個體分析了php+mysql大量使用者登入解決方案。分享給大家供大家參考。具體分析如下:...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.