帐户系统设计

背景:前端

    最近在作B端系统的帐户系统,数据量大概在2亿左右,表设计以下,其中分了8张表,其中分了帐户信息主表,帐户绑定手机表,帐户绑定邮箱表,帐户绑定c端帐号表,帐号绑定用户名表,以及帐户的扩展信息表,其中以上都是分了8片,其中分片字段以下:mysql

分片字段
帐户信息主表 uid
帐户绑定手机表 手机号
帐户绑定邮箱表 邮箱
帐号绑定c端帐号表 c端帐号uid
帐号绑定用户名表 用户名
帐户我的扩展信息表 uid

 

设计:redis

    1.其中手机号时国家码和手机号是分开的算法

帐户信息主表包括帐户的企业系统等标识,帐户名,密码,帐户状态,密码标识(用于首次注册是否须要强制改密码的标识),用户绑定信息的jsonsql

帐户绑定手机号表,帐户绑定邮箱表,帐户绑定用户名表 ,这三张表是为了登陆,可经过手机,邮箱,用户名登陆,获取uidjson

帐户我的扩展信息表,包含用户的手机号,邮箱,性别,昵称,头像,微信号,身份证号,身份证有效期等信息安全

手机分红三种,绑定手机,安全手机,扩展手机。(安全手机用于注册,重置密码,一个用户可对应多个安全手机,相似于iphone的官网)微信

 

    2.其中uid的生成:cookie

    使用mysql的主键生成策略加上前缀来标识,单独的建张表用于uid生成,由于数据量很大,就不必都新增,都是先删除后新增,添加事务session

 

    3.服务分红三块,注册一个服务,登陆一个服务,用户session是一个服务,帐户管理功能在注册服务中。包含如下业务场景

注册及帐户管理相关接口:

预注册: 发送注册连接到手机或者邮箱(生成短连接,连接有过时时间,存在redis中)

注册:手机、邮箱,帐户名注册方式

改绑手机:绑定手机,改绑手机,解绑手机

改绑邮箱:绑定邮箱,改绑邮箱,解绑邮箱

改绑安全手机:新增、删除(帐户安全手机表是uid来分区的,并且是多对多的关系,因此不存在改绑逻辑)

改绑C端帐号:绑定,改绑和解绑(前端控制是否须要绑定C端帐号,灵活配置)

修改密码:登陆状态下修改(从登录的cookie中获取用户id进行修改)

重置密码:首次注册可配置成是否须要重置密码

发送手机验证码:向手机发送验证码

验证手机验证码: 根据返回的手机验证码获取到token(该token可换取手机号)

注销帐户:删除帐户绑定信息,扩展信息,而且存入到注销备份表中,便于之后查看数据

修改我的扩展信息:包含用户头像昵称等等我的信息

带安全手机的注册:安全手机的方式注册

根据uid获取帐户信息:帐户信息

手机号查询用户信息:

邮箱查询用户信息:

uid查询用户扩展信息:

 

 

登陆相关接口:

帐户登陆:手机验证码登陆,邮箱验证码登陆,密码登陆,返回token

登陆:根据返回的token进行登陆

校验帐户密码:密码校验

 

帐户session相关:

建立session:session和uid直接关系

获取session:获取session

获取session列表:

登出session:登出的清除session

 

 

4.在对接不一样系统的时候,作到不一样系统之间的数据隔离,所以在每一个分表中添加对应的系统id标识,作到好比帐户名是区分系统的,手机号也是区分系统的,邮箱也是区分系统的,这样保证了不一样系统对接进来的时候,就不会出现帐户名重复的状况,也符合实际状况(不一样系统存在帐户名重复的帐户状况)。

 

5.帐户名大小写问题:默认mysql是不区分大小写的,用的是mysql 5.6版本的

 

 

6.涉及到迁移其余帐户到该帐户系统时,如遇到密码算法不一样的,可添加新的密码存储表,将密码算法转换成本身的密码算法,作法是登陆到本系统时,校验老密码算法,若是知足,则去用新的加密算法加密密码存储到新的帐户系统密码中便可

 

7.帐户系统导入时,可能会遇到各类问题,好比数据不一样步(密码不一样步,更新了密码没有及时两边帐户系统都更新),清理帐户数据的job也颇有必要,根据时间段和具体的系统id来清理帐户数据。

相关文章
相关标签/搜索