写点什么

第四次作业

用户头像
Geek_9cf7b5
关注
发布于: 2021 年 05 月 23 日

1.背景

目前国内有高等学校 2688,假设每个学生平均一学期 20 门课,每门考试 20 判断题、20 选择题、4 道大题。命题作业设计考试试卷使用 Redis sentinel 设计存储方案。

2.数据估算

UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节

20 判断题(200 字)

20 选择题(200 字)

4 道大题(2000 字)

存储体积:(20*200+20*200+4*2000)*20*2688*3*2 ≈5G(2580480KB),每年的试卷存储量最大值约为 5G

请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒

3.数据结构设计

例子:北京大学外语系翻译专业日语 I

北京打学->学校 ID

外语系->院系 ID

翻译专业->专业 ID

日语 I->课程 ID

Redis 是 key-value 型的数据数据库

每个数据的 key 命名为:学校 ID+院系 ID+专业 ID+课程 ID

value:实际一个课程的试卷的编写它是非线性的,而且试卷不需要排序,因此没有必要使用 set sorted set 和 list,因此使用 hash 来对数据进行打包分类,其中试卷序号为 field,试题内容为 value

4.读写流程

写入

1.登录系统

2.选取学校->院系->专业->课程

3.进入录入试卷题目

4.因为给定了 20+20+4 的试题构成模型,因此前端根据模型生成对应的对象传输到后端

5.后端服务根据模型提取数据,存入 redis 中

读取

1.登录系统

2.选取学校->院系->专业->课程

3.前端选取加载部分传入后端

4.利用 hash 类型的自身的 key->value 特性,后端可以全量或者部分拉取试卷题目


之前考虑使用 redis 的 String 类型,利用(学校 id:院系 id:专业 id:考试 id:实体序号)方式来进行 key 命名,利用 redis 对于:命名来进行试卷分类管理,后面考虑到单次单试卷题目的访问就会需要向 redis 请求 44 次,因此放弃这种做法。

5.服务器数量和性能

官方给予的性能评估图来看,单个 Redis 的性能约为 5-11 万 QPS。

数据估算请求试卷的 QPS 约为 5 万,因此一台 Redis 就足够了。

首先使用 1 主 2 从,然后为防止 master 宕机使用 Redis sentinel 部署保证 master 机,即 1 主 2 从+3 哨兵即 6 台机器。


参考:http://www.redis.cn/topics/benchmarks.html

发布于: 2021 年 05 月 23 日阅读数: 22
用户头像

Geek_9cf7b5

关注

还未添加个人签名 2019.01.23 加入

还未添加个人简介

评论

发布
暂无评论
第四次作业