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 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
php设计模式之命令模式的应用详解
May 21 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
Yii使用技巧大汇总
Dec 29 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
php cli模式下获取参数的方法
May 05 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
一年级班主任寄语
2014/01/19 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
护校行动方案
2014/05/31 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
房产公证书格式
2015/01/26 职场文书
2015年国庆节寄语
2015/08/17 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
MySQL中的隐藏列的具体查看
2021/09/04 MySQL