欢迎光临
我们一直在努力

【架构专栏】第6章 数据库设计基础知识 4/4

架构设计 相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


系统架构设计 相关文章:

【架构专栏】架构考试介绍

【架构专栏】架构知识点


知识总览

共19章内容,主要包括:

1)1绪论、2计算机系统、3信息系统、4信息安全技术、5软件工程

2)6数据库设计、7系统架构设计基础知识

3)8系统质量属性与架构评估、9软件可靠性、

10软件架构演化与维护、11未来信息综合技术

4)12信息系统架构设计、13层次式架构设计、14云原生架构设计、

15面向服务架构设计、16嵌入式系统架构设计、17通信系统架构设计、

18安全架构设计、19大数据架构设计

每天进步一点点,加油!小伙伴们!💪


本文学习 第6章 数据库设计基础知识,以下为个人笔记,希望有所帮助,共同学习。

包括:数据库基础概念、

           关系数据库、

           数据库设计、

           应用程序与数据库交互、

           NoSQL 数据库

           分布式数据库

           数据库优化技术

           分布式缓存技术 Redis

第6章 数据库设计基础知识

     本章节学习数据库基础概念、关系数据库、数据库设计、应用程序与数据库交互、NoSQL 数据库等内容。侧重于概念知识,知识点会涉及单选题(约占 2~5 分)和案例题(25 分),考查的知识点多源于教材,扩展内容较少。

6.1-6.2数据库基础概念、关系数据库

【架构专栏】第6章 数据库设计基础知识 1/4https://blog.csdn.net/weixin_42081167/article/details/164431496?spm=1001.2014.3001.5501https://blog.csdn.net/weixin_42081167/article/details/164431496?spm=1001.2014.3001.5501

6.3-6.4 数据库设计、应用程序与数据库交互

【架构专栏】第6章 数据库设计基础知识 2/4https://blog.csdn.net/weixin_42081167/article/details/164431527?spm=1001.2014.3001.5501https://blog.csdn.net/weixin_42081167/article/details/164431527?spm=1001.2014.3001.5501

6.5-6.6 NoSQL 数据库、分布式数据库

【架构专栏】第6章 数据库设计基础知识 3/4https://blog.csdn.net/weixin_42081167/article/details/164431654https://blog.csdn.net/weixin_42081167/article/details/164431654

6.7 数据库优化技术

6.7.1 集中式数据库

集中式数据库性能优化最常见的是:反规范化设计,主要包括增加冗余列、增加派生列、重新组 表、水平分割表、垂直分割表

(1)增加冗余列:是指在多个表中具有相同的列,用来在查询时避免连接操作

(2)增加派生列:指增加的列可以通过表中其他数据计算生成,作用是在查询时减少计算量,从而加快查询速度

(3)重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接,从而提高性能。

(4)水平分割表:按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、 表中数据相对独立或数据需要存放到多个介质上时使用

(5)垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其他列放到另一个 表中,在查询时减少 I/O 次数

反规范化设计的优点避免进行表之间的连接操作,从而可以提高数据操作的性能缺点:是会造成数据的重复存储,浪费了磁盘空间,会产生数据的不一致性问题。若要避免数据不一致的问题, 可以通过设置触发器、采用事务机制(适用于单体数据库中)、应用保证(适用于异构数据库之间) 以及批处理脚本的方式

例题:

1.反规范化:是指在()阶段有意地引入冗余,以提高数据库 的读性能。

   A.需求分析         B 概念结构设计     C.逻辑结构设计   D.物理结构设计

6.7.2 分布式数据库

分布式数据库的性能优化可以采用:主从复制、读写分离、分表、分库等技术。

1.主从复制

主从复制:是建立一个和主数据库完全一样的数据库环境,称为从数据库。好处是:

1)做数据的热备。作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作, 避免数据丢失。

2)架构的扩展。业务量越来越大,I/O 访问频率过高,单机无法满足,此时做多库的存储, 降低磁盘 I/O 访问的频率,提高单个机器的 I/O 性能。

3)读写分离。使数据库能支持更大的并发

在 MySQL 数据库中,主从数据库同步的模式全同步、半同步、异步三种方式。主从数据库之间通过 binlog(二进制日志)进行数据的同步

binlog 日志有 3 种模式

1)基于 SQL 语句的复制每一条更新的语句(insert、update、delete)都会记录在 binlog 中, 进而同步到从库的 relaylog 中,被从库的 SQL 线程取出来,回放执行

该模式的优点: binlog 的 日志量可能会比较少,比如一个涉及行数为 1000 行的 update 语句,同步这一个语句,就同步了 1000 行的数据。

缺点:同步的 SQL 语句里如果含有绑定本地变量的函数、关键字,可能造成主从不一 致的情况。比如 SQL 语句中有 time 函数,如果主从数据库的服务器时间不是精确相等,就会造成结果不一致。

2)基于行的复制:不记录 SQL 语句,只记录哪个记录更新前和更新后的数据,可以保证主从之间的数据绝对相同。缺点:1 条 SQL 更新 1000 行的数据无法再偷懒,必须原原本本同步 1000 行的数据量。

3)混合复制:以上两种模式的混合,选取两者的优点。对于有绑定本地特性、评估可能造成 主从不一致的 SQL 语句,则自动选用基于行的复制,其他的选择基于 SQL 语句的复制。

2.读写分离

读写分离:设置不同的主、从数据库分别负责不同的操作

(1)主数据库负责数据的操作

(2)从数据库负责数据的操作。

通过角色分担的策略,分别提升读写性能,有效减少数据并发操作的延迟

3.分表

分表也叫分片,可以提升数据库并发以及 I/O 的性能。分表重在单个实例内部, 将一张大表分成若干小表业务同时访问多个表。分表的方式有两种:垂直切分、水平切分

(1)垂直切分把一个大表切分为多个表,列不同。例如交易 ID、状态、用户、金额、商品等,作为一个热表;另外的 交易备注、物流信息等众多其他属性可作为另一个表。

(2)水平切分把一个大表分为多个表,列相同、行分开每个表都包含相同列。例如一个表包含的是交易 ID 从 1 到 999999 的交易数据,包含的是交易 ID 从 1000000 到 9999999 的交易另一个表。

4.分库

分库是:将原本存放在一个实例上众多分类的数据(表),分开存放到不同的实例上, 有利于差异化管理

例如,一个简单的电商网站,包括用户、商品、订单三个业务模块,可以将用户数据、商品数据、订单数据分开放到三台不同的数据库服务器上,而不是将所有数据都放在一台数据库服务器上。

例题:

     2. 分布式数据库系统除了包含集中式数据库系统的模式结构之外,还增加了几个模式级别,其中()定义分布式数据库中数据的整体逻辑结构,使得数据使用方便,如同没有分布一样。 A. 分片模式     B.全局外模式 C. 分布模式     D. 全局概念模式

答案:D

6.8 分布式缓存技术 Redis

6.8.1 基本概念

Redis 是一种分布式缓存技术,也是一种键值对数据库类型

Redis 用作缓存组件时,其基于内存的读写特性,比基于磁盘读写的数据库性能要高很多,适合缓存高频热点的数据, 来提高读性能降低对数据库服务器的查询请求,提高系统性能

Redis 以 key-value(键 值对)的形式为数据的保存格式。键(key)可以是一个字符串,值(value)可以是任意类型的数据,如整型、字符型、数组、列表、集合等。

例如:键值对:(“20231234”,“张三”),其 key:“20231234” 是该数据的唯一标识,而 value:“张三”是该数据实际存储的内容。

6.8.2 数据类型

Redis 支持的数据类型string 、hash 、set 、list 、zset 、pub/sub

(1)string 类型:是 Redis 基本类型。用于缓存层或计数器,如视频播放量、文章浏览量等。

(2)hash 类型:代替 string 类型,节省空间,描述用户信息较为方便。

(3)set 类型:无序集合,每个值不能重复。可用于去重、抽奖、初始化用户池等。

(4)list 类型:双向链表结构,可以模拟栈、队列等形式。可用于回复评论、点赞

(5)zset 类型:有序集合、每个元素有一个分数。如首页推荐 10 个最热门的帖子。

6.8.3 访问方式

引入 Redis 后,热点数据存放在 Redis 中,但由于存在“一份数据存放了多个位置”,所以要考虑数据的一致性问题

读写数据的基本步骤为:

(1)数据:

①根据 key 读缓存;

②读取成功则直接返回;

③若 key 不在缓存中,则根据 key 读数据库

④读取成功后,写缓存

⑤成功返回。

(2)数据:

①根据 key 值写数据库

②成功后更新缓存 key 值

③成功返回。

6.8.4 过期策略

在使用 Redis 时,一般会设置 Redis 缓存空间的大小不会让数据无限制地存放到 Redis 中, 对于设置了过期时间的数据可以采用两种方式去淘汰这些数据:

(1)定期删除。Redis 每隔一段时间就会抽取一些设置了过期时间的 key。这里的抽取是随机 进行的,因为无法对所有的 key 进行遍历,会给系统带来很大的负担。但是这样也会导致一些 key 到了过期时间也仍然没有被删除。

(2)惰性删除。查询 key 的时候 Redis 会对 key 进行检测,发现如果已经达到过期时间,则 删除。惰性删除的缺点是如果这些过期的 key 没有被访问,那么它们就一直无法被删除,而且一直 占用内存。

除了上述两种方式,Redis 又提供了一些淘汰机制,主要有:

 volatile-lru(最近最少使用):从已设置过期时间的 key 中,移出最近最少使用的 淘汰。

 volatile-lfu(最不经常使用):从 key 中选择最不经常使用的进行淘汰。

 volatile-random(随机淘汰算法):从已设置过期时间的 key 中随机选择 key 淘汰。

 volatile-ttl(生存时间淘汰):从已设置过期时间的 key 中,移出将要过期的 key。

 allkeys-lru:从所有 key 中选择最近最少使用的进行淘汰。

 allkeys-lfu:从所有 key 中选择最不经常使用的进行淘汰。

 allkeys-random:从所有 key 中随机选择 key 进行淘汰。

6.8.5 数据持久化

      在实际应用中,一旦服务器宕机,内存中的数据将全部丢失。一个解决方案是,从后端数据库恢复这些数据,但这种方式存在两个问题:

       一是,需要频繁访问数据库,会给数据库带来巨大的压力;

       二是,这些数据是从慢速数据库中读取出来的,性能肯定比不上从 Redis 中读取来得快,这会导致使用这些数据的应用程序响应变慢

       所以,对 Redis 实现数据的持久化,避免从后端数据库中进行恢复,是至关重要的。

6.8.6 缓存异常问题

      Redis 在提高数据查询效率保护数据库方面都起到了至关重要的作用,但是在实际应用中可能会出现 Redis 异常的情况,常见的异常问题与对应的解决方案:

(1)缓存穿透

      缓存穿透:大量请求访问了没有缓存的 key,即大量的 key 在 Redis 里是不存在的,导致请求直接访问数据库,数据库压力增大。可能的原因如下:

    1)恶意攻击,造成大量访问不存在的 key。例如登录时使用无效的用户名,在软考网站查询成绩时输入不存在的身份证号、准考证号。

      解决方案:

     ①针对比较少的请求来源 IP,主动限制其访问次数,或者拉入黑名单

     ②应用程序来检查 key 的合法性,提前拒绝不合法的请求

     ③使用布隆过滤器

    2)大量请求访问数据库里有但 Redis 没有的 key。如:新业务刚刚上线,Redis 是空的。

      解决方案:

     ①预热 Redis,运行一个批处理脚本,将可能会大量访问的数据预先加载到 Redis,业务再“开张”;

     ②最前端进行流量控制,逐步把请求释放进来。给一段时间,让 Redis 逐步加载热数据

     ③如果是在数据库里也没有的 key,也需要在 Redis 中设置 key,使其值为 null 或空

(2)缓存雪崩

      缓存雪崩:大量请求访问到缓存中的 key,这些 key 是存在的,但同时到了过期时间, 从而导致请求直接访问数据库,数据库压力增大缓存雪崩可能进而影响一系列的雪崩,影响到上下游的所有应用服务。可能的原因如下:

    1)Redis 故障,比如 Redis 宕机,网络出现抖动等。

     解决方案:

     ①使用主从复制提高可用性,使用 cluster 集群方案降低故障时影响的范围;

     ②如果出现故障,则可以采取服务降级、熔断、限流等措施。

     2)大量的 key 采用了相同的过期时间,例如在同一时刻设置了大量的 key,但过期时间都是 5 分钟

     解决方案:过期时间加上一个随机值,使得众多 key 均匀过期

(3)缓存击穿

     缓存击穿:少量热点的 key 缓存时间失效了,使得请求直接访问数据库

     可能的原因:热点的 key 设置了太短的过期时间。例如秒杀业务下的“库存数量”。

     解决方案:

      ①将 key 设置较长的过期时间。对于非常重要的 key,则设置永久有效。但需要解决好与数据库中的 key 的一致性问题;

      ②使用分布式锁。如果热点 key 失效了,要控制好访问后端数据库的流量只允许一个请求去访问数据库,取出最新的 key,存放到 Redis,其他请求则必须等待。但分布式锁也要防止出现异常的情况。

6.8.7 redis集群

      Redis 也可采用集群的方式部署,包括:主从复制集群、哨兵集群、Cluster 集群方式。

      集群切片的方式:主要分为客户端分片、代理分片、服务器端分片三种方式。

ok, 今天就到这里吧 🤗


相关系列文章,欢迎点赞、收藏,提供意见!

计算机系统基础知识 1分:概述、计算机硬件、计算机软件 操作系统 3分:进程管理、存储管理、文件管理、设备管理 数据库技术 3分:数据库设计、关系代数、范式、事务并发、数据库安全、新技术 嵌入式技术 3分:嵌入式硬件、嵌入式操作系统、嵌入式软件开发 计算机网络 3分(超纲较多):OSI七层模型、TCP/IP协议族、网络生命周期、IP地址 其他计算机系统基础知识 1分:计算机语言、多媒体、系统工程 系统性能 1分:性能指标、性能设计 信息系统基础知识 3分:信息系统生命周期、开发方法、五大典型系统 信息安全技术基础 5分:安全属性、信息安全技术、网络安全技术、安全协议

软件工程 12分:概述、需求工程、系统设计、运维、测试、基于构件;

面向对象技术 3分:面向对象基础、分析设计、UML关系、图 项目管理 1分:进度管理、配置管理、质量管理、风险管理

系统架构设计 20分:架构概念、生命周期、ABSD、DSSA、架构风格、

架构复用、质量属性、架构评估 软件可靠性 2分:可靠性建模、软件可靠性设计

软件架构的演化和维护1分:架构演化分类、评估、面向对象架构演化 未来信息综合技术 3分:信息物理系统、人工智能、边缘计算、机器人、数字李生、云计算 数学与经济管理 2分:最小生成树、最短路径、网络与最大流量、线性规划、决策论 知识产权和标准化 2分:知识产权属性、保护期限、产权人确定、侵权判定 专业英语 5分:完形填空,大学英语3级难度,自学

架构专栏 知识点

【架构专栏】架构考试介绍

【架构专栏】架构知识点

【架构专栏】第1章 绪论 【架构专栏】第11章 未来信息综合技术
【架构专栏】第2章 计算机基础知识 【架构专栏】第12章 信息系统架构设计理论与实践
【架构专栏】第3章 信息系统基础知识 【架构专栏】第13章 层次式架构设计理论与实践
【架构专栏】第4章 信息安全技术基础知识 【架构专栏】第14章 云原生架构设计理论与实践
【架构专栏】第5章 软件工程基础知识 【架构专栏】第15章 面向服务架构设计理论与实践
【架构专栏】第6章 数据库设计基础知识 【架构专栏】第16章 嵌入式系统架构设计理论与实践
【架构专栏】第7章 系统架构设计基础知识 【架构专栏】第17章 通信系统架构设计理论与实践
【架构专栏】第8章 系统质量属性与架构评估 【架构专栏】第18章 安全架构设计理论与实践
【架构专栏】第9章 软件可靠性基础知识 【架构专栏】第19章 大数据架构设计理论与实践
【架构专栏】第10章 软件架构的演化和维护



希望有所帮助,互相学习、共同进步,欢迎点赞、收藏!

赞(0)
未经允许不得转载:171主机测评 » 【架构专栏】第6章 数据库设计基础知识 4/4
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址