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 相关文章推荐
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
PHP实现合并discuz用户
Aug 05 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
php数据访问之增删改查操作
May 09 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
PHP使用函数用法详解
Sep 30 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 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扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
利用php生成验证码
2017/02/23 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
简略的前端架构心得&&基于editor为例子的编码小技巧
2010/11/25 Javascript
js常用排序实现代码
2010/12/28 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
说一说Python logging
2016/04/15 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
在python中画正态分布图像的实例
2019/07/08 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
python 从list中随机取值的方法
2020/11/16 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
校园环保标语
2014/06/13 职场文书
企业务虚会发言材料
2014/10/20 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS