国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

php+mysql大量用戶登錄解決方案

2024-05-04 21:49:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

百度、QQ、360等大公司都擁有上億的用戶量,不僅所有子網(wǎng)站都通過(guò)一個(gè)賬號(hào)登錄,而且還開(kāi)放用戶平臺(tái),提供給其他網(wǎng)站使用,這種級(jí)別的數(shù)據(jù)量和訪問(wèn)量,如果不做優(yōu)化,估計(jì)很快就會(huì)宕機(jī),這些公司都是一個(gè)專門的團(tuán)隊(duì),維護(hù)一個(gè)注冊(cè)登錄,細(xì)節(jié)設(shè)計(jì)的非常優(yōu)秀,現(xiàn)在粗略談下他們的設(shè)計(jì)方案.

大數(shù)據(jù)的時(shí)候,壓力不在PHP,主要在MySQL,PHP可以做負(fù)載均衡,10臺(tái)機(jī)器抗不住就用20臺(tái)或者100臺(tái),這都不是瓶頸.

但是MySQL是單點(diǎn)的,無(wú)論做多少?gòu)膸?kù),都是優(yōu)化查詢,更新數(shù)據(jù)就無(wú)法只是簡(jiǎn)單的通過(guò)加機(jī)器解決了,而且查詢也可以通過(guò)Memcache緩存減輕壓力,所以不必要做多少?gòu)膸?kù)的,一般1主4從就可以了.

下面主要介紹下數(shù)據(jù)庫(kù)的解決方案:

假設(shè)用戶可以通過(guò)“登錄名”、“郵箱”或“手機(jī)號(hào)”登錄.

表結(jié)構(gòu)如下:

登錄名與ID表,根據(jù)login_hash分100張表

  1. CREATE TABLE user_login( 
  2. login_name VARCHAR() 用戶登錄名,可以是“登錄名”、“郵箱”或“手機(jī)號(hào)”登錄 
  3. login_hash BIGINT 用戶登錄名的HASH碼 
  4. user_id BIGINT 用戶ID 
  5. ); 
  6. CREATE TABLE user_login0 LIKE user_login; 
  7. CREATE TABLE user_login1 LIKE user_login; 
  8. … … 
  9. CREATE TABLE user_login100 LIKE user_login; 

ID與用戶信息表,根據(jù)user_id分100張表

  1. CREATE TABLE user_info( 
  2. user_id BIGINT 用戶ID 
  3. login_pwd CHAR() 用戶登錄密碼 
  4. … … 其他信息,家庭住址、手機(jī)號(hào)、性別等等 
  5. );//開(kāi)源代碼Vevb.com 
  6.  
  7. CREATE TABLE user_info0 LIKE user_info; 
  8. CREATE TABLE user_info1 LIKE user_info; 
  9. … … 
  10. CREATE TABLE user_info2 LIKE user_info; 

業(yè)務(wù)實(shí)現(xiàn)邏輯:

依賴服務(wù)器:實(shí)現(xiàn)一個(gè)自增ID的服務(wù)(相當(dāng)于oracle的sequence),也可以自己實(shí)現(xiàn)(用PHP+MySQL或者用C實(shí)現(xiàn)都可以)。目的是可以 從這個(gè)服務(wù)中取ID,每次取的ID數(shù)都是在上次基礎(chǔ)上+1,和MySQL的autoincrement很像,只是不能在表內(nèi)部自增。

注冊(cè)流程:

1)驗(yàn)證用戶名、郵箱、手機(jī)號(hào)、密碼等格式。省略…

2)從服務(wù)中取一個(gè)ID,假設(shè)是115。

3)如果用戶的登錄類型是郵箱(如:$loginName=’songhuan@zixue.it’),則在登錄名前加上前綴登錄名結(jié)果(如:$loginName=’mail_songhuan@zixue.it’)

4)求登錄名的HASH值:$loginHash=md5($loginName); 對(duì)md5值hash,可以求asc碼,或者用自己的算法,最后得出$loginHash=16位或32位的整數(shù)

5)$tableName  = ‘user_login’ . ($loginHash%100),如果獲取user_login表名,假如結(jié)果為user_login88。

$tableName  = ‘user_info’ . (115%100),如果獲取user_info表名。

6)執(zhí)行SQL:

  1. INSERT INTO user_login88 (login_name, login_hash, user_id) VALUES (‘songhuan@zixue.it’, 183239324323, 1); 
  2. INSERT INTO user_info15 (user_id, login_pwd) VALUES (115, ‘afieflefiefladifadfadfe’); 

登錄流程:

1)如果用戶的登錄類型是郵箱(如:$loginName=’songhuan@zixue.it’),則在登錄名前加上前綴登錄名結(jié)果(如:$loginName=’mail_songhuan@zixue.it’)

2)$loginHash=ord(md5($loginName));

3)$tableName  = ‘user_login’ . ($loginHash%100); 假如結(jié)果為user_login88

4)執(zhí)行SQL:SELECT id FROM user_login88 WHERE login_hash = $loginHash;

如果查詢不到數(shù)據(jù),則登錄名不存在

5)如果能獲取到,id=115,則$tableName  = ‘user_info’.(115%100);

SELECT id, pwd … FROM user_info15 WHERE id = 115;

6)匹配密碼,如果密碼不相等,返回false

7)如果密碼相等,將用戶ID加密放入COOKIE,將用戶信息存入Memcache.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉贤区| 建湖县| 东丰县| 临洮县| 祁门县| 威海市| 岳池县| 洪泽县| 邵东县| 光泽县| 寿宁县| 茌平县| 宜良县| 南皮县| 井研县| 富川| 红河县| 虞城县| 莱阳市| 三河市| 黄石市| 旬邑县| 德安县| 略阳县| 碌曲县| 兴化市| 华容县| 尼木县| 绥江县| 天水市| 黑山县| 新巴尔虎右旗| 双桥区| 涡阳县| 阳泉市| 盐源县| 彰化市| 泰州市| 江西省| 壶关县| 泰州市|