写点什么

架构实战营 - 模块 4 作业

作者:无名
  • 2021 年 11 月 19 日
  • 本文字数:768 字

    阅读完需:约 3 分钟

设计千万级学生管理系统的考试试卷存储方案

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。

• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。

• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。

【提示】

1. 性能可以有一定冗余。

2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel


方案 1 - String

  1. Key: 学校 ID + 学科 ID + 年级 ID +考试类型 ID + 年 + 版本号

  2. Value:选择 String,为 JSON 格式


具体方案:

  1. 新增试卷:需要判断 Key 是否存在,不存在则尾部追加。

  2. 修改试卷:通过 Key 读取试卷,通 JSON 字符串解析成对象,对象修改后再转化为 JSON 字符串覆盖原来的 value 保存。

  3. 删除试卷:通过 Key 删除试卷

  4. 读取试卷:通过 Key 读取 value(JSON 字符串),通过 JSON 字符串解析成对象


方案分析:

修改试卷需要将大串的 JSON 字符串解析成对象,而对象里包括了单选题,多选题,大题,如果只是修改其中一项,也会全部修改。另外解析长字符串 JSON 也相当消耗性能。


方案 2 - Hash

  1. Key: 学校 ID + 学科 ID + 年级 ID + 考试类型 ID + 年 + 版本号

  2. Filed:字段: 单选题,多选题,大题,答案

  3. Value:JSON 格式


具体方案:

  1. 新增试卷:需要判断 Key 是否存在,不存在则尾部追加。

  2. 修改试卷:通过 Key 读取试卷,将单选题,多选题,大题分别用 JSON 字符串解析成对象,对象修改后再转化为 JSON 字符串,覆盖原来需要修改的 Field。

  3. 删除试卷:通过 Key 删除试卷

  4. 读取试卷:通过 Key 读取试卷,将单选题,多选题,大题分别用 JSON 字符串解析成对象


方案分析:

通过 Field 拆分每 JSON 字符串,这样 JSON 解析的性能得到部分提升。



性能分析:

写性能:TPS 5 万 ,一台写服务器

读性能:TPS 10 万,两台读服务器


用户头像

无名

关注

还未添加个人签名 2018.03.14 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 模块4作业