系统架构设计师-案例分析-数据库系统设计

news2026/4/1 20:03:21
系统架构设计师-案例分析-数据库系统设计ORM技术数据库类型比较缓存技术RedisMemCache分布式锁规范化反规范化技术并发控制封锁协议分布式数据库数据分片数据仓库ORM技术ORMObject-Relational Mapping它在关系型数据库和对象之间作一个映射在具体操作数据库的时候就不需要再去和复杂的SQL语句打交道只需像操作对象一样即可。ORM把数据库映射成对象。如数据库的表——》类记录——》对象字段——》对象的属性ORM的优点使用ORM可以大大降低学习和开发成本程序员不用再写SQL来进行数据库操作减少程序的代码量降低由于SQL代码质量差而带来的影响。ORM的缺点不太容易处理复杂查询语句性能较直接用SQL差。数据库类型比较关系数据库模块与NoSQL模式的特征对比特征关系数据库模式NoSQL模式并发支持支持并发、效率低并发性能高存储与查询关系表方式存储、SQL查询海量数据存储、查询效率高扩展方式向上扩展向外扩展索引方式B树、哈希等键值索引应用领域面向通用领域特定应用领域数据一致性实时一致性弱一致性数据类型结构化数据非结构化事务高事务性弱事务性水平扩展弱强数据容量有限数据海量数据内存数据库与关系型数据库的对比主要数据模型读写性能存储容量可靠性内存数据库键-值对模式内存直接读写性能相对较高基于内存存储存储容量受限恢复机制复杂可靠性较低关系型数据库关系模式外村读写性能相对较低基于存盘存储存储容量大内建恢复机制可靠性较高关系型数据库与文件系统的对比设计难度数据冗余程度数据架构应用扩展性关系型数据库针对特定应用系统设计难度较大遵守数据库范式数据冗余较小以数据库为中心组织管理数据数据库独立于应用系统数据库系统接口标准化易于在不同应用之间共享数据文件系统针对特定应用系统设计难度较小可能在多个文件中复制相同的数据属性数据冗余较大以应用为中心管理数据符合特定应用系统要求的文件数据很难在不同的应用系统之间共享缓存技术RedisRedis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库并提供多种语言的API。Redis数据类型表数据类型存储的值说明应用场景string字符串、整数或浮点数基本类型可用于缓存层、计数器、共享用户Session、分布式锁、分布式系统的全局序列号等。list列表字符串列表可以模拟栈、队列等形式栈、队列、阻塞队列、最新列表等如回复评论、点赞、粉丝列表set无序集合每个值不能重复用户标签、好友/关注/粉丝/感兴趣的人集合、随机展示、黑/白名单、抽奖小程序等hash包括键值对的无序散列表key-value对的一种集合特别适合用于存储对象存储对象、电商购物车等zset有序集合每个元素有一个分数排名如推荐排名前10的热门帖子MemCacheMemCache是一个高性能的分布式的内存对象缓存系统用于动态Web应用以减轻数据库负担。MemCache通过在内存里维护一个统一的巨大的Hash表它能够用来存储各种格式的数据包括图像、视频、文件以及数据库检索的结果等。Redis与MemCache的差异数据类型方面。Redis和Memcache都是将数据存放在内存中都是内存数据库。他们都支持键值对数据类型。同时MemCache还可以用于缓存其他东西如图片、视频等Redis还支持List、Set、Hash等数据结构的存储内存管理机制方面。在Redis中并不是所有的数据都一直存储在内存中的这是和MemCache相比一个最大的区别。当物理内存用完时Redis可以将一些很久没用到的Value交换到磁盘。而在MamCache中数据都是缓存在内存中。数据持久化方面。Redis支持内存数据的持久化而且提供两种主要的持久化策略RDB快照和AOF日志。MemCache不支持数据持久化操作。Redis支持数据的备份即master-slave模式的数据备份。Memcache宕机后数据不可恢复Redis数据丢失后可以通过AOF恢复。Redis与MamCache能力比较特征RedisMemcache数据类型丰富的数据结构简单key/value结构持久化支持不支持分布式存储多种方式主从、哨兵、Cluster等客户端哈希分片/一致性哈希分片多线程支持不支持支持内存管理无私有内存池/内存池事务支持有限支持不支持缓存中的常见问题缓存击穿在高并发访问下被频繁访问的数据项在缓存中失效时大量的并发请求会直接涌入后端存储数据库上导致数据负载增大。缓存可以通过使用互斥锁、分布式锁、热点数据预加载等方式来避免雪崩是指缓存层整体失效导致大量请求涌入后端。雪崩问题可以通过设置不同的过期时间、使用多个独立的缓存集群等来避免。缓存穿透请求查询体格不存在于缓存和数据库中的键。缓存穿透可以使用布隆过滤器来判断请求的键是否有效从而减轻数据库压力。分布式锁分布式锁是是一种在分布式系统环境下通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据从而避免数据的不一致性。实现分布式锁的方式使用MySQL基于唯一索引使用ZooKeeper基于临时有序节点使用Redis基于setnx命令。解决死锁的策略设置锁的超时时间、使用Redlock算法、引入锁的等级、使用一致性哈希算法以及使用锁粒度更小的方式等。规范化不规范化带来的四大问题数据冗余数据被重复存储。修改异常修改导致数据不一致。插入异常删除异常删除了不该删除的数据。反规范化技术规范化设计后数据库设计者希望牺牲部分规范化来提高性能这种从规范化设计的回退方法称为反规范化技术。采用反规范化技术的益处降低连接操作的需求、降低外键和索引的数目还可能减少表的数目能够提高查询效率。可能带来的问题数据的重复存储浪费磁盘空间数据的完整性问题为了保障数据的一致性增加了数据维护的复杂性会降低修改速度增加冗余列在多个表中保留相同的列通过增加数据冗余减少或避免查询时的连接操作。增加派生列在表中增加可以由本表或其他表中数据计算生成的列减少查询的连接操作并避免计算或使用集合函数。重新组表如果许多用户需要查看两个表连接出来的结果数据则把这两个表重新组成一个表来减少连接而提高性能。水平分割表根据一列或多列数据的值把数据放到多个独立的表中主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。垂直分割表对表进行分割将主键与部分列放到一个表中主键与其他列放到另一个表中在查询时减少I/O次数。并发控制并发操作就是在多用户系统中可能出现多个事务同时操作同一数据的情况。并发操作会导致3种数据不一致问题。丢失更新当两个事务T1和T2读入同一数据做修改并发执行时T1把T2或T2把T1的修改结果覆盖掉造成了数据的丢失更新问题导致数据不一致。不可重复读事务T1读取了数据R事务T2读取并更新了数据R。当事务T1再读取数据R进行核对时得到的两次读取数据不一致。读脏数据事务T1更新了数据R事务T2读取了更新后的数据R事务T1由于某种原因被撤销进行了数据回滚数据R恢复原值事务T2读取了脏数据。造成以上3种数据不一致的主要原因就是事务的并发操作破坏了事务的隔离性。封锁协议并发控制的主要技术是封锁Lock技术。两种封锁协议基本封锁类型特点排他锁X锁事务T对数据A加X锁1只允许事务T读取、修改数据A2只有等该锁解除之后其他事务才能够对数据A加任何锁类型。共享锁S锁解决了X锁太严格不允许其他事务并发读的问题。事务T对数据A加S锁则1只允许事务T读取数据A但不能够修改2可允许其他事务对其加S锁但不允许加X锁。加锁遵循一个基本原则如果该事务只读数据就只加读锁如果该事务要写数据就加写锁。分布式数据库分布式数据库是由一组数据组成的这组数据分布在计算机网络的不同计算机上网络中的每个节点具有独立处理的能力它可以执行局部应用同时每个节点也能通过网络通信子系统执行全局应用。分布式数据库系统是在集中式数据库技术的基础上发展起来的。特点数据独立性。集中与自治共享结合的控制结构。适当增加数据冗余度全局一致性、可串行性和可恢复性分布式数据库的优点分布式数据库可以解决企业部门分散而数据需要相互联系的问题。如果企业需要增加新的相对自主的部门来扩充机构则分布式数据库可以在对当前机构影响最小的情况下进行扩充分布式数据库可以满足均衡负载的需要当企业已存在几个数据库系统而且实现全局应用的必要性增加时就可以由这些数据库自上而下构成分布式数据库系统相对规模的分布式数据库系统在出现故障的概率上不会比集中式数据库系统低但由于其故障的影响仅限于局部数据应用因此就整个系统来说它的可靠性是比较高的。数据分片数据分片将数据库整体逻辑结构分解为合适的逻辑单位然后由分布模式来定义片段及其副本在各场地的物理分布其主要目的是提高访问的局部性有利于按照用户的需求组织数据的分布和控制数据的冗余度。水平分片。水平分片将一个全局关系中元组分裂成多个子集每个子集为一个片段。分片条件由关系中的属性值表示。对于水平分片重构全局关系可通过关系的并操作实现。垂直分片。垂直分片将一个全局关系按属性分裂成多个子集应满足不相交性。对于垂直分片重构全局关系可通过连接运算实现。导出分片。导出分片又称为导出水平分片即水平分片的条件不是本关系属性的条件而是其他关系属性的条件。混合分片。混合分片就是在分片中采用水平分片和垂直分片两种形式的混合。分布透明性是指用户不必关心数据的逻辑分片不必关心数据存储的物理位置分配细节也不必关心局部场地上数据库的数据模型。分片透明性是分布透明性的最高层次它是指用户或应用程序只对全局关系进行操作而不必考虑数据的分片。位置透明。位置透明是指用户或应用程序应当了解分片情况但不必了解片段的存储场地。局部数据模型透明性。局部数据模型透明性是指用户或应用程序应当了解分片及各分片存储的场地但不必了解局部场地上使用的是何种数据模型。数据仓库数据仓库集成是把多种来源的数据集中在一起建立数据仓库所有数据都驻留在单个数据库服务器上配置大型处理器和存储容量。数据仓库主要用于决策支持在数据处理过程中强调分析。其特点是集成的数据、面向主题、数据相对稳定、包含历史信息数据仓库的结构通常包含四个层次数据源是数据仓库系统的基础是整个系统的数据源泉数据的存储与管理是整个数据仓库系统的核心OLAP联机分析处理服务器对分析需要的数据进行有效集成按多维模型组织以便进行多角度、多层次的分析并发现趋势。前端工具主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2469078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…