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安装问题
Oct 09 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
PHP5.3新特性小结
Feb 14 PHP
Yii rules常用规则示例
Mar 15 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 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
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php检查页面是否被百度收录
2015/10/28 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
Python实现控制台进度条功能
2016/01/04 Python
Python找出9个连续的空闲端口
2016/02/01 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
zookeeper python接口实例详解
2018/01/18 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
python中pop()函数的语法与实例
2020/12/01 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
房屋租赁协议书
2014/10/18 职场文书
迟到检讨书范文
2015/01/27 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL