【系统架构师-案例题-数据库设计】21年下(3)线上药品销售系统数据库设计
文章目录题目【说明】【问题1】(9分)【问题2】(9分)【问题3】(7分)答案与解答【问题1】答案解答【问题2】答案解答【问题3】答案解答补充知识点速记1. 反规范化核心要点2. Redis核心数据类型适用场景3. 双写一致性方案对比题目【说明】某医药销售企业因业务发展需要建立线上药品销售系统为用户提供便捷的互联网药品销售服务。该系统除了常规药品展示、订单、用户交流与反馈功能外还需要提供当前热销产品排名、评价分类管理等功能。通过对需求的分析在数据管理上初步决定采用关系数据库MySQL和数据库缓存Redis的混合架构实现。经过规范化设计之后该系统的部分数据库表结构如下所示。供应商供应商ID供应商名称联系方式供应商地址药品药品ID药品名称药品型号药品价格供应商ID药品库存药品ID当前库存数量订单订单号码药品ID供应商ID药品数量订单金额。【问题1】(9分)在系统初步运行后发现系统数据访问性能较差。经过分析刘工认为原来数据库规范化设计后关系访问性能表过于细分造成了大量的多表关联查询影响了性能。例如当用户查询商品信息时需要同时显示该药品的信息、供应商的信息、当前库存等信息。为此刘工认为可以采用反规范化设计来改造药品关系的结构以提高查询性能。修改后的药品关系结构为药品药品ID药品名称药品型号药品价格供应商ID供应商名称当前库存数量请用200字以内的文字说明常见的反规范化设计方法并说明用户查询商品信息应该采用哪种反规范化设计方法。【问题2】(9分)王工认为反规范化设计可提高查询的性能但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中解决数据不一致性问题的三种常见方法并说明该系统应该采用哪种方法。【问题3】(7分)该系统采用了Redis来实现某些特定功能如当前热销药品排名等同时将药品关系数据放到内存以提高商品查询的性能但必然会造成Redis和MySQL的数据实时同步问题。1Redis的数据类型包括String、Hash、List、Set和ZSet等请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。2请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。答案与解答【问题1】答案常见的反规范化设计方法包括增加冗余列在多表中添加相同列避免查询时的多表关联操作提升查询效率。增加派生列添加可由表中其他数据计算生成的列减少查询时的计算开销。重新组表将频繁关联查询的多张表合并为一张表彻底消除关联操作。分割表分为水平分割按行拆分和垂直分割按列拆分优化单表查询性能。用户查询商品信息应采用增加冗余列的方法。解答用户查询商品信息时需要同时获取药品、供应商、库存三张表的信息多表关联会严重影响查询性能。通过在药品表中冗余供应商名称、当前库存量等字段可将多表关联查询转为单表查询以空间换时间大幅提升查询性能因此选择增加冗余列。【问题2】答案解决反规范化数据不一致性的三种常见方法触发器数据同步在源表创建触发器数据变更时自动同步更新冗余数据。应用程序数据同步在业务代码中统一维护更新源数据时同步修改冗余数据。批处理同步定时执行批量任务定期同步冗余数据保证最终一致性。该系统应采用应用程序数据同步或触发器数据同步。解答该系统为线上交易系统对数据一致性和实时性要求高。应用程序同步可控性强是互联网系统主流方案触发器同步对业务无侵入、实时性强两种方案均可保证数据实时一致。批处理同步仅能保证最终一致性无法满足线上业务的实时性要求因此不适用。【问题3】答案1热销药品排名应选择ZSet有序集合/Sorted Set数据类型。2Redis与MySQL数据实时同步的常见方案① 实时缓存同步查询优先查Redis未命中则查MySQL并回填缓存更新时先更新MySQL再主动更新/过期Redis缓存。② 异步队列同步通过消息中间件异步同步数据适用于实时性要求稍低的场景。③ 数据库触发器同步MySQL数据变更时通过触发器自动同步到Redis。④ 数据库插件同步通过Canal等工具订阅MySQL binlog自动同步到Redis。解答1ZSet自带按权重排序、去重的特性可直接以销量/热度为权重高效实现药品排名、Top N查询完美匹配热销榜场景。2实时缓存同步是线上业务最常用的方案兼顾性能和一致性其他方案可根据业务实时性要求灵活选择。补充知识点速记1. 反规范化核心要点方法核心作用适用场景增加冗余列消除多表关联读多写少、频繁关联查询场景增加派生列减少查询计算量需频繁计算统计值的场景重新组表彻底消除关联多表数据高频一起查询的场景分割表优化单表查询性能表数据量极大、冷热数据分离场景2. Redis核心数据类型适用场景数据类型核心特点适用场景String通用二进制存储缓存、计数、Session共享Hash键值对结构存储用户/商品等对象属性List双向链表、有序消息队列、最新动态列表Set无序去重、支持集合运算标签、共同好友、独立IP统计ZSet有序去重、按权重排序排行榜、热门榜单、延时队列3. 双写一致性方案对比方案实时性侵入性适用场景应用同步高高互联网线上业务触发器同步高低对业务代码无侵入的场景异步队列同步中中实时性要求一般的场景Canal同步高低大数据同步、多缓存同步场景