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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
PHP 面向对象实现代码
Nov 11 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
Sep 09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php简单中奖算法(实例)
Aug 15 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
php抽象类和接口知识点整理总结
Aug 02 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 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
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
php验证码实现代码(3种)
2015/09/07 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
Python学习之用pygal画世界地图实例
2017/12/07 Python
对python 命令的-u参数详解
2018/12/03 Python
wxPython色环电阻计算器
2019/11/18 Python
python爬取抖音视频的实例分析
2021/01/19 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
研究生自荐信
2013/10/09 职场文书
中专生的个人自我评价
2013/12/11 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
眼镜促销方案
2014/03/15 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
科技活动总结范文
2015/05/11 职场文书
离婚案件被告代理词
2015/05/23 职场文书
世界名著读书笔记
2015/06/25 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
诚信高考倡议书
2019/06/24 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫