php+mysql大量用户登录解决方案

大数据的时候,压力不在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’);

登录流程 www.111cn.net
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

时间: 2024-10-28 01:06:46

php+mysql大量用户登录解决方案的相关文章

php+mysql大量用户登录解决方案分析_php技巧

本文实例分析了php+mysql大量用户登录解决方案.分享给大家供大家参考.具体分析如下: 百度.QQ.360等大公司都拥有上亿的用户量,不仅所有子网站都通过一个账号登录,而且还开放用户平台,提供给其他网站使用,这种级别的数据量和访问量,如果不做优化,估计很快就会宕机,这些公司都是一个专门的团队,维护一个注册登录,细节设计的非常优秀,现在粗略谈下他们的设计方案. 大数据的时候,压力不在PHP,主要在MySQL,PHP可以做负载均衡,10台机器抗不住就用20台或者100台,这都不是瓶颈. 但是My

php+mysql 用户登录-php+mysql、用户登录界面,

问题描述 php+mysql.用户登录界面, php+mysql设计一个用户登录界面,能登陆注册,有验证码,有数据库的建立和代码的详细步骤请给个详细的数据库的建立和正确的代码,我是新手,数据库表的建立和代码始终连接不上,请指教 解决方案 CSdn资源下载找找,里面很多

MySQL root用户登录的几个小问题(r12笔记第67天)

  今天和同事聊了聊技术的事情,聊到BAT里面的一些高大上的系统和设计,相比总是会有些差距,不过像那样体量的公司知识沉淀很深,所以能够做好我们力所能及的事情,把它细化做好,也是一种进步和改进.    如果你老是觉得自己的环境受限,有各种KPI或者是成本的考量,做事情从下往上去推动很难,这些都是实际的困难,很多公司都是存在这样的问题的.在资源受限方面,我尤其纠结,举个有意思的小例子,如果我收到一条报警,提示数据库表空间不足了,那就添加一个数据文件呗,结果数据库层面的空间问题解决了,而马上会收到一个

求基于ftp协议的实现不同用户登录ftp系统,并实现匿名登录

问题描述 求VBC#C++实现不同用户登录ftp服务器,并实现不同用户登录 解决方案 解决方案二:"求"什么?不要随便求人..netframework并不直接支持ftp服务器端编程,如果你自己设计就太复杂了..net支持ftpWebRequest,如果你要开发客户端程序,那么就要花点时间学一学rfc959等等的概念和流程设计.解决方案三:到底是不同用户还是匿名?既然是匿名,怎么又不同用户?解决方案四:可以不同用户并实现匿名登录解决方案五:http://download.csdn.net

用jsp写的表单用户登录页面,访问mysql数据库时候 出错 ,如下图

问题描述 用jsp写的表单用户登录页面,访问mysql数据库时候 出错 ,如下图 在处理登录的时候为什么有时候出现500错误,有时候又出现找不到数据库连接,我用得mysql数据库,驱动程序也添加了的,求大神指教一下啊! 解决方案 可能数据库没连接上(因为不同数据库版本的驱动不同) 来检查你的数据库是否链接上 在你得到的Connection conn=DriverManager.getConnection(参数); 后面加一段代码 if(conn==null) System.out.println

php mysql简单的用户登录实现代码

这里只给初学者用的一些参考教程,告诉你如何实现用户登录,我们是利用php教程 mysql教程做的希望对你有所帮助. $userid=trim($_POST["username"]); $userpass=trim($_POST["password"]); $admin_pass=substr(md5($userpass),0,32); //数据库教程密码 echo $userid."<br>".$admin_pass."&l

Fedora10无法使用root用户登录的解决方案

本文为原创,如需转载,请注明作者和出处,谢谢!     最近测试fedora10,发现fedora竟然无法使用root用户进行登录,就算root的密码输入正确也不行.虽然大正常的工作中尽尽量避免使用root用户进行登录.但在其他情况,如学习.完成个人的工作等,以root用户登录还是很方便的(如果用其他用户登录会有很多限制).     最简单的解决方案是修改/etc/pam.d/gdm文件的内容.先以普通用户进行登录,然后打开/etc/pam.d/gdm文件,将如下一行使用#注释: auth re

JSP 用户登录处理界面显示空白怎么解决

问题描述 JSP 用户登录处理界面显示空白怎么解决 <%@ page language=""java"" contentType=""text/html; charset=GBK""%><%@ page import=""java.sql.*""%><html> <head> <title>业务处理页面</title>

VSFTP+MySQL虚拟用户配置过程讲解

VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用.VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中.VSFTPD称这种形式的用户为虚拟用户.相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性.相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性.对于需要提供下载服务,但又不希望所有人都可以匿名