采用 Redis 建立在线药品销售系统的数据库
人民网>>社会·法治

采用 Redis 建立在线药品销售系统的数据库

2025-06-24 12:40:05 | 来源:人民网
小字号

目录。

案例。

【说明】。

【问题1】(9分)。

【问题2】(9分)。

【问题3】(7 分)。

【答案】。

[问题1]答案。

[问题2]答案。

[问题3]答案。

相关推荐。


案例。

        阅读以下关于数据库设计的描述,回答问题 1 至问题 3 。

【说明】。

        某医药销售企业因业务发展󿀌需要建立在线药品销售系统󿼌除了传统的药品展示、订单、用户沟通和反馈功能外,该系统还为用户提供便捷的网络药品销售服务,还需要提供当前热销产品排名、评价分类管理等功能。
        通过对需求的分析,初步决定在数据管理中使用关系数据库(MySQL)实现与数据库缓存Redis的混合架构。
        标准化设计后,该系统的部分数据库表结构如下所示:
        供应商(供应商 ID,供应商名称󿀌联系方式󿀌供应商地址;
        药品(药品 ID,药品名称󿀌药品型号󿀌药品价格󿀌供应商 ID);
        药品库存(药品 ID,#xff1当前库存数量b;
        订单(订单号,药品 ID,供应商 ID,药物数量󿀌订单金额)。

【问题1】(9分)。

        系统初步运行后,发现系统数据访问性能较差。经分析,刘工认为原数据库标准化设计后,关系表太细分了,#xff0c;导致大量多表相关查询,影响性能。例如,当用户查询商品信息时,#xff00c;药品信息、供应商信息、当前库存等信息需要同时显示。
        所以,刘工认为,药物关系的结构࿰可以通过反标准化设计来改变c;提高查询性能。修改后的药物关系结构为:。
        药品(药品 ID,药品名称󿀌药品型号󿀌药品价格󿀌供应商 ID,供应商名称󿀌当前库存数量);        。
        请用 200 文字内的文字描述了常见的反标准化设计方法,并说明用户在查询商品信息时应采用哪种反标准化设计方法。

【问题2】(9分)。

        王工认为󿀌反标准化设计可以提高查询性能,但必然会导致数据的不一致性。请用200 反标准化设计中࿰中文字内的文字描述c;三种常见的解决数据不一致问题的方法,并说明系统应该采用哪种方法。

【问题3】(7 分)。

        该系统已被采用 Redis 实现某些特定功能(如当前热销药品排名等),同时,将药物关系数据放入内存,提高商品查询性能,但必然会导致Rediss 和 MySQL 数据实时同步问题。
        (1)Redis Stringg的数据类型包括、Hash、List、Set 和ZSet 等待,请说明实现当前热销药品排名的功能应选择使用哪种数据类型。
        (2)请用 解释200字以内的文字解释 Redis 和 MySQL 常见的数据实时同步问题方案。

【答案】。

[问题1]答案。

        常见的反标准化设计方法:

        (1)增加冗余列:在多个表中保留相同的列,通过增加数据冗余来减少或避免查询时的连接操作。
        (2)增加衍生列:可由本表或其他表中的数据计算在表中添加的列,减少查询过程中的连接操作,避免计算或使用集合函数。
        (3)重组表:如果许多用户需要查看连接到两个表的结果数据,将这两个表重新组成一个表,以减少连接,提高性能。
        (4)水平分割表:根据一列或多列数据的值,将数据放入多个独立的表中,主要用于表数据规模大、表中数据相对独立或需要存储在多个介质上的数据。
        (5)垂直分割表:分割表格,将主键和部分放在一个表中,将主键和其他列放在另一个表中,查询时减少I/0次数。

        用户使用增加冗余列的技术查询商品信息。

[问题2]答案。

        针对反标准化数据不一致问题󿀌可用的解决方案包括:
        1.触发器数据同步:对数据的任何修改都会立即触发复制列或衍生列的相应修改。触发器是实时,并且相应的处理逻辑只出现在一个地方,易于维护。一般来说,,是解决这类问题的好办法。
        2.应用程序数据同步:所有涉及的表格必须在同一事务中添加、删除和更改。利用应用逻辑实现数据的完整性风险较大,因为同一逻辑必须在所有应用程序中使用和维护,容易遗漏󿀌特别是当需求发生变化时,#xff0c;不易维护。
        3.批处理同步:指在修改复制列或衍生列并积累一定时间后,一批处理操作或存储过程修改复制或衍生列,这只能在对实时性要求不高的情况下使用。
        本系统应采用 应用程序数据同步(或触发器数据同步),两个都行。

[问题3]答案。

        版本1:

        。(1)ZSet。
        (2)读取数据时,先读取Redis中的key,如果您阅读并未失效,请返回key对应的数据;如果读不到,或者key失效,读取数据库,同步Redis;在编写数据时,首先编写数据库c;并设置与Redis对应的key故障或删除Redis中的数据。

        版本2:

        (1)ZSet。

        (2)常见方案如下:
        1.实时同步方案󿀌先检查缓存󿀌找不到再从DB查询#xff00c;并保存到缓存;更新缓存时,首先更新数据库,然后设置缓存过期。
        2.同步异步队列方式󿀌可采用消息中间件处理。
        3.数据同步通过数据库插件完成。
        4.使用触发器缓存同步。

        注:这个问题可以选择󿀌但只能拿低分,只有一个问题是肯定的,问题二、三要看缘分,整体可能只能得到 10-12 分左右。        。

相关推荐。

采用 Redis+数据库为一家互联网文化公司建立了一个在线社区平台——CSDN博客。浏览文章2.4k次󿀌点赞99次󿀌收藏90次。本文对某互联网文化发展公司采用Redis+进行了探讨;构建在线社区平台的数据库解决方案#xff0c;分析了Redis数据类型与平台功能的对应关系,例如,STRING用于评论计数器,LIST用于粉丝列表等。然后,RedisRDB和AOF的持久性方式࿰从磁盘更新频率、数据安全性、数据一致性、重启性能和数据文件大小等方面进行了比较c;并解释了为什么选择RDB。最后,在Redis缓存管理中讨论了“定期删除+惰性删除策略失效及应对策略,包括各种内存淘汰机制。_(a)用户帖子的评论计数器;(b)支持粉丝列表功能;(c)支持标签管理;(d)支持共同好友。https://shuaici.blog.csdn.net/article/details/142211259。深入分析包裹信息管理系统:关系数据库逻辑数据模型设计,超级实体与派生属性讨论-CSDN博客。浏览阅读文章1.3k次󿀌点赞78次󿀌收藏69次。本文探讨了关系数据库开发中逻辑数据模型的设计过程,以包裹信息管理系统为例c;逻辑数据模型构建的任务࿰详细分析c;包括构建系统上下文模型、添加关键属性、非关键属性和标准化处理。同时,引入超类实体的概念,对具有类似属性的实体进行抽象。另外,还讨论了衍生属性的识别和消除,提高数据库设计的优化程度。https://shuaici.blog.csdn.net/article/details/142182019。2019年系统架构师案例分析试题4-CSDN博客。浏览阅读文章1.4k次󿀌点赞73次󿀌收藏48次。双写不一致的问题,写数据时,缓存写成功可能存在#xff0c;数据库写作失败#xff00c;或者相反,󿀌导致数据不一致。读写冲突的并发问题也可能发生在多个请求发生时。 (a)从数据库中读取数据或读取数据库; (b)更新缓存中 key 或更新缓存; (c)数据库; (d)删除缓存 key 或使缓存 key 缓存失效或更新(key 值)。_2019 年度系统架构师。https://shuaici.blog.csdn.net/article/details/142059273。

(责编:人民网)

分享让更多人看到