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数据库连接
Oct 09 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
php的dl函数用法实例
Nov 06 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
php实现点击可刷新验证码
Nov 07 PHP
php实现购物车功能(上)
Jul 23 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
PHP命令行与定时任务
Apr 01 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 Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
Python内置函数reversed()用法分析
2018/03/20 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
python opencv肤色检测的实现示例
2020/12/21 Python
python压包的概念及实例详解
2021/02/17 Python
linux面试题参考答案(9)
2016/01/29 面试题
税务会计岗位职责
2014/02/18 职场文书
关于爱国的标语
2014/06/24 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
门面房租房协议书
2014/12/01 职场文书
文艺委员竞选稿
2015/11/19 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python