第三部分
3.1 场景描述
这个部分我自己想了个应用场景,把Redis用起来。否则都纸上谈兵了。
先描述下应用, 有10w左右的用户,有活跃用户3万左右。 每个用户有
自选股1~10个. 每个用户关注股票价格1~10个。 系统会定期30分钟
向用户汇报一下价格。 如果股票超过用户关注的价格后,也会发送报告
给用户。
3.2 原数据库结构
标准的ER设计表结构
用户表
1. 用户表(user_tb)
序号 |
字段名 |
类型 |
是否必须 |
说明 |
1 |
ID |
Number(10) |
否 |
100万开始,自增长 |
2 |
userName |
Varchar2(32) |
是 |
用户名(openid),用于登录,唯一 |
3 |
userPwd |
Varchar2(32) |
是 |
密码,现在不用 |
3 |
WxName |
Varchar2(32) |
否 |
微信号 |
4 |
ShowName |
Varchar2(32) |
否 |
昵称 |
5 |
Mobile |
Varchar2(11) |
否 |
手机 |
6 |
Name |
Varchar2(32) |
否 |
姓名 |
7 |
ID_Number |
Varchar2(32) |
否 |
身份证 |
8 |
SystemType |
Varchar2(10) |
是 |
业务系统类型 |
9 |
userLevel |
Number(2) |
是 |
用户级别 |
10 |
userRegTime |
Varchar2(10) |
是 |
用户注册时间 |
11 |
userRegDate |
Varchar2(10) |
是 |
用户注册日期 |
12 |
userLastDt |
Varchar2(32) |
是 |
用户最后使用时间 |
13 |
PwdEncode |
Number(1) |
是 |
0 未加密 |
14 |
userLastMsgDate |
Varchar2(10) |
是 |
用户消息日期 |
15 |
userLastMsgTime |
Varchar2(10) |
是 |
用户消息时间 |
|
|
|
|
|
1. 用户股票关注表(userStocks_tb)
区分当前表,年表
序号 |
字段名 |
类型 |
是否必须 |
说明 |
1 |
ID |
Number(10) |
否 |
100万开始,自增长 |
2 |
userName |
Varchar2(32) |
是 |
用户名(openid),用于登录 |
3 |
stockCode |
Varchar2(10) |
是 |
股票代码 |
4 |
marketType |
Varchar2(3) |
否 |
市场 |
5 |
userLastDate |
Varchar2(10) |
是 |
用户关注日期 |
6 |
userLastTime |
Varchar2(10) |
是 |
用户关注时间 |
7 |
MoveDate |
Varchar2(10) |
否 |
迁移到历史库的时间 |
|
|
|
|
|
1. 用户价格监控表(userPrice_tb)
区分当前表,年表
序号 |
字段名 |
类型 |
是否必须 |
说明 |
1 |
ID |
Number(10) |
否 |
100万开始,自增长 |
2 |
userName |
Varchar2(32) |
是 |
用户名(openid),用于登录 |
3 |
stockCode |
Varchar2(10) |
是 |
股票代码 |
4 |
Price |
Number(5.3) |
是 |
价格 |
5 |
PriceFlag |
Number(2) |
是 |
价格上下,1或-1 |
6 |
marketType |
Varchar2(3) |
否 |
市场 |
7 |
userLastDate |
Varchar2(10) |
是 |
用户关注日期 |
8 |
userLastTime |
Varchar2(10) |
是 |
用户关注时间 |
9 |
MoveDate |
Varchar2(10) |
否 |
迁移到历史库的日期 |
10 |
Movetype |
Number(1) |
否 |
1.监控触发 2.到期 |
|
|
|
|
|
|
|
|
|
|
关系图
其它表结构就不写了,由于Redis是NoSql 的结构。我们对这种经典的表结构,进行转换,转换成Redis的数据结构。
3.3 Redis数据库数据设计
String 数据清单
系统流水ID:
Seq:DataID 100000起步 自增
Seq:LogID 100000起步 自增
配置常量
Systemcfg:Auto 1
Systemcfg:DataPath “E:\run”
Hash 数据清单
User: $username $username 是个变量(以下类同),用户名, 主键。
字段(值对)为 user_tb
User_StockList:$Userid:$Stock
字段(值对)为 userStocks_tb
User_StockPrice:$UserName:$stock
字段(值对)为userstockPrice_tb
Set 数据清单
User_Stock:$UserName , 类型为Set 用户关注的股票
User_StockPrice:$UserName 类型为Set 用户关注的股票价格
3.4 业务场景模拟测试
根据实际的业务情况,10万用户,3万活跃用户及用户各种业务的频率分析。
系统会在一秒内访问数据库 200 次左右(查询用户,查询关注,查询股票等等),
业务场景组合每秒执行2次。
按照这种场景用java + jedis 编写了一个性能程序程序测试性能。
测试结果:
耗时:100毫秒 一次组合业务
性能:142次/秒
PC性能:i5-5200 8G ,
单从数据库访问角度,用我的PC做为数据库服务器
现在的业务程度,还有 70 倍的空间。
下一篇, 我想研究一下,怎么做集群。 欢迎探讨