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 相关文章推荐
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
thinkphp实现分页显示功能
Dec 03 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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防注
2007/01/15 PHP
php 数组的一个悲剧?
2011/05/11 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
splice slice区别
2006/10/09 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
python实现简易云音乐播放器
2018/01/04 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Python编程求质数实例代码
2018/01/31 Python
Python3匿名函数用法示例
2018/07/25 Python
python__new__内置静态方法使用解析
2020/01/07 Python
详解Python高阶函数
2020/08/15 Python
Python日志器使用方法及原理解析
2020/09/27 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
会计电算化专业个人的自我评价
2013/11/24 职场文书
促销活动总结报告
2014/04/26 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
四查四看整改措施
2014/09/19 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
MySQL优化及索引解析
2022/03/17 MySQL