软考-系统分析师-案例总结-数据库
2024-12-23 10:44:03 0 举报
AI智能生成
软考-系统分析师-案例总结-数据库
作者其他创作
大纲/内容
数据库安全性技术
用户标识和鉴别
最外层的安全保护措施,可以使用用户账户、口令和随机数检验等方式
存取控制(数据 授权)
对用户进行授权,包括操作类型(例如,查找、更新或删除等)和数据对象的权限
视图和物化视图
通过视图的方式进行授权
视图
视图是保存在数据库中的SELECT查询,其内容由查询定义,因此,视图不是真实存在的基础表,而是从一个或者多个表中导出的虚拟的表。
视图优点
1)视点集中
视图只展示与用户相关的数据。
视图只展示与用户相关的数据。
2)简化操作
在每一次执行相同的查询时,不必重新写查询语句,只要一条简单的查询
在每一次执行相同的查询时,不必重新写查询语句,只要一条简单的查询
3)定制数据
视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。
视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。
4)合并分割数据
在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。
在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。
5)安全性
视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可以访问。
视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可以访问。
物化视图
在物化视图中数据查询结果被固化起来,物化视图也可以称为快照。
审计
用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来
密码存储和传输
对远程终端信息用密码传输
存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库所提供的一种数据库对象,通过存储过程定 义一段代码,提供给应用程序调用来执行。
从安全性的角度考虑,更新数据时,通过提供存储过程让第三方调用,将需要更新的数据传入存储过程,而在存储过程内部用代码分别对需要的多个表进行更新,从而避免了向第三方提供系统的表结构,保证了系统的数据安全。
数据库完整性技术
触发器
触发器是一种特殊的存储过程,当数据发生变化时,触发器会产生某种动作。
使用触发器有助于强制保持数据库的数据完整性。
使用触发器有助于强制保持数据库的数据完整性。
触发器作用
强制数据完整性
自动更新相关数据
实施业务规则
记录变更历史
生成复杂计算字段
分类
按照触发时间分类
before触发器
after触发器
按触发事件分类
insert触发器
update触发器
delete触发器
数据库性能优化技术
反规范化技术
优点
避免进行表之间的连接操作,可以提高数据操作的性能。
缺点
数据的重复存储,浪费了磁盘空间;
可能出现数据的完整性问题,为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度。
反规范化技术 类型
增加冗余列
增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。
增加派生列
增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。
如:商品总价
重新组表
重新组表如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
水平分割表
按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
垂直分割表
对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少 1/0 次数。
反规范化保持事务一致性方法
触发器
事务机制保证
集中式
批处理脚本
应用保证
数据库分区技术
分区跟分片特点差不多
分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介质中,实际上还是一张表。
优点
减少维护工作量。独立管理每个分区比管理单张大表要轻松得多。
增强数据库的可用性。如果表的一个或几个分区由于系统故障而不能被使用,那么表其余的分区仍然可以使用;如果系统故障只影响表的一部分分区,那么,只有这部分分区需要修复,这就比修复整张大表耗费的时间少许多。
均衡1/0,减少竞争。通过把表的不同分区分配到不同的磁盘来平衡1/0改善性能。分区对用户保持透明。最终用户感觉不到分区的存在。
提高查询速度。对大表的查询、增加、修改等操作可以分解到表的不同分区中来并行执行。
分区技术类型
水平分区
范围分区
使用最多。数字/日期。如,1-100,101-200;
哈希分区
随机,使用一般。
如,10000(2452,2496,2501,2399)
保证数据是均匀分散的
当在下列情况下哈希分区比范围分区更好:
预先不知道将多少数据映射到给定范围内;
范围分区的大小会有很大的差异,或者很难手动平衡:
范围分区将导致数据不合需要地聚集。
列表分区
使用一般。数字/日期/字符。如,1,2,3;2020.01,2020.02;北京,上海,广州
如果表的某个列的值可以枚举,则可以考虑使用分区表。
对比
垂直分区
主从复制、读写分离
主从复制技术
集群技术的一种
读写分离设置物理上不同的主/从服务器,让主服务器负责数据的写操作,从服务器
负责数据的读操作,从而有效减少数据并发操作的延迟。
负责数据的读操作,从而有效减少数据并发操作的延迟。
引入主从复制机制所带来的好处:
(1)避免数据库单点故障
主服务器实时、异步复制数据到从服务器当主数据库宕机时,可在从数据库中选择一个升级为主服务器,从而防止数据库单点故障。
(2)提高查询效率
根据系统数据库访问特点,可以使用主数据库进行数据的插入、删除及更新等写操作,而从数据库则专门用来进行数据查询操作,从而将查询操作分担到不同的从服务器以提高数据库访问效率。
主从数据库之间通过 binarylog(二进制日志)进行数据的同步。
同步过程
binlog有三种模式
STATEMENT
基于SOL语句的复制,每一条更新的语句(insert、updatedelete)都会记录在binlog中,进而同步到从库的relaylog中,被从库的SQL线程取出来,回放执行。
该模式的优点是binlog的日志量可能会比较少,比如个涉及行数为1000行的update语句:同步这一个语句,就同步了1000行的数据。
缺点是:同步的SOL语句里如果含有绑定本地变量的函数、关键字时,可能造成主从不一致的情况。
ROW
基于行的复制,不记录SQL语句,只记录了哪个记录更新前和更新后的数据,可以保证主从之间数据绝对相同。
缺点是:1条SQL更新1000行的数据无法再偷懒,必须原原本本同步1000行的数据量。
MIXED
以上两种模式的混合,选取两者的优点。
对于有绑定本地特性、评估可能造成主从不一致的SOL语句,则自动选用ROW,其他的选择STATEMENT。
Mysql主从同步的同步模式
① 全同步
当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
② 半同步
主库只需要等待至少一个从库节点从 Binlog 中收到该请求,并保存到 Relay Log 文件即可,主库不需要等待所有从库给主库反馈。
③ 异步
主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。
子主题
索引(clustered)
索引过多有时会带来一系列的副作用
(1)过多的索引会占用大量的存储空间;
(2)更新开销,更新语句会引起相应的索引更新;
(3)过多索引会导致查询优化器需要评估的组合增多:
(4)每个索引都有对应的统计信息,索引越多则需要的统计信息越多;
(5)聚集(聚簇)索引的变化会导致非聚集(非聚簇)索引的同步变化。
分布式技术
分布式事务
1PC:是最基础,通信成本最低,容错性最差的一致性算法
子主题
2PC
2PC是在1PC的基础上,在这一轮通信前面又引入了额外的一轮通信,被称作Prepare阶段。
Proposer征求各个备份节点的意见,并根据各备份的反馈做出决定是否要实际进行第二阶段,也即真正的执行并持久化复制操作的阶段(Commit)。
Proposer征求各个备份节点的意见,并根据各备份的反馈做出决定是否要实际进行第二阶段,也即真正的执行并持久化复制操作的阶段(Commit)。
第一个阶段:准备阶段
子主题
实质复制阶段,Commit阶段。Proposer向各备份节点发出决定(Commit还是Abort)。
子主题
缺点:会有阻塞问题(在询问时大家都在等待)
在commit过程中某些节点也会失败
在commit过程中某些节点也会失败
达到最终的一致性、可用性
分布式缓存技术
为了减轻数据库服务器的压力,可以采用分布式缓存系统,将应用系统经常使用的数据放置在内存,降低对数据库服务器的查询请求,提高系统性能。
redis用作缓存组件时,其基于内存的读写特性,比基于磁盘读写的数据库性能要高很多,适合缓存高频热点的数据,来提高读性能。这样可以降低对数据库服务器的查询请求,提高系统性能。
键值数据库成为理想的缓冲层解决方案(KV数据库)
Redis有时候会被人们称为“强化版的Memcached”支持持久化、数据恢复、更多数据类型
由于存在“一份数据存放了多个位置”,所以要考虑数据的一致性问题。所以读写数据的基本步骤为:
读数据:
根据key读缓存;
读取成功则直接返回;
若key不在缓存中时,根据key 读数据库;
读取成功后,写缓存;
成功返回。
根据key读缓存;
读取成功则直接返回;
若key不在缓存中时,根据key 读数据库;
读取成功后,写缓存;
成功返回。
写数据
① 根据key值写数据库;
② 成功后更新缓存key值;
③ 成功返回。
① 根据key值写数据库;
② 成功后更新缓存key值;
③ 成功返回。
NOsql数据库
子主题
子主题
0 条评论
下一页