【数据库】数据库巩固二

前言

这一篇我们来讲一下数据库管理的主要内容和职责,还有一些数据库基本概念的介绍!!!

一、数据库管理介绍

数据库管理
数据库管理工作就是对数据库管理系统进行管理和维护的工作,其核心目标是保障数据库管理系统的:稳定性、安全性、数据一致性和系统的高性能

数据库管理员(Database Administrator)
从事管理和维护数据库管理系统的相关人员的统称。DBA也是一种角色,是保障数据库服务稳定运行。

数据库管理工作范围:
• 数据库对象管理:对数据库对象管理实际上是对数据库内数据的管理
• 数据库安全管理:有很多层面:系统安全性,数据安全性,网络安全性等
• 备份恢复管理:制定合理的备份策略,能定时备份以及发生灾难数据库能最快恢复和最小损失
• 数据库性能管理:对数据库性能优化包括:工作负载,吞吐量,资源和竞争
• 数据库环境管理:包括数据库的运行和维护管理

1、对象管理

什么是数据库对象呢?
数据库用来存储和指向数据的各种概念和结构的总称。

那么什么是对象管理呢?
对象管理就是用对象定义语言或者工具创建,修改或者删除各种数据库对象的管理过程

常见的基本数据库对象:

对象名称作用
TABLE用于存储数据的基本结构
VIEW视图以另一种方面反映表的数据,是一种逻辑上的“虚拟表”,视图本身不存储数据
INDEX索引索引提供指向存储在表的指定列的数据值的指针,如同图书的目录,能够加快表的查询速度
SEQUENCE序列用来产生唯一整数的数据库对象
STORE PROCEDURE、FUNCTION存储过程、函数一组为了完成特定功能的SQL语句集。存储过程、函数经过编译后,可以被重复调用,从而可以减少数据库开发人员的工作量

命名规范的原则:
良好的命名设计是一个项目良好的开端,所以在命名规范上有几点建议:

  1. 统一名称的大小写
  2. 利用前缀标识对象类型,如表名前缀t_,视图前缀v_,函数前缀f_等
  3. 建议用英文单词,避免使用汉语拼音
  4. 不要用非法字符,如@
  5. 不要用数据库保留的关键词,如Table
  6. 大小写规则要统一
2、数据库备份和恢复

数据库备份:
备份数据库就是将数据库中的数据,以及保证数据库系统正常运行的有关信息保存依赖,以备系统出现故障后恢复数据库时使用

备份方式:

名称描述
全量备份也称完全备份,对某个指定时间点的所有数据和应对的结构进行一个完全的备份。
差异备份差异备份是指上一次全量备份之后,对发送变化的数据进行的备份
增量备份增量备份是指上一次备份之后,对发生变化的数据进行的备份

在这里插入图片描述

名称描述
热备在数据库正常运行下进行备份。备份期间,数据库读写均可正常进行。但数据无法保证绝对的准确性
温备数据库可用性弱与热备,备份期间,数据库只能进行读操作,不能进行写操作
冷备在备份期间,用用的读写操作不可进行,但备份出的数据可靠性最高
名称描述
物理备份直接备份数据库所对应的数据文件甚至是整个磁盘
逻辑备份将数据从数据库中导出,并将导出的数据进行存档备份
物理备份逻辑备份
备份对象数据库的物理文件(如数据文件、控制文件等)数据库对象(如用户,表,存储过程等)
可移植性较弱,甚至不可移植数据库对象级备份,可移植性较强
占用空间占用空间大占用空间相对较小
回复效率效率高效率较低
适用场景大型业务系统或者整系统的容灾恢复、系统级全量备份主备数据库间的增量数据备份、不同业务系统之间的数据同步、业务不中断升级过程中在线数据迁移

数据库恢复:
将数据库系统从故障或者瘫痪状态恢复到可正常运行,并能够将数据恢复到可接受状态的活动

灾难备份:
为了灾难恢复而对数据、数据处理系统、网络系统、基础设施、专业技术能力和运行管理能力进行备份的过程

企业级容灾:
对于企业和单位来说,数据库系统和其他应用系统构成更大的信息系统平台,所以数据库备份恢复并不是孤立的功能点,要和其它应用系统一并考虑整个信息系统平台的容灾性能。

恢复时间目标(RTO):
灾难发生后,信息系统或业务功能从停顿到必须恢复的时间要求

RTO强调的是服务的可用性,RTO越小服务损失就越少,RPO是数据丢失,RPO越小数据丢失的越少

恢复点目标(RPO):
灾难发生后,系统和数据必须恢复到的时间点要求。

举个例子说明,比如RPO要求是1天,那么就是灾难发生后,必须能够把系统和数据恢复到故障发生24小时之前这个时间点的状态。24小时以内的数据存在丢失的可能性。24小时以内的数据丢失在这个等级下是允许的。

3、安全管理

数据库系统安全架构可以分为三个层次:(这里我们看第三个层次)

  1. 网络层次安全

  2. 操作系统层次安全

  3. 数据管理系统层次安全

    • 数据库加密:有DBMS内核层和DBMS外层加密
    • 数据存取访问控制:访问控制是数据库安全中最有效的办法也是最容易出问题的地方
    • 安全审计:审计可以帮助数据库管理员发现现存架构和使用中的漏洞
    • 数据备份:上面提过啦

二、数据库基本概念
1、数据库和数据库实例

数据库是物理存储的数据,数据库实例就是访问数据的软件进程、线程和内存的集合

数据库:
实际上就是数据的集合。表现出来的就是物理操作系统文件或磁盘数据块的集合

基于文件的比如数据文件,索引文件,结构文件,或者也有直接把数据写入数据存储

数据库实例:
实例指的就是操作系统中一系列的进程以及为这些进程所分配的内存块。

数据库实例就是访问数据库的通道,通常来说一个数据库实例对应一个数据库

多实例:

  • 一台物理服务器上搭建、运行多个数据库实例
  • 每个实例使用不同的端口,通过不同的socket监听
  • 每个实例拥有独立的参数配置文件

利用多实例操作,可以更充分的利用硬件资源,让服务器性能最大化

分布式集群:
分布式数据库对外都是统一的一个实例,一般不允许用户直接去连接数据节点上的实例。

  • 分布式:每个服务器中都可能有数据库的一份完整副本,或者部分副本。所有服务器通过网络相互连接,共同组成一个完整的、全局的逻辑上集中,物理上分布的大型数据库
  • 集群:就是一组组相互独立的服务器,通过网络组成的一个计算机系统
2、数据库连接和会话

数据库连接:
物理层面的通信连接,指的是物理上的客户端同服务器的通信链路。
建立连接时,要指定连接参数:如服务器主机名或ip,端口号,连接用户名和口令

数据库会话:
是逻辑上的用户同服务器的通信交互

通信双方从开始通信到通信结束期间的一个上下文(Context)。这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器、对应的应用程序进程号、对应的用户登录等信息。

3、数据库连接池

为什么要有数据库连接池?
建立数据库连接是有代价的。频繁的建立和关闭数据库连接,会使得对连接资源的分配和释放成为数据库的瓶颈,从而降低数据库系统的性能。
在这里插入图片描述
连接池:
数据库连接的复用

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

4、schema

Schema是数据库形式语言描述的一种结构,是对象的集合

  • 允许多个用户使用一个数据库而不干扰其他用户。
  • 把数据库对象组织成逻辑组,让他们更便于管理。
  • 形成命名空间,避免对象的名字冲突。
  • schema包含表及其他数据库对象,数据类型、函数、操作符等
    在这里插入图片描述
    (不同shema下的表名称可以相同)

数据库对象间的关系:
在这里插入图片描述

5、表空间(Tablespace)

表空间是由一个或多个数据文件组成

  • 通过表空间定义数据库对象文件的存放位置。
  • 数据库中所有对象在逻辑上都存放在表空间中。
  • 在物理上储存在表空间所属的数据文件中。

表空间作用:
表空间用来指定数据库中表、索引等数据库对象的存储位置,是一个物理概念。 管理员创建表空间后,可以在创建数据库对象时引用它。

6、表(Table)

表: 在关系数据库中,数据库表就是一系列二维数组的集合
记录: 表中的每一行称为一个记录,由若干字段组成
字段: 也称域,表中的每一列都称为一个字段。每个字段都包含两个属性:列名和数据类型

在这里插入图片描述

7、临时表

临时表: 用来保存一个会话或者一个事务中需要的数据

  • 会话级别临时表,ON COMMIT PRESERVE ROWS
    临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,自动清除临时表中数据。

  • 事务级别临时表,ON COMMIT DELETE ROWS;
    临时表中的数据只会在一个事务中,当事务一旦提交或者回滚后,临时表中的数据就会被自动清空

8、表的存储方式

行存储表

  • 适用于点查询(返回记录少,基于索引的简单查询)
  • 适合OLTP,这种轻量级事务,大量写操作,数据增删改比较多的场景

列存储表

  • 统计分析类查询(group,join多的场景)
  • 适合OLAP,数据挖掘等大量查询的应用查询
9、分区(Partition)

分区表是将大表的数据分成许多小的数据子集,称为分区

范围分区表:

  • 将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。
  • 查询条件搜索的数据范围在一个分区,所以SQL在查询过程中,只要扫描一个分区的数据即可,不用进行全表范围扫描。

分区表的好处:

  • 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。
  • 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。
  • 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。
  • 均衡I/O:可以把不同的分区映射到不同的磁盘以平衡I/O,改善整个系统性能。
10、数据分布

数据分布: 就是将数据表的数据分散在所有数据节点上,所以创建表的时候需要制定分布方式

分布方式说明
Hash表数据通过hash方式散列到集群中的所有DN(追求数据均匀分布)
Replication集群中每一个DN都有一份全量表数据(适用于记录集较小的表)
List表数据通过list的方式分不到制定DN节点上
Range表数据通过Range方式分不到指定DN节点上

repliaction:适合较小的表
hash、list、range:适合大表

分布列选择原则: 选择分布列一般会遵循

  • 保证数据均匀分布
    (比如选择身份证id作为分布列)
  • 尽量选择聚合字段
    (避免数据节点之间数据重分布)
  • 尽量选择关联字段
    (比如两个表通过一个字段做关联,就选择这个字段作为分布列)
11、数据类型
  • 基本数据类型
    • 数值类型
    • 字符类型
    • 二进制类型
    • 日期/时间类型
    • 布尔类型
    • 枚举类型等
  • 复合数据类型
  • 序列号类型
  • 几何类型

常见的类型:

数据类型说明数据类型说明
smallint2字节常用整数,取值范围是-32768 到 +32767varchar(n)变长,有长度限制n
integer4字节常用整数,取值范围是-2147483648 到 +2147483647char(n)定长,不足补空白
bigint8字节常用整数,取值范围是-9223372036854775808 到 9223372036854775807text变长,无长度限制
decimal精度数字。decimal(m,n)是精确到小数点后n位数字date4字节,只存储日期,精度为天
numeric精度数字,等同于decimaltime8字节,只存储一日之内的时间
real4字节,浮点型数字timestamp8字节,年月日时分秒,可以到1/14毫秒的精度
double8字节,浮点型数字interval12字节,计算时间间隔
boolean1字节, TRUE/FALSE
12、视图(view)

什么是视图?

  • 视图与基本表不同,不是物理上实际存在的,是一个虚表。
  • 若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次
  • 视图的数据都不会在数据库里面真正存储,用户在通过select语句访问视图的时候,都通过视图去访问底层基表的数据。所以称为视图为“虚表”

视图的作用:

  • 简化了操作,把经常使用的数据定义为视图。
  • 安全性,用户只能查询和修改能看到的数据。
  • 逻辑上的独立性,屏蔽了真实表的结构带来的影响。
13、索引

索引提供指向存储在表的指定列中的数据值的指针,如同图书的目录,能够加快表的查询速度,但同时也增加了插入、更新和删除操作的处理时间。

索引方式描述
唯一索引可用于约束索引属性值的唯一性,或者属性组合值的唯一性
多字段索引一个索引可以定义在表中的多个属性上
部分索引建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组
表达式索引索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用
14、约束

数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束

常见的约束类型

  • 唯一性和主键约束(UNIQUE/PRIMARY KEY):当字段中所有取值不会出现重复记录的时候,可以给对应字段增加唯一性约束,例如身份证字段,员工工号字段
  • 外键约束(FOREIGN KEY):也叫参考一致性约束
  • 检查约束(CHECK):是对字段中的合法值得范围进行的约束
  • 非空约束(NOT NULL):如果当前字段从业务含义上说不应当出现空值或者未知数据的话,就可以增加NOTNULL 约束,保证插入的数据都是非空的数据
  • 默认约束(DEFAULT):当insert数据的时候,如果没有给定取值,那么使用默认约束,就会给一个默认的初始值
15、事务

事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元执行

一个事务内的所有语句作为一个整体,要么全部执行,要么全部不执行

为什么要设置事务?
数据库中的数据是共享资源,允许多用户同时访问相同的数据。当多个用户同时对一段数据进行增删改的操作的时候,如果不采取任何措施,就会造成数据异常。事务就是防止这种情况的发生而产生的概念

事务结束的标记有两个

  • 正常结束,COMMIT(提交事务)
    Commit提交事务后,事务所有的操作都会物理地保存到数据库中,称为永久的操作

  • 异常结束,ROLLBACK(回滚事务)
    Rollback事务回滚后,事务中的全部操作被撤销,数据库回到事务开始之前的状态

16、数据不一致情况
  1. 脏读(“Dirty”Reads)
    一个事务读取到了其他事务中还没有提交(Committed)的数据。
    因为未提交数据存在回滚的可能,所以被称为“脏”数据。

  2. 不可重复读(Non-repeatable Reads)
    一个事务所获取到的数据是可以被其它事务修改的。
    一个事务在处理过程中多次读取同一个数据(重复读),这个数据是可能发生变化的,因此被称为不可重复读。

  3. 幻影读(Phantom Read)
    是不可重复读的更为特殊的一个场景。就是在一个事务中,多次读取统一个数据源,但是发生了变化

17、事务隔离级别

事务隔离级别分为四级

  1. 序列化(Serializable)
    • 系统中所有的事务以串行地方式逐个执行,所以能避免所有数据不一致情况。
    • 但是这种以排他方式来控制并发事务,串行化执行方式会导致事务排队,系统的并发量大幅下降,使用的时候要绝对慎重。

  2. 可重复读(Repeatable read)
    一个事务一旦开始,事务过程中所读取的所有数据不允许被其他事务修改

  3. 已提交读(Read Committed)
    • 一个事务能读取到其他事务提交过(Committed)的数据。
    • 一个事务在处理过程中如果重复读取某一个数据,而且这个数据恰好被其他事务修改并提交了,那么当前重复读取数据的事务就会出现同一个数据前后不同的情况。
    • 在这个隔离级别会发生“不可重复读”的场景。

  4. 未提交读(Read Uncommitted)
    • 一个事务能读取到其他事务修改过,但是还没有提交的(Uncommitted)的数据。
    • 数据被其他事务修改过,但还没有提交,就存在着回滚的可能性,这时候读取这些“未提交”数据的情况就是“脏读”。
    • 在这个隔离级别会发生“脏读”场景。

隔离级别和数据不一致情况的比较:

事务隔离级别脏读不可重复读幻影读
未提交读可能可能可能
已提交读不可能可能可能
可重复读不可能不可能可能
序列化不可能不可能不可能

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值