前言
以下内容仅为个人根据当年系分案例真题问题整理的偏需要记背的考点答案,方便个人背诵和记忆使用。方便文字转语音,所以内容全为纯文字内容,以下内容仅供参考。
背记内容
微服务
微服务中应该包含的内容有:资源、对资源的操作的一组API集合。
微服务的优势:
(1)通过分解巨大单体式应用为多个服务方法解决了复杂性问题。它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变。
(2)让每个服务能够独立开发,开发者能够自由选择可行的技术,提供 API 服务。
(3)微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响。这种改变可以加快部署速度。
(4)微服务使得每个服务独立扩展。你可以根据每个服务的规模来部署满足需求的规模。甚至你可以使用更适合于服务资源需求的硬件。
微服务架构带来的挑战:
(1)并非所有的系统都能转成微服务。例如一些数据库层的底层操作是不推荐服务化的。
(2)部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部署的复杂度,容器技术能够解决这一问题。
(3)性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错。例如一个服务需要访问另一个服务的数据,只能通过服务间接口来进行数据传输,如果是频繁访问,则可能带来较大的延迟。
(4)数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加困难。
数据库设计
数据库设计主要包括概念设计、逻辑设计和物理设计三个阶段:
1,概念设计也称为概念结构设计,其任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何 DBMS 的数据模型,即概念模型。概念模型的表现形式即 ER 模型。
2,逻辑设计也称为逻辑结构设计,其主要任务是将概念模型转换为某个特定的 DBMS 上的逻辑模型。设计逻辑结构时,首先为概念模型选定一个合适的逻辑模型(如:关系模式或层次模型),然后将其转化为由特定 DBMS 支持的逻辑模型,最后对逻辑模型进行优化。
3,物理设计也称为物理结构设计,其任务是对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的物理结构,主要是指数据库在物理设备上的存储结构和存取方法。
关系模式–范式
第一范式(1NF):
1NF的定义为:符合1NF的关系中的每个属性都不可再分。
第二范式(2NF):
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
学生分数表包含 (学号,姓名,系名,系主任,课程名,分数)。
对于(学号,课名) 可推出 姓名,有 学号 可推出 姓名,存在非主属性 姓名 对码(学号,课名)的部分函数依赖。
对于(学号,课名) 可推出 系名,有 学号 可推出 系名,存在非主属性 系名 对码(学号,课名)的部分函数依赖。
对于(学号,课名) 可推出 系主任,有 学号 可推出 系主任,存在非主属性 对码(学号,课名)的部分函数依赖。
所以学生分数表存在非主属性对于码的部分函数依赖,最高只符合1NF的要求,不符合2NF的要求。
这里通过拆分成两个表再 来判断:
选课表 包含(学号,课名,分数)。
对于选课表,其码是(学号,课名),主属性是学号和课名,非主属性是分数,学号确定,并不能唯一确定分数,课名确定,也不能唯一确定分数,所以不存在非主属性分数对于码 (学号,课名)的部分函数依赖,所以此表符合2NF的要求。
学生表 包含(学号,姓名,系名,系主任)。
对于学生表,其码是学号,主属性是学号,非主属性是姓名、系名和系主任,因为码只有一个属性,所以不可能存在非主属性对于码 的部分函数依赖,所以此表符合2NF的要求。
第三范式(3NF):
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
现在继续对两个表进行3NF判断:
选课表 包含(学号,课名,分数)。学生表 包含(学号,姓名,系名,系主任)。
对于选课表,主码为(学号,课名),主属性为学号和课名,非主属性只有一个,为分数,不可能存在传递函数依赖,所以选课表的设计,符合3NF的要求。
对于学生表,主码为学号,主属性为学号,非主属性为姓名、系名和系主任。因为 学号 可以推出 系名,同时 系名 可以推出 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。
为了使学生表符合3NF,我们对其进行拆分为:
学生表 包含(学号,姓名,系名)。
系表 包含(系名,系主任)。
对于学生表,码为学号,主属性为学号,非主属性为系名,不可能存在非主属性对于码的传递函数依赖,所以符合3NF的要求。
对于系表,码为系名,主属性为系名,非主属性为系主任,不可能存在非主属性对于码的传递函数依赖(至少要有三个属性才可能存在传递函数依赖关系),所以符合3NF的要求。
符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
表分割方式
表分割方式包括水平分割与垂直分割两种形式:
水平分割:按记录进行分割,不同的记录可以分开保存,每个子表的列数相同。分割的条件可能是某列或多列数据的值,如时间参数。
垂直分割:按进行分割,即把一条记录分开多个地方保存,每个子表的行数相同。把主键和一些行放到一个表,然后把主键和另外的列放到另一个表中,通过主键进行关联。
水平分割优点:水平分割后可以降低在查询时需要读取的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
水平分割缺点:水平分割会给应用增加复杂度,在查询时需要多个表名,查询所有数据需要union操作。
垂直切分的优点:业务系统层面的耦合、分级管理、维护、监控和扩展、O、数据库连接数和单机硬件资源得到提升。 解决业务系统层面的耦合,业务清晰。 对不同业务的数据进行分级管理、维护、监控和扩展。 在高并发场景下,IO、数据库…
垂直切分的缺点:提高了开发的复杂性、复杂的分布式事务处理、单表数据量过大。 有些表格不能join,只能通过接口聚合来解决。 复杂的分布式事务处理。 仍然存在单表数据量过大的问题(需要水平切分)。
物理数据分区技术
物理数据分区技术一般分为水平分区和垂直分区,数据库中常见的是水平分区。水平分区分为范围分区、哈希分区、列表分区等。
范围分区优点:
1、分区表可以将表存储到多个表空间内,各个分区维护各自的本地索引,查询语句可以根据索引进行分区范围查找,提高了查询速度;
2、可以对单个分区进行备份、归档或者清除过期的数据,利于维护;
3、实现容易,而且可以方便的对表的分区进行添加、删除、拆分和合并操作。
范围分区缺点:数据分布不均匀所以可以与哈希分区组合应用。
分布式数据库
分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。
提高分布式数据库系统性能的实现技术:
1、采用数据分片技术,提高访问的局部性,提升系统性能。
2、采用查询优化技术(包括:全局查询树的变换、副本的选择与多副本的更新策略、查询树的分解、半连接与直接连接)提高查询速度。
3、读写分离技术。
对于那些读取数据的需求非常强烈,涉及到的数据量极大,而更新较少的系统,可以在分布式数据库中采用一主多从的机制来分散读取数据的压力。更新数据时,操作主库,从主库再同步到从库,从库只负责读取数据。