《PHP學習:php+mysql大量用戶登錄解決方案分析》要點:
本文介紹了PHP學習:php+mysql大量用戶登錄解決方案分析,希望對您有用。如果有疑問,可以聯系我們。
PHP編程本文實例分析了php+mysql大量用戶登錄辦理方案.分享給大家供大家參考.具體分析如下:
PHP編程百度、QQ、360等大公司都擁有上億的用戶量,不僅所有子網站都通過一個賬號登錄,而且還開放用戶平臺,提供給其他網站使用,這種級別的數據量和拜訪量,如果不做優化,估計很快就會宕機,這些公司都是一個專門的團隊,維護一個注冊登錄,細節設計的非常優秀,現在粗略談下他們的設計方案.
PHP編程大數據的時候,壓力不在PHP,主要在MySQL,PHP可以做負載均衡,10臺機器抗不住就用20臺或者100臺,這都不是瓶頸.
PHP編程但是MySQL是單點的,無論做多少從庫,都是優化查詢,更新數據就無法只是簡單的通過加機器辦理了,而且查詢也可以通過Memcache緩存減輕壓力,所以不必要做多少從庫的,一般1主4從就可以了.
PHP編程下面主要介紹下數據庫的辦理方案:
PHP編程假設用戶可以通過“登錄名”、“郵箱”或“手機號”登錄.
PHP編程表結構如下:
PHP編程登錄名與ID表,根據login_hash分100張表
PHP編程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;
PHP編程依賴服務器:實現一個自增ID的服務(相當于oracle的sequence),也可以自己實現(用PHP+MySQL或者用C實現都可以).目的是可以 從這個服務中取ID,每次取的ID數都是在上次基礎上+1,和MySQL的autoincrement很像,只是不能在表內部自增.
PHP編程注冊流程:
PHP編程1)驗證用戶名、郵箱、手機號、暗碼等格式.省略…
PHP編程2)從服務中取一個ID,假設是115.
PHP編程3)如果用戶的登錄類型是郵箱(如:$loginName='songhuan@zixue.it'),則在登錄名前加上前綴登錄名結果(如:$loginName='mail_songhuan@zixue.it')
PHP編程4)求登錄名的HASH值:$loginHash=md5($loginName); 對md5值hash,可以求asc碼,或者用自己的算法,最后得出$loginHash=16位或32位的整數
PHP編程5)$tableName? = 'user_login' . ($loginHash%100),如果獲取user_login表名,假如結果為user_login88.
PHP編程$tableName? = 'user_info' . (115%100),如果獲取user_info表名.
PHP編程6)執行SQL:
PHP編程1)如果用戶的登錄類型是郵箱(如:$loginName='songhuan@zixue.it'),則在登錄名前加上前綴登錄名結果(如:$loginName='mail_songhuan@zixue.it')
PHP編程2)
PHP編程3)
PHP編程4)執行SQL:
PHP編程如果查詢不到數據,則登錄名不存在
PHP編程5)如果能獲取到,id=115,則
PHP編程SELECT id, pwd … FROM user_info15 WHERE id = 115;
PHP編程6)匹配暗碼,如果暗碼不相等,返回false
PHP編程7)如果暗碼相等,將用戶ID加密放入COOKIE,將用戶信息存入Memcache.
PHP編程希望本文所述對大家的php程序設計有所贊助.
《PHP學習:php+mysql大量用戶登錄解決方案分析》是否對您有啟發,歡迎查看更多與《PHP學習:php+mysql大量用戶登錄解決方案分析》相關教程,學精學透。維易PHP學院為您提供精彩教程。