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的中问验证码
Nov 25 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 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获取数组中重复数据的两种方法
2013/06/28 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python多进程控制学习小结
2018/10/31 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Python @property原理解析和用法实例
2020/02/11 Python
大数据分析用java还是Python
2020/07/06 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
学习2014年全国两会心得体会
2014/03/12 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
财务检查整改报告
2014/11/06 职场文书
董事长助理岗位职责
2015/02/11 职场文书
实习单位意见
2015/06/04 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
使用JS实现简易计算器
2021/06/14 Javascript