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


Posted in PHP onDecember 29, 2014

本文实例分析了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程序设计有所帮助。

PHP 相关文章推荐
PHP的面试题集
Nov 19 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
ucenter通信原理分析
Jan 09 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
Yii框架连表查询操作示例
Sep 06 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 #PHP
php操作mongoDB实例分析
Dec 29 #PHP
Yii实现多数据库主从读写分离的方法
Dec 29 #PHP
php调用mysql存储过程实例分析
Dec 29 #PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 #PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 #PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 #PHP
You might like
重料打造自己的“宝马”---第三代
2021/03/02 无线电
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
JS实现图片切换效果
2018/11/17 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
python分割文件的常用方法
2014/11/01 Python
python 计算文件的md5值实例
2017/01/13 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
python实现超级马里奥
2020/03/18 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
三年级数学教学反思
2014/01/31 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
个人课题方案
2014/05/08 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python