系统架构师考试——数据库

2022-10-06 From 程序之心 By 丁仪

ORM技术

ORM,即 Object Relational Mapping,它在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作即可。

面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。

ORM把数据库映射成对象。如:数据库的表(table)-->类(class)、记录(record,行数据)-->对象(object)、字段(field)-->对象的属性(attribute)。

ORM优点:

1、使用ORM可以大大降低学习和开发成本。

2、程序员不用再写SQL来进行数据库操作。

3、减少程序的代码量。

4、降低由于SQL代码质量差而带来的影响。

ORM缺点

1、不太容易处理复杂查询语句。

2、性能较直接用SQL差。

数据库分类

关系型数据库:关系数据库,是建立在关系模型基础上的数据库,借助集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。

NoSQL:泛指非关系型的数据库。随着互联网的兴起,传统的关系数据库在应付超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。

内存数据库:将数据库整体存储在内存中,提高性能。

特征 关系数据库模式 NoSQL模式
并发支持 支持并发、效率低 并发性能高
存储与查询 关系表方式存储、SQL查询 海量数据存储、查询效率高
扩展方式 向上扩展 向外扩展
索引方式 B树、哈希等 键值索引
应用领域 面向通用领域 特定应用领域
数据一致性 实时一致性 弱一致性
数据类型 结构化数据 非结构化
事物 高事务性 弱事务性
水平扩展
数据容量 有限数据 海量数据


主要数据模型 读写性能 存储容量 可靠性
内存数据库 Key-Value模式(键-值对模式)
内存真接读写,性能相对较高
基于内存存储,存储容量受限
恢复机制复杂,可靠性较低
关系数据库 关系模式
外存读写,性能相对较低
基于存盘存储,存储容量大
内建恢复机制,可靠性较高

设计难度 数据冗余程度 数据架构 应用扩展性
关系型数据库 针对特定应用系统设计,难度较大 遵守数据库范式,数据冗余较小 以数据库为中心组织,管理数据 数据库独立于应用系统,数据库系统接口标准化,易于在不同应用之间共享数据
文件系统 针对特定应用系统设计,难度较小 可能在多个文件中复制相同的数据属性,数据冗余较大 以应用为中心管理数据 符合特定应用系统要求的文件数据很难在不同的应用系统之间共享

并发控制

丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。

不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。

读脏数据:事务1对数据A进行了修改后,事务2读数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的事是无效的,读到了脏数据。

封锁协议

X锁是排它锁(写锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。

S锁是共享锁(读锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。

不规范化

设有一个关系模式R(SNAME,CNAME,TNAMETADDRESS),其属性分别表示学生姓名、选修的课程名、任课教师姓名和任课教师地址。仔细分析一下,就会发现这个模式存在下列存储异常的问题:

  1. 数据冗余:数据被重复存储,如某门课程有100个学生选修,那么在R的关系中就要出现100个元组,这门课程的任课教师姓名和地址也随之重复出现100次。
  2. 修改异常:修改导致数据不一致,如由于上述冗余问题,当需要修改这个教师的地址时,就要修改100个元组中的地址值,否则就会出现地址值不一致的现象。
  3. 插入异常:插入时异常,如不知道听课学生名单,这个教师的任课情况和家庭地址就无法进入数据库;否则就要在学生姓名处插入空值。
  4. 删除异常:删除了不该删除的数据,如当只有一条记录时,要删除这个学生选课信息,会将课程名、教师名和教师地址都给删除了。

反规范化技术

规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术。

采用反规范化技术的益处:降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,能够提高查询效率。

可能带来的问题:数据的重复存储,浪费了磁盘空间;可能出现数据的完整性问题,为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度。

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

分布式数据库

是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。分布式数据库系统是在集中式数据库系统技术的基础上发展起来的,具有如下特点:

  1. 数据独立性。在分布式数据库系统中,数据独立性这一特性更加重要,并具有更多的内容。除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)。
  2. 集中与自治共享结合的控制结构。各局部的DBMS可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
  3. 适当增加数据冗余度。在不同的场地存储同一数据的多个副本,这样,可以提高系统的可靠性和可用性,同时也能提高系统性能。
  4. 全局的一致性、可串行性和可恢复性。

分布式数据库的优点:

  1. 分布式数据库可以解决企业部门分散而数据需要相互联系的问题。
  2. 如果企业需要增加新的相对自主的部门来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
  3. 分布式数据库可以满足均衡负载的需要。
  4. 当企业已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
  5. 相等规模的分布式数据库系统在出现故障的概率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此,就整个系统来说,它的可靠性是比较高的。

数据分片将数据库整体逻辑结构分解为合适的逻辑单位(片段),然后由分布模式来定义片段及其副本在各场地的物理分布,其主要目的是提高访问的局部性,有利于按照用户的需求,组织数据的分布和控制数据的冗余度。

  1. 水平分片。水平分片将一个全局关系中的元组分裂成多个子集,每个子集为一个片段。分片条件由关系中的属性值表示。对于水平分片,重构全局关系可通过关系的并操作实现。
  2. 垂直分片。垂直分片将一个全局关系按属性分裂成多个子集,应满足不相交性(关键字除外)。对于垂直分片,重构全局关系可通过连接运算实现。
  3. 导出分片。导出分片又称为导出水平分片,即水平分片的条件不是本关系属性的条件,而是其他关系属性的条件。
  4. 混合分片。混合分片是在分片中采用水平分片和垂直分片两种形式的混合。

分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数据库的数据模型。

  1. 分片透明性是分布透明性的最高层次,它是指用户或应用程序只对全局关系进行操作而不必考虑数据的分片。
  2. 位置透明性。位置透明性是指用户或应用程序应当了解分片情况,但不必了解片段的存储场地。
  3. 局部数据模型透明性。局部数据模型透明性是指用户或应用程序应当了解分片及各片断存储的场地,但不必了解局部场地上使用的是何种数据模型。

数据仓库

数据仓库集成是把多种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和存储容量。数据仓库主要用于决策支持,在数据处理过程中强调分析。其特点是:(1)集成的数据。(2)面向主题。(3)数据相对稳定。(4)包含历史信息。

数据仓库的结构通常包含四个层次:

  1. 数据源:是数据仓库系统的基础,是整个系统的数据源泉。
  2. 数据的存储与管理:是整个数据仓库系统的核心。
  3. OLAP(联机分析处理)服务器:对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
  4. 前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。

本文来源:程序之心,转载请注明出处!

君子曰:学不可以已。
《深入理解计算机系统(原书第3版)》

主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加载库,以及用户应用等。书中提供了大量实际操作,可以帮助读者更好地理解程序执行的方式,改进程序的执行效率。此书以程序员的视角全面讲解了计算机系统,深入浅出地介绍了处理器、编译器、操作系统和网络环境,是这一领域的权威之作。

发表感想

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号