前言:本章着重考察DBAS系统层次结构,对锁相关的概念也有涉及
如发现内容错误,评论区轰炸
4.1
1. 软件设计过程由总体设计、概要设计和详细设计组成
2. 功能模块内应该保持较高的内聚度,功能模块间应保持较低的耦合度,这就是我们经常说的高内聚、低耦合
4.2
DBAS总体设计包括DBAS体系结构设计、DBAS软件总体设计、软硬件选型与配置设计、业务规则初步设计
1. 客户/服务器(C/S)结构
应用业务规则一般在客户端实现
2. 三层浏览器/服务器(B/S)结构
应用业务规则一般在Web应用服务器实现,事务处理在数据库服务器完成
表示层位于客户端,由Web浏览器实现
功能层位于Web应用服务器,实现面向具体应用领域的业务规则
数据层位于数据库服务器,通过DBMS完成具体的数据存储和数据存取等数据管理功能
4.3
表示层:负责与用户交互,也是用户能看到的层次
业务逻辑层:负责数据访问层和表示层之间的数据交换。该层级包括构件设计
数据访问层:负责与DBMS系统进行交互
数据持久层:负责保存和管理应用系统数据,包括完整性维护工作,交叉引用矩阵来调整数据文件的组织结构
DBMS有两个元操作,read(x)表示将数据库磁盘文件中的数据项x读入内存缓冲区,write(x)则是表示读出的相反操作(概要设计阶段用read和write原语来表述操作)
4.4
人机界面设计采用原型迭代法:初步设计、用户界面细节设计、原型设计与改进
4.5
安全性保护
完整性保护
并发控制:封锁技术一般有排它锁(x锁)和共享锁(s锁)
排它锁指的是A用户在数据操作的时候为其加上锁,然后其他的用户就访问不了(排他)被加锁的数据了
共享锁:两个用户可以并发访问同一个区域的数据
数据库的备份与恢复
数据加密传输
防火墙属于数据库网络环境安全
4.6
DBAS的实施阶段包括:创建数据库、装载数据、编写与调试应用程序、数据库试运行
4.X
1. 死锁
死锁的发生在程序运行的过程中非常的致命,它会让程序陷入到无限等待的状态下,所以避免死锁发生很重要。
首先我们需要了解在什么时候会发生死锁,当张三访问资源1的时候会为它加锁,王八在访问资源2的时候为其加锁,这时候看起来互不干扰相安无事
但是一旦他们相互请求对方加锁的资源,此时张三需要等待王八解锁资源2才能继续接下来的业务,而王八也需要张三解锁资源1才能进行业务,这样他俩就会一直相互等待下去,从而产生死锁
为了避免发生这样的问题,我们有不同的解决方法来避免程序中的死锁。第一种方法是当张三访问资源的时候,一次请求需要的所有资源,然后一起加锁,这样可以避免事务执行的过程中请求不到需要的资源。还有一种方法是当用户请求不到需要的资源的时候,直接释放现有已经加锁的数据,让其它用户先使用完再进行请求
2. 活锁
顾名思义,活锁就是活着的锁(doge),这活锁和死锁最大的差距是,死锁没有办法自己解开,而活锁是有可能自己解开的。我们来看一下什么状况下会产生活锁
比如现在用户B正在访问资源,然后A等待资源解锁,但是当资源解锁之后迅速被用户C锁上了,就这样接着D、E、F等用户都来强资源,导致用户A一直等待但访问不到资源。
活锁这个“活”就体现在这种状况不是一直持续下去的,用户A还是有可能在等待一段时间后请求到该资源。关于活锁的解决方法可以参考CSMA/CD那种不断检测的机制。