加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php+mysql大量用户登录解决方案分析

发布时间:2020-12-13 02:18:49 所属栏目:PHP教程 来源:网络整理
导读:《:php+mysql大量用户登录解决方案分析》要点: 本文介绍了:php+mysql大量用户登录解决方案分析,希望对您有用。如果有疑问,可以联系我们。 PHP编程 本文实例分析了php+mysql大量用户登录办理方案.供大家参考研究.具体分析如下: PHP编程 百度、QQ

《:php+mysql大量用户登录解决方案分析》要点:
本文介绍了: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张表

代码如下:
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张表

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:

代码如下:
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');

登录流程:

PHP编程1)如果用户的登录类型是邮箱(如:$loginName='songhuan@zixue.it'),则在登录名前加上前缀登录名结果(如:$loginName='mail_songhuan@zixue.it')

PHP编程2)

代码如下:
$loginHash=ord(md5($loginName));

PHP编程3)

代码如下:
$tableName? = 'user_login' . ($loginHash%100);
假如结果为user_login88

PHP编程4)执行SQL:

代码如下:
SELECT id FROM user_login88 WHERE login_hash = $loginHash;

PHP编程如果查询不到数据,则登录名不存在

PHP编程5)如果能获取到,id=115,则

代码如下:
$tableName? = 'user_info'.(115%100);

PHP编程SELECT id,pwd … FROM user_info15 WHERE id = 115;

PHP编程6)匹配暗码,如果暗码不相等,返回false

PHP编程7)如果暗码相等,将用户ID加密放入COOKIE,将用户信息存入Memcache.

PHP编程希望本文所述对大家的php程序设计有所赞助.

《:php+mysql大量用户登录解决方案分析》是否对您有启发,欢迎查看更多与《:php+mysql大量用户登录解决方案分析》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读