苏州网站开发培训,跨境电子商务主要学什么,网站开发的背景知识与相关技术,广州广告制作有限公司文章目录2 数据库基础知识2.1 数据库管理简介数据库管理数据库管理工作范围对象管理制定数据库对象命名规范备份和恢复灾难恢复备份方式数据库安装数据库卸载数据库迁移数据库扩容例行维护工作2.2 数据库重要概念数据库和数据库实例数据库连接和会话数据库连接池模式表空间表数…
文章目录2 数据库基础知识2.1 数据库管理简介数据库管理数据库管理工作范围对象管理制定数据库对象命名规范备份和恢复灾难恢复备份方式数据库安装数据库卸载数据库迁移数据库扩容例行维护工作2.2 数据库重要概念数据库和数据库实例数据库连接和会话数据库连接池模式表空间表数据类型字段设计建议临时表表的存储方式分区数据分布数据策略选择分布列选择原则视图索引索引的类别约束约束的设计数据库对象间的关系事务数据不一致情况事务隔离级别2 数据库基础知识
2.1 数据库管理简介
数据库管理
数据库管理Database Admin对数据库管理系统进行管理和维护的工作
数据库管理员Database Administrator,DBA从事管理和维护数据库管理系统的相关人员的统称
核心目标保证数据库管理系统的安全性、稳定性、数据一致性、系统的高性能 数据库管理工作范围
数据库对象管理
物理设计工作物理实现工作
数据库安全管理
防止未授权访问避免受保护的信息泄露防止安全漏洞和不当的数据修改确保数据只提供给授权用户使用
备份恢复管理
指定合理的备份策略实现数据定期备份功能保证灾难发生时数据库系统能够做到最快恢复和最小损失
数据库性能管理
对影响数据库性能的因素进行监控和优化对数据库能使用的资源进行优化从而增加系统吞吐量并减少竞争最大可能地处理工作负载。
数据库环境管理
数据库的运行和维护管理包括安装配置升级迁移等确保数据库系统在内的IT基础设施的正常运作 对象管理
数据库对象数据库里用来存储和指向数据的各种概念和结构的总称。
对象管理使用对象定义语言或者工具创建、修改和删除各种数据库对象的管理过程。
常见的数据库对象 制定数据库对象命名规范
统一名称大小写书写格式为数据对象_数据对象名称如student表我们可以写为t_student也可以适当使用缩略词如t_stu 备份和恢复
数据库备份将数据库中的数据以及保证数据库系统正常运行的相关信息保存起来以备系统出现故障后恢复数据库时使用。
备份对象数据本身、和数据有关的数据库对象、用户及权限、数据库环境
数据库恢复将数据库系统从故障或者瘫痪状态恢复到可正常运行并能够将数据恢复到可接受状态的活动 灾难恢复
企业级容灾对于企业和单位来说数据库系统和其他应用系统构成更大的信息系统平台所以数据库备份恢复并不是孤立的功能点要和其他应用系统一并考虑即考虑整个信息系统平台的容灾性能。
灾难备份为了灾难备份而对数据、数据处理系统、网络系统、基础设施、专业技术能力和运行管理能力进行备份的过程。
恢复时间目标RTO灾难发生后信息系统或业务功能从停顿到必须恢复的时间要求。
恢复点目标RPO灾难发生后系统和数据必须恢复到的时间点要求 备份方式
根据备份的数据集合范围分类全量备份、差异备份、增量备份。
全量备份也叫完全备份主要是对某个时间点的数据库里所有数据和对应的结构做一个完全备份。全量备份是差异备份和增量备份的基础且备份期间会对系统性能产生一定影响但是安全性和数据完备性最高。差异备份指上一次全量备份后对发生变化的数据部分进行备份。增量备份指上一次备份后对发生变化的数据部分进行备份。 根据是否停用数据库分类热备、冷备、温备
热备备份期间数据可读可写数据库正常运行温备备份期间可读不可写可用性弱于热备冷备不可读写可理解为停止数据库但备份出的数据可靠性最高
根据备份内容分类物理备份、逻辑备份
物理备份直接备份数据库所对应的数据文件甚至是整个磁盘逻辑备份把数据从数据库导出并将导出的数据进行存档备份 数据库安装 数据库卸载
传统数据库先对数据库进行一次全备然后停止数据库服务最后卸载数据库。
云数据库先对数据库进行一次全备然后从云平台删除数据库实例即可。
不同架构场景下单机的卸载方式都是类似需要在每个节点上执行相同的卸载操作而分布式集群一般使用专有的卸载工具。
安全问题对于一些客户在数据库卸载时需要对存储介质上的数据再做销毁处理保证数据不外泄。 数据库迁移
说明需要依据不同的迁移场景需求设计迁移方案。
考虑的要素
迁移可用的时间窗口迁移可以使用的工具迁移过程中数据源系统是否停止写入操作迁移过程的数据源系统和目标系统之间的网络情况根据迁移的数据量估算备份/恢复事件迁移后源和目标数据库系统之间的数据一致性稽核
注时间窗口是股票的术语指的是当时间段运行到了一定的阶段时,会出现转折点。 数据库扩容
任何一个数据库系统的容量都是在某个时间点的基础上对未来一段时间内的数据量进行估算后确定的容量不仅仅是数据存储量还需要考虑以下几个方面
计算能力不足整个系统CPU日均繁忙程度90%响应/并发能力不足QPSTPS显著下降无法满足SLA数据容量不足可用的数据空间低于15%
扩容方案的选择
垂直扩容垂直扩容时增加数据库服务器硬件。如增加内存增大存储提升网络带宽等。这种方式相对简单但是会遭遇单机硬件性能的瓶颈水平扩容横向增加服务器数量通常指的是并行计算利用集群中服务器数量的优势来增加整体系统的性能停机扩容操作简单即停止服务器工作任何增加服务器数量。这样走时间窗口有限出现问题会导致扩容失败。如果时间过长不容易被客户接受平滑扩容对数据库服务无影响是一种在线水平扩容方式。但技术方案相对复杂。随着数据库服务器数量增多扩容复杂程度就急剧上升。 例行维护工作
数据库故障处理
配置数据库监控指标和告警阈值针对故障事件的等级设置告警通知流程接受告警信息后根据日志进行故障定位对于遇到的问题应详细记录原始信息严格遵守操作规程和行业安全规程对于重大操作在操作前要确认操作的可行性做好相应的备份、应急和安全措施后由有权限的操作人员执行。 2.2 数据库重要概念
数据库和数据库实例
数据库物理操作系统文件或磁盘数据块的集合
数据库实例指的是操作系统中一系列进程以及为这些进程所分配的内存块如JDBC中连接数据库返回的对象
单实例数据库实例是访问数据库的通道通常一个数据库实例对应一个数据库
多实例利用多实例操作可以更充分的利用硬件资源让服务器性能最大化 分布式集群集群就是一组相互独立的服务器通过高速网络组成一个计算机系统。在分布式集群中每个服务器都可能有数据库的一份完整副本或者部分副本所有服务器通过网络互相连接共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库 数据库连接和会话
数据库连接Connection指的是通过网络建立的客户端和专有服务器或调度器的一个网络连接建立连接时需要指定参数如服务器主机名或ip端口号连接用户名和口令等。
数据库会话Session客户端和数据库之间通信的逻辑概念。指的是通信双方从开始通信到通信结束期间的一个上下文Context。这个上下文是一段位于服务器端的内存记录了本次连接的客户端机器、对应的应用程序进程号、对应的用户登录等信息。 数据库连接池
建立数据库连接时有代价的如果我们频繁的建立和关闭数据库连接则此过程也会成为限制数据库性能的指标从而降低数据库系统的性能。比较好的解决方式是采用数据库连接池。即一个用户用完的连接暂且不要马上断开而是存于缓存中等待一段时间看有无其他用户需要他。数据库连接池是数据库连接的复用其负责分配、管理和释放数据库连接它允许应用程序重复使用一个现有的数据库连接而不是再重新建立一个。 模式
在数据库中存在模式Schema它是数据库对象的集合其作用如下
允许多个用户使用一个数据库而不干扰其他用户把数据库对象组织成逻辑组让他们更便于管理形成命名空间避免对象的名字冲突schema包含表及其他数据库对象数据类型、函数、操作符等。 表空间
表空间概念
表空间是由一个或者多个数据文件组成的通过表空间定义数据库对象文件的存放位置数据库中所有对象在逻辑上都存放在表空间中在物理上储存在表空间所属的数据文件中
表空间作用
根据数据库对象使用模式安排数据物理存放位置提高性能。可以将频繁使用的索引放置在性能稳定且运算速度快的磁盘上。而对于归档好的这类使用频率低的数据我们则放于速度慢的磁盘上通过表空间指定数据占用的物理磁盘空间限制其物理空间使用上限避免磁盘空间被耗尽 表
表在关系数据库中数据库表就是加了第一范式的二维表
记录表中的每一行成为一个记录也可以叫元组每个记录由若干个字段组成字段也可以叫做属性。
字段也称为属性字段的取值我们称为域定义字段时都需指明其两个要素字段名和数据类型。
CREATE TABLE t_author(author_id integer,author_name char(60),author_age integer,author_address varchar(255)
);数据类型
说明数据库表中可定义的数据类型如下 字段设计建议
尽量使用短字段数据类型使用一致的数据类型使用执行效率比较高的数据类型多个表存在逻辑关系时表示同一含义的字段应该使用相同的数据类型对于字符串数据建议使用变长字符串数据类型并指定最大长度 临时表
GaussDB(for MySQL)支持创建临时表。临时表用于保存一个会话中需要的数据。当会话退出时临时表的数据自动清空。临时表无法通过show tables命令来显示
CREATE TEMPORARY TABLE staff_history_session(startdate DATE,enddate DATE
)表的存储方式
表存分类表可以分为行存表和列存表。
行存表关系数据库中的二维表每条元组是一行一行的。
列存表HBase数据库中的表每条元组是一列一列的。
列存适用场景
统计分析类查询适合OLAP数据挖掘等大量查询的应用查询
行存适合场景
点查询返回记录少基于索引的简单查询适合OLTP这种轻量级事务大量写操作数据增删改比较多的场景 分区
分区将大表的数据范围许多小的数据子集这些子集称为分区。分区的类别根据不同的依据可以分为不同的分区
范围分区表列表分区表哈希分区表间隔分区表
分区表的收益改善查询性能、增强可用性、方便维护、均衡I/O
分区剪枝对于分区对象的查询可以仅搜索自己关心的分区提高检索效率 数据分布
数据分布GuassDB(DWS)分布式数据库的数据表是分散在所有数据节点(DataNode,DN)上的所以创建表的时候需要指定分布列。
分布方式
分布方式说明Hash表数据通过Hash方式散列到集群中所有DNReplication集群中每一个DN都有一份全量表数据List表数据通过List方式分布到指定DN节点上Range表数据通过Range方式分布到指定DN节点上数据策略选择
复制适合记录集较小的表
Hash/List/Range:适合数据量较大的表 分布列选择原则
尽量选择离散值比较多的列保证数据均匀分布。分布均匀是为了避免木桶效应各个DN对等执行。在满足第一条原则的情况下不要选择存在常量过滤的列。满足前两条原则的情况下尽量选择关联字段或聚合字段作为分布列这种方式是为了避免数据节点之间数据重发布降低IO的开销从而提升关联操作和聚合操作的性能。 视图
视图本质通过逻辑映射将经常使用的数据映射为一张临时表。视图和基表不同不是物理上实际存在的是一个虚表。
视图作用
简化操作提高安全性对于不同的用户来说规定的用户只能看到自己需要的数据部分逻辑独立性
视图的限制性
性能问题查询可能很简单但是封装的视图语句很复杂修改限制对于复杂视图用户不能通过视图修改基表数据 CREATE VIEW stu_class(id,name,class) AS select student.s_id,student.name,stu_info.class from student,stu_info where student.s_id stu_info.s_id;索引
说明索引提供指向存储在表的指定列中的数据值的指针如同图书的目录能够加快表的查询速度但同时也增加了插入、更新和删除操作的处理时间。
创建索引的建议
在经常需要搜索查询的列上创建索引可以加快搜索的速度。在作为主键的列上创建索引强制该列的唯一性和组织表中数据的排列结构在经常需要根据范围进行搜索的列上创建索引因为索引已经排序其指定的范围是连续的在经常需要排序的列上创建索引因为索引已经排序这样查询可以利用索引的排序加快排序查询事件在经常使用WHERE子句的列上创建索引加快条件的判断速度为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引
有效索引创建后的索引并非一定会被使用。如果系统判定使用索引的时间比顺序扫描还久就不会使用索引。故我们要定期删除无用索引。我们还可以通过explain语句查看执行计划来判断是否使用索引。 索引的类别 约束
完整性约束数据的完整性是指数据的正确性和一致性在定义表时我们可以定义完整性约束。
完整性约束是一种规则本身不占用数据库空间完整性约束和表结构定义一起保存在数据字典中
常见的约束类型
唯一性和主键约束UNIQUE/PRIMARY KEY外键约束FOREIGN KEY检查约束CHECK非空约束NOT NULL默认约束DEFAULT 约束的设计
如果能够从业务层面补全字段值就不建议使用DEFAULT约束避免数据加载时产生不符合预期的结果给明确不存在NULL值得字段加上NOT NULL约束优化器能够对表结构进行优化给可以显式命名的约束显式命名。除了NOT NULL和DEFAULT约束外其他约束都能显式命名 数据库对象间的关系 事务
事务概念事务Transaction是用户定义的一系列操作这些操作作为一个工作单元来执行要么一个操作都不做要么把操作全做完。
事务的四大特性
Atomicity原子性事务是数据库的逻辑工作单位事务中的一系列操作要么都做要么都不做Consistency一致性事务的执行结果是使数据库从一个一致性状态转到另一个一致性昨天Isolation隔离性数据库中一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他事务是隔离的并发执行的各个事务不能相互干扰Durability持久性事务一旦提交对数据库中数据的改变是永久的。提交后的操作或者故障不会对事务的操作结果产生任何影响
事务结束的标记
COMMIT提交事务后事务正常结束事务异常通过RollBack回滚事务
事务处理模型
隐式事务每一条以分号结束的操作语句都是一个事务GaussDB(for MySQL)默认是隐式提交。显式事务事务有显式的开始和结束标记用START TRANSACTION开启事务以COMMIT或者ROLLBACK结束事务
START TRANSACTION
DELETE FROM dbbank.orders;
SELECT COUNT(*) FROM dbbank.orders;
ROLLBACK;数据不一致情况
脏读一个事务读取了其他事务中还没有提交的数据
不可重复读一个事务获得的数据可以被其他事务修改。在处理过程中多次读取同一个数据这个数据可能发生变化
幻(影)读是不可重复读的一种特殊情况。当重复读后一个事务发现莫名其妙多了一些数据或者少了一些数据这些数据就被成为幻影数据。 事务隔离级别
ANSI SQL标准定义了四种事务隔离级别来避免三种数据不一致问题。
序列化系统的所有事务串行执行能够避免所有数据不一致情况。但是开启该级别会导致系统的并发度大幅下降。可重复读一个事务一旦开始事务过程中读取的所有数据不允许被其他事务修改但这样依然会出现幻读情况。已提交读一个事务能够读取到提交过的数据。但是这么做会出现不可重复读。未提交读一个事务可以读取被其他事务修改过但还没有提交的数据。但是这么做会出现脏读。