海量用户使用电子邮箱或者用户名登陆-解决方案

百度、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=‘[email protected]‘),则在登录名前加上前缀登录名结果(如:$loginName=‘[email protected]‘)
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 (‘[email protected]‘, 183239324323, 1);
INSERT INTO user_info15 (user_id, login_pwd) VALUES (115, ‘afieflefiefladifadfadfe‘);

登录流程
1)如果用户的登录类型是邮箱(如:$loginName=‘[email protected]‘),则在登录名前加上前缀登录名结果(如:$loginName=‘[email protected]‘)
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

不能的字符串生成的hash值有可能相同,特别是当数据量巨大的时候,重复的概率更高。
这时候通过一个hash从user_login表中获取的记录可能是多条。
这时可以做一个性能和业务之间的权衡,就是当hash存在的时候,用户用就已经被使用了。
假如:‘songhuan‘和‘宋欢‘对应的hash码相同,这时如果有用户注册了‘songhuan‘,那么注册‘宋欢‘的时候也只能提示用户,该用户名已经被注册了。
所以建表的时候,在login_hash上加上唯一索引

时间: 2024-12-12 05:22:03

海量用户使用电子邮箱或者用户名登陆-解决方案的相关文章

163电子邮箱,注册登陆及使用详细揭秘

163电子邮箱,和我们工作生活息息相关.那么对于最近颇受关注的TOM-VIP邮箱,小编来帮忙揭秘其在注册.登陆及使用方面小技能分享给各位~ 首先:163.net邮箱多种登陆入口 包括 1)Web端注册登录 (Web端注册登录,任意端电脑登陆,方便快捷) 2)客户端登陆 (客户端登陆,一键进邮箱) 3)手机-微信端登陆,随时收发邮件 (微信关注"随心邮"随时随地手机微信收发邮件) 其次:TOM-VIP邮箱这些功能一定不要错过! 1)误发邮件撤回,过多的邮件处理极易导致邮件的错发.而TOM

Exchange2013 ECP迁移用户提示错误(该用户没有Exchange邮箱)及解决方案

近期公司做了一些系统升级服务,原有使用的是Exchange2010,然后想升级Exchange2013,但是由于考虑到服务的稳定及持续性,所以就在环境内部署了两台Exchange2013服务器,部署后,准备迁移用户的时候发现有点问题,在迁移用户的时候提示用户邮箱不存在,其实呢是真实存在的,所以在网上找一些解决方案,解决后总结了一下分享给有需要的朋友,我们都知道,从Exchange2013开始Exchnage的架构变化很大,从原有的CS架构变成了BS架构,所以关于Exchange的所有操作都是通过

电子邮箱登陆3大方式普及

电子邮箱,作为一款跨越世纪的通信产品,有多种登陆方式,越是知名的品牌越会为用户提供更为多样化的登陆场景,今天以TOM VIP邮箱为例,为大家普及一下~ 登陆方式一:Web端登陆 1)网页搜索并登陆http:// 163.net 2)输入账号&密码即可登陆 登陆方式二:客户端登陆下载邮箱登陆软件,创建并登陆已有账号 登陆方式三:微信公众号"随心邮"登陆 相较其它邮箱客户端,"随心邮"的实用性.便捷性更强在无需进行客户端&服务器等设置.无需下载邮箱APP

Kindle 推送教程:教你用电子邮箱推送电子书

Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务",我们只需要一个亚马逊账号,就可以通过以电子邮箱发送附件的方式,免费把 Kindle 所支持的文档或电子书推送到亚马逊提供的个人文档云存储中.当云端接收到了你推送的文档,将会自动转换格式(比如你推送的是 txt 格式会转换成 azw 格式)并同步到与此账号绑定的 Kindle 设备中. 目录 一.K

服务器接口状态监控,异常报警到电子邮箱。

使用HTTP URL,发送请求并接收服务器接口响应消息,如5分钟内发生5次异常,则把异常信息发送到指定电子邮箱中:指定时间内异常未达到5次则清零. 1,Http Post package m; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpU

申请电子邮箱注册步骤,电子邮件账号申请详解

电子邮箱不在多,好用则灵:申请电子邮箱怎么做?问我则行!今天小编就带大家一起探索一下,如何申请电子邮箱一. 找到登陆页面一般而言,注册页都在邮箱登陆页面,找到了登陆页,也就找到了邮箱注册页.找登陆页面方法很多,如:输入网址.百度搜索.网址大全里找.网站内浏览等二. 找到注册入口注册入口一般在登录界面的下方,点击"立即注册"即可开始注册 三. 选择套餐及使用年限套餐不同,可使用的功能权限是不一样的,按照自己的需求进行选择就可以了,另外,需要选择使用年限. 四. 设置个人信息电子邮件的用户

如何进行电子邮箱申请(mail163),入门一分钟,终身受益

通讯产品充斥着我们工作.生活的每个细节中,以在工作中扮演重要角色的电子邮箱为例,如何申请一个更高效的邮箱成为重中之重,小编则用1分钟教会大家该如何去申请及使用邮箱. 第一步. 首先我们搜索到高效邮箱品牌的代表<TOM VIP邮箱> 第二步.进入<TOM VIP邮箱>官网,根据免费邮箱.VIP邮箱.企业邮箱.随心邮提示,进行选择,以TOM VIP邮箱为例 选择"立即注册"按钮,进入注册界面(若有VIP邮箱账号可直接输入账号密码,在线登陆) 第三步.根据套餐进行选择

教你怎么写电子邮箱格式?以163和QQ邮箱为例

电子邮箱格式怎么写,不少开始接触邮件的朋友经常问这样的问题,其实写邮件很简单,现在用的最多的是网易163邮箱和QQ邮箱.新浪邮箱,下面做下演示操作,教你怎么写电子邮箱格式.电子邮箱的格式通常为:.其中username为用户名(邮箱帐户名),"@"后面的是域名.如腾讯的邮箱格式一般为:(xxxx为QQ号码).电子邮箱格式中的@符号是同时按shift+数字键2打出来的.刚用电脑的朋友可能一下不知道.下面本文中就简单的说下网易163和QQ邮箱的格式怎么写,怎么发邮件,其它电子邮件方法也与此类

【方法】Oracle用户密码含特殊字符时的登陆问题

[方法]Oracle用户密码含特殊字符时的登陆问题 1.1  BLOG文档结构图 1.2.2  相关文章链接 [密码]Oracle用户密码系列:http://blog.itpub.net/26736162/viewspace-2129595/ ------------------------------------------------------------------------- 第二章 实验部分 2.1  实验环境介绍 项目 source db db 类型 RAC db version