架构实战营模块 4 课后作业
设计千万级学生管理系统的考试试卷存储方案
1. 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构
数据结构可以是 Hash。 Key 是学生 ID+ 学期 ID。 Value 是 20 * 2 个考试的 List。
之所以 Value 可以是 List 是因为 List 总大小也只有 40K,可以一次读取。
2. 设计具体的读写流程
写流程:
学生上交考试后,服务器把考试变成一个 List Node, 找到学生 ID+ 学期 ID 为 Key 的这一栏,把这次考试加到 到 List 头。
老师批改考试后并提交后, 服务器找到学生 ID+ 学期 ID 为 Key 的这一栏,逐个搜索 List 每个考试,找到相应考试后,更新一下。
读流程:
查看学生某学期所有考试:
服务器找到学生 ID+ 学期 ID 为 Key 的这一栏, 返回整个 List.
查看学生某学期某科目考试:
服务器找到学生 ID+ 学期 ID 为 Key 的这一栏, 遍历 List, 找到这门科目的考试。
查看学生所有考试:
服务器实现找到这名学生所有学期,对每一个学生 ID+ 学期 ID 为 Key,找到考试 List,把所有 List 链接起来。
3. 计算 Redis sentinel 集群的服务器数量和性能
性能估算:
在校学生:2.4T
离校学生: 0.6T
请求试卷:5 万/每秒
提交试卷:1700/每秒。
事后查找试卷,假设不会集中一起查找,<1700/每秒。
Redis 一个 Node 可以接近 50-100K/s,所以部署一个 Node + 2 个 Slave 完全 就够了。
评论