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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
关于php开启错误提示的总结
Sep 24 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 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
资料注册后发信小技巧
2006/10/09 PHP
数据库查询记录php 多行多列显示
2009/08/15 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
js读取本地文件的实例
2017/12/22 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
python利用装饰器进行运算的实例分析
2015/08/04 Python
numpy中索引和切片详解
2017/12/15 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python如何爬取个性签名
2018/06/19 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
幼儿园教研活动方案
2014/01/19 职场文书
迎八一活动主题
2014/01/31 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
实习指导教师评语
2014/12/30 职场文书
高中运动会前导词
2015/07/20 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
详解Laravel服务容器的优势
2021/05/29 PHP
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android