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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
php的array_multisort()使用方法介绍
May 16 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
Zend Framework页面缓存实例
Jun 25 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php生成rss类用法实例
Apr 14 PHP
PHP实现GIF图片验证码
Nov 04 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
php实现产品加入购物车功能(1)
Jul 23 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
Memcache 在PHP中的使用技巧
2010/02/08 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
php常用正则函数实例小结
2016/12/29 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
基于jquery 的一个progressbar widge
2010/10/29 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python中异常报错处理方法汇总
2016/11/20 Python
pyhton列表转换为数组的实例
2018/04/04 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python新手学习raise用法
2020/06/03 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
企业指导教师评语
2014/04/28 职场文书
关于读书的演讲稿
2014/05/07 职场文书
聘用意向书
2014/07/29 职场文书
兵马俑导游词
2015/02/02 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书