当前位置: 首页 > news >正文

系统架构设计师备考之架构设计专业知识

1.信息系统基础知识

1.1.信息系统概述

信息系统的定义

信息系统是由计算机软硬件、网络和通信设备、信息资源、用户和规章制度组成的以处理信息流为目的的人机一体化系统。信息系统的功能有:输入、存储、处理、输出和控制。理查德·诺兰(Richard L. Nolan)将信息系统的发展道路划分为初始、传播、控制、集成、数据管理和成熟6个阶段。

信息系统的分类

信息系统分为业务(数据)处理系统、管理信息系统、决策支持系统、专家系统、办公自动化系统、综合性信息系统等6类。

信息系统的生命周期 

信息系统的生命周期分为产生、开发、运行和消亡4个阶段。

 信息系统建设原则

信息系统建设原则可以分为高层管理人员介入原则、用户参与开发原则、自顶向下规划原则、工程化原则等。

信息系统的开发方法 

信息系统的开发方法主要有:结构化方法、原型法、面向对象方法、面向服务的方法、敏捷方法、构件化开发方法等。

原型法

原型法也称快速原型法,可以根据用户的初步需求利用系统工具快速建立一个系统模型,与用户交流。
原型法按照实现功能划分可以分为:
1)水平原型:行为原型,用于界面。细化需求但并未实现功能。
2)垂直原型:结构化原型,用于复杂算法的实现,实现了部分功能。
原型法按照最终结果划分可以分为:
1)抛弃式:探索式原型,解决需求不确定性、二义性、不完整性、含糊性等。
2)演化式:逐步演化为最终系统,用于易于升级和优化的场合,适用于Web项目。 

构件化开发方法

基于构件/组件(Component)的软件开发是解决复杂环境下软件规模与复杂性的一种手段。构件并非一定包含类,一个类元素只能属于一个构件。构件的获取方式有:
1)从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可复用的构件。
2)通过遗留工程(Legacy Engineering),将具有潜在复用价值的构件提取出来,得到可复用的构件。
3)从市场上购买现成的商业构件。
4)开发新的符合要求的构件。
获取到的构件可以存放到构件库中,根据需求裁剪使用。构件的分类方式见表
构件检索的方式也可以分为:基于关键字的检索、刻面检索法、超文本检索法。 

 

面向服务的方法

面向服务的方法是在面向对象方法的基础上发展起来的,对于跨构件的功能调用,则采用接口的形式暴露出来。进一步将接口的定义与实现进行解耦,则催生了服务和面向服务(Service-Oriented,SO)的开发方法。对于系统架构设计师考试我们重点关注的是面向服务的架构(SOA),这部分内容将在后续中介绍。 

敏捷方法

敏捷方法是一种以人为核心、迭代、循序渐进的开发方法。敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要的特征。
1)敏捷方法是“适应型”而非“预设型”。重型方法试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷方法则欢迎变化。
2)敏捷方法是“面向人的”而非“面向过程的”。它们试图使软件开发工作能够利用人的特点,充分发挥人的创造能力,强调软件开发应当是一项愉快的活动。
敏捷方法的核心思想主要有以下3点:
1)敏捷方法是适应型,而非可预测型。
2)敏捷方法以人为本,而非以过程为本。
3)属于迭代增量式的开发过程。 

1.2.信息化的典型应用 

TPS和EDPS

业务处理系统(Transaction Processing System,TPS)或电子数据处理系统(Electronic Data Processing System,EDPS)是信息化的典型应用。业务处理系统可以实现计算机自动化、减轻处理数据的负担、提高处理效率。它既是信息系统发展的最初级形式,也是基础和桥梁。因其简单和成熟常用结构化生命周期法开发。对事务所发生的数据进行输入、处理和输出(即IPO)。业务系统数据处理周期分为数据输入、数据处理、数据库的维护、文件报表的生成和查询处理5个阶段(对功能的进一步阐述)。数据处理方式包括批处理(Batch Processing)方式和联机事务处理(OnLine Transaction Processing,OLTP)方式

管理信息系统 

管理信息系统(Manage Information System,MIS)是在TPS基础上发展的高度集成化的人机信息系统,用于企业整体的某些管理和业务层面的管理决策。MIS系统的上层是子系统和功能,底层是各个过程,功能由过程组合实现。一个MIS系统可以用一个功能/层次矩阵表示。共有销售市场子系统、生产子系统、后勤子系统、人事子系统、财务和会计子系统、信息处理子系统和高层管理子系统7个子系统。

决策支持系统 

决策支持系统(Decision Support System,DSS)有两种定义:

(1)定义一:DSS是一个由语言系统、知识系统和问题处理系统3个互相关联的部分组成的,基于计算机的系统。特征如下:
1)数据和模型是DSS的主要资源。
2)用来支援用户作决策。
3)主要用于解决半结构化及非结构化问题。
4)作用在于提高决策的有效性而不是提高决策的效率。 

(2)定义二:DSS是一个交互式的、灵活的、适应性强的基于计算机的信息系统。特征如下:
1)针对上层管理人员。
2)界面友好。
3)将模型、分析技术与传统的数据存取与检索技术结合起来。
4)对环境及决策方法改变的灵活性与适应性。
5)支持但不是代替决策。
6)利用先进信息技术快速传递和处理信息。

DSS系统的管理者处于核心地位,结合DSS的支持进行决策。DSS有两种级别结构形式:两库结构和基于知识的结构。 DSS支撑九项基本功能:
①多层决策,为决策整理和提供数据;
②收集、存储和提供外部信息;
③收集和提供活动的反馈信息;
④具有模型的存储和管理能力;
⑤对常用的各种方法的存储和管理;
⑥对各种数据、模型、方法进行管理;
⑦数据加工;
⑧具有人—机接口和图形加工;
⑨支持分布使用方式。

特点是面向决策者、支持半结构化问题、辅助支持、过程动态、交互。组建过程是:数据重组、建立数据仓库、建立数据字典、数据挖掘、建立模型。

 专家系统

基于知识的专家系统(Expert System,ES)是一种智能的计算机程序,该程序使用知识与推理过程,求解那些需要资深专家的专门知识才能解决的高难度问题。ES属于人工智能,用于求解半结构化或非结构化问题。专家系统包括:机器人技术、视觉系统、自然语言处理、学习系统和神经网络等分支。专家系统与一般计算机系统的比较见表4.2。
具体来说ES具有超越时间限制、操作成本低廉、易于传递与复制、处理手段一致、善于克服难题、适用特定领域等特点。ES由知识库、综合数据库、推理机、知识获取、解释程序、人—机接口组成。其中,推理机和知识库一起构成专家系统的核心。一般的专家系统通过推理机与知识库和综合数据库的交互作用来求解领域问题。

 办公自动化系统

办公自动化系统(Office Automatic System,OAS)可以解决包括数据、文字、声音、图像等信息的一体化处理问题,是一个集文字、数据、语言、图像为一体的综合性、跨学科的人机信息处理系统,可以进行事务处理、信息管理和辅助决策。OAS由计算机设备、办公设备、数据通信及网络设备、软件系统构成。

 企业资源规划

企业资源规划(Enterprise Resource Planning,ERP)中的企业的所有资源包括三大流:物流、资金流和信息流。ERP是在信息技术基础上集成了企业的所有资源信息,为企业提供决策、计划、控制与经营业绩评估的全方位和系统化的管理平台。ERP的管理范围涉及企业的所有供需过程,是对供应链的全面管理,还与人事系统和CRM等关联。ERP包括生产预测、销售管理、经营计划、主生产计划、物料需求计划、能力需求计划、车间作业计划、采购与库存管理、质量与设备管理和财务管理共11个基本模块。ERP的功能有:支持决策、不同行业的针对性IT解决方案、提供全行业和跨行业的供应链

 1.3.信息系统概述

电子政务

电子政务是利用信息技术和其他相关技术,实现公务、政务、商务、事务的一体化管理与运行的政府形态改造的系统工程。行为主体是:政府(Government)、企(事)业单位(Business)及居民(Citizen)。具体分类见表4.3

 企业信息化

企业信息化是企业利用现代信息技术,实现经营活动的自动化、便捷化、网络化和智能化,以加强企业核心竞争力的过程。企业信息化是技术和业务的融合,从企业战略、业务运作和管理运作3个层面去实现。企业信息化的方法有:业务流程重构方法、核心业务应用方法、信息系统建设方法、主题数据库方法、资源管理方法、人力资本投资方法

电子商务 

电子商务指利用Web提供的通信手段在网上买卖产品或提供服务,及其衍生行为。主要模式有:B2B、B2C、C2C、O2O(线上购买线下的服务)


 2.信息安全技术基础知识

2.1.信息安全基础知识

信息安全

 信息安全是指为数据处理系统而采取的技术的和管理的安全保护,保护计算机硬件、软件、数据不因偶然的或恶意的原因而遭到破坏、更改和泄露。信息安全的基本要素有机密性、完整性、可用性、可控性与可审查性。信息安全的范围包括设备安全、数据安全、内容安全和行为安全。其中数据安全即采取措施确保数据免受未授权的泄露、篡改和毁坏,包括秘密性、完整性和可用性3个方面。信息存储安全的范围:信息使用的安全、系统安全监控、计算机病毒防治、数据的加密和防止非法的攻击等。

网络安全 

网络安全漏洞和隐患表现在物理安全性、软件安全漏洞、不兼容使用安全漏洞等方面。网络安全威胁表现在非授权访问、信息泄露或丢失、破坏数据完整性、拒绝服务攻击、利用网络传播病毒等方面。安全措施的目标包括访问控制、认证、完整性、审计和保密等5个方面。

2.2.信息安全系统的组成框架

技术体系

从技术体系看,信息安全系统涉及基础安全设备、计算机网络安全、操作系统安全、数据库安全、终端设备安全等多方面技术。

组织机构体系 

信息系统安全的组织机构分为决策层、管理层和执行层3个层次

管理体系 

信息系统安全的管理体系由法律管理、制度管理和培训管理3个部分组成。

2.3.信息加解密技术

数据加密

数据加密是防止未经授权的用户访问敏感信息的手段,保障系统的机密性要素。数据加密有对称加密算法、非对称加密算法两种。

对称密钥加密算法 

对称密钥算法的加密密钥和解密密钥相同,又称为共享密钥算法。对称加密算法主要有:
(1)使用密钥加密的块算法(Data Encryption Standard,DES),明文切分为64位的块(即分组),由56位的密钥控制变换成64位的密文。
(2)三重DES(Triple-DES)是 DES 的改进算法,使用两把56位的密钥对明文做三次DES加解密,密钥长度为112位。
(3)国际数据加密算法(International Data Encryption Algorithm,IDEA),分组长度 64 位,密钥长度128位,已经成为全球通用的加密标准。
(4)高级加密标准(Advanced Encryption Standard,AES),分组长度128位,支持128位、192 位和256 位3种密钥长度,用于替换脆弱的DES算法,且可以通过软件或硬件实现高速加解密。
(5)SM4国密算法,分组长度和密钥长度都是128位。

非对称密钥加密算法 

非对称密钥加密算法的加密密钥和解密密钥不相同,又称为不共享密钥算法或公钥加密算法。在非对称加密算法中用公钥加密,私钥解密,可实现保密通信;用私钥加密,公钥解密,可实现数字签名。非对称加密算法可以分为:
(1)RSA(Rivest,Shamir and Adleman)是一种国际通用的公钥加密算法,安全性基于大素数分解的困难性,密钥的长度可以选择,但目前安全的密钥长度已经高达2048位。RSA的计算速度比同样安全级别的对称加密算法慢1000倍左右。
(2)SM2国密算法,基于椭圆曲线离散对数问题,在相同安全程度的要求下,密钥长度和计算规模都比RSA小得多。

2.5.密钥管理技术 

密钥的使用控制

控制密钥的安全性主要有密钥标签和控制矢量两种技术。密钥的分配发送有物理方式、加密方式和第三方加密方式。该第三方即密钥分配中心(Key Distribution Center,KDC)。

公钥加密体制的密钥管理 

公钥加密体制的密钥管理。有直接公开发布(如 PGP)、公用目录表、公钥管理机构和公钥证书4种方式。公钥证书可以由个人下载后保存和传递,证书管理机构为 CA(Certificate Authority)。

 2.6.访问控制及数字签名技术

基本模型

访问控制技术包括3个要素,即主体、客体和控制策略访问控制包括认证、控制策略实现和审计3方面的内容。审计的目的是防止滥用权力。

 访问控制的实现技术

(1)访问控制矩阵(Access Control Matrix,ACM),以主体为行索引,以客体为列索引的矩阵,该技术是后面三个技术的基础,当主客体元素很多的时候实现困难。
(2)访问控制表(Access Control Lists,ACL),按列(即客体)保存访问矩阵,是目前最流行、使用最多的访问控制实现技术。
(3)能力表(Capabilities),按行(即主体)保存访问矩阵。
(4)授权关系表(Authorization Relations),抽取访问矩阵中的非空元素保存,当矩阵是稀疏矩阵的时候很有效,常用于安全数据库系统。

数字签名 

数字签名是公钥加密技术与数字摘要技术的应用。数字签名的条件是:可信、不可伪造、不可重用、不可改变和不可抵赖基于对称密钥的签名只能在两方间实现,而且需要双方共同信赖的仲裁人。利用公钥加密算法的数字签名则可以在任意多方间实现,不需要仲裁且可重复多次验证。实际应用时先对文件做摘要,再对摘要签名,这样可以大大提升数字签名的速度。同时摘要的泄露不影响文件保密。

 2.7.信息安全的抗攻击技术

密钥的选择

密钥在概念上被分成数据加密密钥(DK)和密钥加密密钥(KK)两大类。后者用于保护密钥。加密的算法通常是公开的,加密的安全性在于密钥。为对抗攻击,密钥生成需要考虑增大密钥空间、选择强钥和密钥的随机性3个方面的因素。

拒绝服务攻击 

DoS是使系统不可访问并因此拒绝合法的用户服务要求的行为,侵犯系统的可用性要素。传统拒绝服务攻击的分类有消耗资源、破坏或更改配置信息、物理破坏或改变网络部件、利用服务程序中的处理错误使服务失效等4种模式。
目前常见的DoS攻击模式为分布式拒绝服务攻击(Distributed Denial of Service,DDoS)。
现有的DDoS工具一般采用Client(客户端)、Handler(主控端)、Agent(代理端)三级结构。
DoS的防御包括特征识别、防火墙、通信数据量的统计、修正问题和漏洞4种方法。

欺骗攻击与防御 

(1)ARP欺骗:ARP协议解析IP地址为MAC网卡物理地址,欺骗该机制即可阻断正常的网络访问。常用防范办法为固化ARP表、使用ARP服务器、双向绑定和安装防护软件
(2)DNS欺骗:DNS协议解析域名为IP地址,欺骗该机制可以使用户访问错误的服务器地址。其检测有被动监听检测、虚假报文探测和交叉检查查询3种方法。
(3)IP欺骗:攻击者修改IP数据报的报头,把自身的IP地址修改为另一个IP,以获取信任。常用防火墙等防范IP欺骗。

端口扫描 

端口扫描是入侵者搜集信息的几种常用手法之一。端口扫描尝试与目标主机的某些端口建立连接,如果目标主机该端口有回复,则说明该端口开放,甚至可以获取一些信息。端口扫描有全TCP连接、半打开式扫描(SYN扫描)、FIN扫描、第三方扫描等分类。

 针对TCP/IP堆栈的攻击方式

(1)同步包风暴(SYN Flooding):是应用最广泛的一种DoS攻击方式,攻击TCP协议建立连接的三次握手,让目标主机等待连接完成而耗尽资源。可以减少等待超时时间来防范。
(2)ICMP攻击:例如“Ping of Death”攻击操作系统的网络层缓冲区,旧版操作系统会崩溃死机。防范方法是打补丁、升级到新版操作系统
(3)SNMP攻击:SNMP协议常用于管理网络设备,早期的SNMP V1协议缺少认证,可能被攻击者入侵。防范方法是升级SNMP协议到V2以上并设置访问密码。

 系统漏洞扫描

系统漏洞扫描指对重要计算机信息系统进行检查,发现其中可能被黑客利用的漏洞。漏洞扫描既是攻击者的准备工作,也是防御者安全方案的重要组成部分。系统漏洞扫描分为:
(1)基于网络的漏洞扫描,通过网络来扫描目标主机的漏洞,常常被主机边界的防护所封堵,因而获取到的信息比较有限。
(2)基于主机的漏洞扫描,通常在目标系统上安装了一个代理(Agent)或者是服务(Services),因而能扫描到更多的漏洞。有扫描的漏洞数量多、集中化管理、网络流量负载小等优点。

 2.8.信息安全的保障体系与评估方法

等级保护

《计算机信息系统 安全保护等级划分准则》(GB 17859—1999)规定了计算机系统安全保护能力的5个等级。
(1)第1级:用户自主保护级(对应TCSEC的C1级)。
(2)第2级;系统审计保护级(对应TCSEC的C2级)。
(3)第3级;安全标记保护级(对应TCSEC的B1级)。
(4)第4级:结构化保护级(对应TCSEC的B2级)。
(5)第5级:访问验证保护级(对应TCSEC的B3级)。

安全保密技术 

(1)数据泄密(泄露)防护(Data Leakage Prevention,DLP)。DLP是通过一定的技术手段,防止企业的指定数据或信息资产以违反安全策略规定的形式流出企业的一种策略。
(2)数字水印(Digital Watermark)。数字水印是指通过数字信号处理方法,在数字化的媒体文件中嵌入特定的标记。水印分为可感知的和不易感知的两种。

安全协议 

(1)SSL协议。SSL协议是介于应用层和TCP层之间的安全通信协议,提供保密性通信、点对点身份认证、可靠性通信3种安全通信服务。
(2)PGP(Pretty Good Privacy)。PGP 是一种加密软件,应用了多种密码技术,包括RSA、IDEA、完整性检测和数字签名算法,实现了一个比较完善的密码系统。广泛地用于电子邮件安全。
(3)互联网安全协议(Internet Protocol Security,IPSec)。IPSec 是工作在网络层的安全协议,主要优点是它的透明性,提供安全服务不需要更改应用程序。
(4)SET协议。主要用于解决用户、商家和银行之间通过信用卡支付的交易问题,保证支付信息的机密、支付过程的完整、商户和持卡人身份合法性及可操作性。
(5)HTTPS协议。详见后续

 信息系统的安全风险与评估

信息系统的安全风险是指由于系统存在的脆弱性所导致的安全事件发生的概率和可能造成的影响。
风险评估是对信息系统及由其处理、传输和存储的信息的保密性、完整性和可用性等安全属性进行科学评价的过程,是信息安全保障体系建立过程中重要的评价方法和决策机制。风险评估的基本要素为脆弱性、资产、威胁、风险和安全措施。其中,威胁是一种对机构及其资产构成潜在破坏的可能性因素或者事件。脆弱性评估是安全风险评估中的重要内容,脆弱性不仅包括各种资产本身存在的脆弱性,没有正确实施的安全保护措施本身也可能是一个安全薄弱环节。风险计算模型包含信息资产、弱点/脆弱性、威胁等关键要素。


3.系统工程基础知识

3.1.系统工程

定义与特点

系统工程是运用系统方法,对系统进行规划、研究、设计、制造、试验和使用的组织管理技术,是人们用科学方法解决复杂问题的一门技术。系统工程方法的特点是整体性、综合性、协调性、科学性和实践性。

霍尔的三维结构

霍尔的三维结构是美国系统工程专家霍尔(A.D.Hall)等人于1969年提出的一种系统工程方法论,形成了由时间维、逻辑维和知识维组成的三维空间结构。时间维分为规划、拟订方案、研制、生产、安装、运行、更新7个时间阶段;逻辑维包括明确问题、确定目标、系统综合、系统分析、优化、决策、实施7个逻辑步骤;知识维包括工程、医学、建筑、商业、法律、管理、社会科学、艺术等知识和技能。 

 切克兰德方法

切克兰德方法的核心不是“最优化”而是“比较”与“探寻”。将工作过程分为认识问题、根底定义、建立概念模型、比较及探寻、选择、设计与实施、评估与反馈7个步骤。

并行工程

并行工程(Concurrent Engineering)方法是对产品及其相关过程(包括制造过程和支持过程)进行并行、集成化处理的系统方法和综合技术,目标是提高质量、降低成本、缩短产品开发周期和产品上市时间。 

综合集成法

钱学森等提出从系统的本质出发可以把系统分为简单系统和巨系统两大类。开放的复杂巨系统的一般基本原则:整体论、相互联系、有序性、动态,主要性质是开放性、复杂性、进化与涌现性、层次性和巨量性。 

WSR 系统方法

WSR系统方法是物理—事理—人理方法论的简称。具有中国传统哲学的思辨思想,是多种方法的综合统一,属于定性与定量分析综合集成的东方系统思想。一般工作过程可理解为理解意图、制定目标、调查分析、构造策略、选择方案、协调关系和实现构想7步。 

 系统工程的生命周期

对系统工程生命周期进行定义的目的是以有序而且高效的方式建立一个满足利益攸关者需求的框架。系统工程的生命周期阶段包括探索研究、概念阶段、开发阶段、生产阶段、使用阶段、保障阶段和退役阶段。生命周期方法有计划驱动方法、渐进迭代式开发、精益开发和敏捷开发

基于模型的系统工程 

MBSE是建模方法的形式化应用,以使建模方法支持系统需求、分析、设计、验证和确认等活动,持续贯穿到所有生命周期阶段。产物包括:在需求分析阶段,产生需求图、用例图及包图;在功能分析与分配阶段,产生顺序图、活动图及状态机(State Machine)图;在设计综合阶段,产生模块定义图、内部块图及参数图等。系统工程的三大支柱:建模语言、建模工具和建模思路

 3.2.系统性能

系统性能评价

系统性能评价指标是软件、硬件的性能指标的集成。其中:
(1)评价计算机的主要性能指标有时钟频率(主频)、运算速度、运算精度、数据处理速率(Processing Data Rate,PDR)、吞吐率等。
(2)评价路由器的主要性能指标有设备吞吐量、端口吞吐量、全双工线速转发能力、路由表能力、背板能力、丢包率、时延、时延抖动、协议支持等。评价交换机所依据的性能指标有端口速率、背板吞吐量、缓冲区大小、MAC地址表大小等。
(3)评价网络的性能指标有设备级性能指标、网络级性能指标、应用级性能指标、用户级性能指标和吞吐量。
(4)评价操作系统的性能指标有系统上下文切换、系统响应时间、系统的吞吐率(量)、系统资源利用率、可靠性和可移植性。
(5)衡量数据库管理系统的主要性能指标有最大并发事务处理能力、负载均衡能力、最大连接数等。
(6)评价Web服务器的主要性能指标有最大并发连接数、响应延迟和吞吐量

 性能指标计算

主要方法有定义法、公式法、程序检测法和仪器检测法。计算公式主要有:
(1)每秒百万次指令数(Millions of Instructions Per Second,MIPS) MIPS=指令条数/(执行时间×10^6)
(2)峰值计算,是指计算机每秒钟能完成的浮点计算最大次数。包括理论浮点峰值和实测浮点峰值。 理论浮点峰值= CPU主频×CPU每个时钟周期执行浮点运算的次数×系统中CPU数
(3)等效指令速度法或吉普森(Gibson)法,早期用加法指令的运算速度来衡量计算机的速度,后来发展为各个指令的运算时间乘以占比。通常加、减法指令占 50%,乘法指令占15%,除法指令占5%,程序控制指令占15%,其他指令占15%。
式中:Wi为第i种指令的使用占比;Ti为第i种指令的运算时间。

性能调整

性能调整由查找和消除瓶颈组成。对于数据库系统,性能调整主要包括CPU/内存使用状况、优化数据库设计、优化数据库管理以及进程/线程状态、硬盘 I/O 及剩余空间、日志文件大小等。对于应用系统,性能调整主要包括应用系统的可用性、响应时间、并发用户数以及特定应用的系统资源占用等

阿姆达尔(Amdahl)解决方案 

阿姆达尔定律:计算机系统中对某一部件采用某种更快的执行方式所获得的系统性能改变程度,取决于这种方式所占总执行时间的比例。加速比的定义:
加速比=使用增强部件时完成整个任务的时间/不使用增强部件时完成整个任务的时间
新的执行时间=原来的执行时间×[(1−增强比例)+增强比例/增强加速比]
总加速比=原来的执行时间/新的执行时间=1/[(1−增强比例)+增强比例/增强加速
比]

加速比主要取决于两个因素:在原有的计算机上,能被改进并增强的部分在总执行时间中所占的比例,这个值称为增强比例,它永远小于等于1;通过增强的执行方式所取得的改进,即如果整个程序使用了增强的执行方式,那么这个任务的执行速度会有多少提高,这个值是在原来条件下程序的执行时间与使用增强功能后程序的执行时间之比。

 性能评估

(1)基准测试程序(Benchmark)定义:应用程序中用得最多、最频繁的那部分核心程序。 基准测试程序中,评测的准确程度依次递减:真实的程序、核心程序、小型基准程序和合成基准程序。基准测试程序有整数测试程序Dhrystone、浮点测试程序Linpack、Whetstone基准测试程序、SPEC基准测试程序和TPC基准程序
(2)Web服务器的性能评测方法有基准性能测试、压力测试和可靠性测试。
(3)系统监视的方法通常有系统内置命令、查阅系统日志、可视化技术3种方式。


4.软件工程基础知识 

4.1.软件工程

软件危机

具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。

软件过程模型 

软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程就是软件的生命周期。软件生命周期描述了软件从生到死的全过程。为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型被称为软件过程模型,有时也称为软件生命周期模型。常见的软件过程模型主要包括:

 瀑布模型(Waterfall Model)

是结构化开发方法使用的软件过程模型。瀑布模型的特点是因果关系紧密相连,前一个阶段工作的输出结果,是后一个阶段工作的输入。每一个阶段工作完成后都伴随着一个里程碑。缺点是需求难以一次确定、变更的代价高、结果难以预见、各阶段工作不能并行。

原型模型(Prototype Model)

又称快速原型,是原型方法使用的生命周期模型。原型模型解决了瀑布模型需求难以一次确定、结果难以预见的缺点。原型模型有原型开发和目标软件开发两个阶段。抛弃型原型将原型作为需求确认的手段,在需求确认结束后就被抛弃不用,继续用瀑布模型。演化性原型在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。 

螺旋模型(Spiral Model)

是在快速原型的基础上结合瀑布模型扩展而成。把整个软件开发流程分成多个阶段,每一个阶段都由目标设定、风险分析、开发和有效性验证、评审4部分组成。支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,强调其他模型忽视的风险分析。 

敏捷(Agile)模型

属于敏捷方法使用的模型。敏捷模型主要有极限编程(Extreme Programming,XP)、水晶系列方法、并列争球法(Scrum)、特征驱动开发方法(Feature Driven Development,FDD)等具体的敏捷方法,这些方法的显著特征如下:
极限编程(XP):高效、低风险、测试先行(先写测试代码,再编写程序)
水晶系列方法:不同的项目,采用不同的策略
并列争球法(Scrum):该方法侧重于项目管理。Scrum 包括一系列实践和预定义角色的过程骨架(是一种流程、计划、模式,用于有效率地开发软件)。在Scrum中,使用产品Backlog来管理产品的需求,产品Backlog是一个按照商业价值排序的需求列表。根据Backlog的内容,将整个开发过程分为若干个短的迭代周期(Sprint),在 Sprint 中,Scrum 团队从产品Backlog 中挑选最高优先级的需求组成Sprint Backlog。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。当所有Sprint结束时,团队提交最终的软件产品。
特征驱动开发方法:该方法会将开发人员分类,分为指挥者(首席程序员)、类程序员等。 

软件统一过程(Rational Unified Process,RUP)模型

RUP 是一种重量级过程模型,属于构件化开发使用的软件过程模型。其生命周期是一个二维的软件开发模型,划分为多个循环(Cycle),每个循环生成产品的一个新的版本,每个循环依次由初始、细化、构造和移交4个连续的阶段(Phase)组成,每个阶段完成确定的任务。RUP中有9个核心工作流,这9个核心工作流分别是:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境
RUP 的特点是用例驱动的、以架构为中心的、迭代和增量的软件开发过程。 

 

逻辑视图

对应最终用户,主要支持功能性需求,即在为用户提供服务方面系统所应该提供的功能。逻辑视图常用类图、对象图、状态图、协作图表示 

实现视图

又称为开发视图,对应程序员,关注软件开发环境下实际模块的组织,描述系统的各部分如何被组织为模块和组件即开发环境中软件的静态组织结构。该视图通常包含包图和组件图。 

进程视图

又叫过程视图,对应系统集成人员,考虑一些非功能性的需求,如性能和可用性,它可以解决并发性、分布性、系统完整性、容错性的问题。进程视图常用活动图表示 

部署视图

又叫物理视图,对应系统工程师。描述如何将前三个视图中所述的系统设计实现为一组现实世界的实体。展示了如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通信等问题。部署视图常用部署图表示。 

用例视图

所有其他视图都依靠用例视图(场景)来指导它们,这就是将模型称为“4+1”的原因。 

软件能力成熟度模型 

CMM 是一个概念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。

软件能力成熟度模型集成 

CMMI是在CMM的基础上发展而来的。CMMI提供了一个软件能力成熟度的框架,它将软件过程改进的步骤组织成5个成熟度等级:初始级、已管理级、已定义级、量化管理级、优化级量化管理级与已定义级的区别是对过程性能的可预测。

 4.2.需求工程

软件需求的层次

软件需求包括3个不同的层次。
(1)业务需求(Business Requirement),反映了组织机构或客户对系统、产品高层次的目标要求。
(2)用户需求(User Requirement),描述了用户使用产品必须要完成的任务,是用户对该软件产品的期望。业务需求和用户需求构成了用户原始需求文档的内容。
(3)功能需求(functional requirement),从系统操作的角度定义了开发人员必须实现的软件功能,来满足业务需求和用户需求。

 需求工程

需求工程是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束。需求工程由需求获取、需求分析、形成需求规格(或称为需求文档化)、需求确认与验证、需求管理5 个阶段组成。

软件需求规格说明书 

SRS 具体包括功能需求、非功能需求和约束。约束包括设计约束和过程约束。批准的SRS是需求开发和需求管理之间的桥梁。

 需求管理

需求管理是一个对系统需求变更、了解和控制的过程,包括变更控制、版本控制、需求跟踪等活动。

需求获取 

需求获取是获得系统必要的特征,或者是获得用户能接受的、系统必须满足的约束。需求获取的基本步骤:
(1)开发高层的业务模型。
(2)定义项目范围和高层需求。
(3)识别用户角色和用户代表。
(4)获取具体的需求。
(5)确定目标系统的业务工作流。
(6)需求整理与总结。
需求获取的方法包括用户面谈、需求专题讨论会、问卷调查、现场观察、原型化方法和头脑风暴法等。

需求变更 

变更控制委员会 

CCB由项目所涉及的多方成员共同组成,通常包括用户和实施方的决策人员。CCB是决策机构,不是作业机构,通常CCB的工作是通过评审手段来决定项目是否能变更,但不提出变更方案。过程及操作步骤为制定决策、交流情况、重新协商约定

 需求跟踪

需求跟踪提供了由需求到产品实现整个过程范围的明确查阅的能力。需求跟踪的目的是建立与维护“需求—设计—编程—测试”之间的一致性,确保所有的工作成果符合用户需求。需求跟踪有正向跟踪和逆向跟踪两种方式,合称为“双向跟踪”。不论采用何种跟踪方式,都要建立与维护需求跟踪矩阵

4.3.系统分析与设计 

结构化方法

结构化方法又称为面向功能的软件开发方法或面向数据流的软件开发方法。针对软件生存周期各个不同的阶段,有结构化分析、结构化设计和结构化编程等方法

 结构化分析(Structured Analysis,SA)

SA利用图形表达用户需求中的功能需求,使用的手段主要有数据流图(Data Flow Diagram,DFD)、数据字典、结构化语言、判定表以及判定树等。
数据流图(DFD)由4种基本元素组成:数据流、处理/加工、数据存储和外部项
结构化分析具体的建模过程及步骤为明确目标、确定系统范围、建立顶层DFD图、构建第一层DFD分解图、开发DFD层次结构图、检查确认DFD图。DFD图需要满足规则:父图数据流必须在子图中出现;一个处理至少有一个输入流和一个输出流;一个存储必定有流入和流出;一个数据流至少有一端是处理端;模型表达的信息是全面的、完整的、正确的和一致的。
数据字典(Data Dictionary)是一种标记用户可以访问的数据项和元数据的目录,是对系统中使用的所有数据元素定义的集合,包括数据项、数据结构、数据流、数据存储和处理过程。

结构化设计(Structured Design,SD)

SD是一种面向数据流的设计方法,以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。
SD分为概要设计和详细设计两个阶段,其中概要设计的主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是为每个模块设计实现的细节。
在SD中,模块是实现功能的基本单位,一般具有功能、逻辑和状态3个基本属性。 耦合表示模块之间联系的程度,耦合度从低到高依次如表7.1所示。 

 内聚

表示模块内部各代码成分之间联系的紧密程度,内聚度从高到低的排序见表7.2。
模块分解中应遵循“高内聚、低耦合”的设计原则。
概要设计使用系统结构图(Structure Chart,SC),又称为模块结构图,反映了系统的总体结构。
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的表示工具有图形工具、表格工具和语言工具。图形有业务流图、程序流程图、问题分析图(Problem Analysis Diagram,PAD)、NS 流程图等。

 结构化编程(Structured Programming,SP)

SP 通过顺序、分支和循环三种基本的控制结构可以构造出任何单入口单出口的程序。SP强调:自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。P 原则:程序=(算法)+(数据结构)。两者分开设计,以算法(函数或过程)为主。

数据库设计(概念结构设计部分)

概念结构设计建立抽象的概念数据模型,通常采用实体-联系图(Entity Relationship Diagram,E-R 图)来表示。 

 面向对象方法

面向对象的分析方法(Object-Oriented Analysis,OOA)

OOA模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。
OOA的基本原则有抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制和行为分析
OOA的5个基本步骤:确定对象和类、确定结构、确定主题、确定属性、确定方法。

面向对象设计方法(Object-Oriented Design,OOD)

在OOD中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。类封装了信息和行为,是具有相同属性、方法和关系的对象集合的总称。类可以分为3种类型:
1)实体类:一般来说是一个名词,通常都是永久性需要存储的,例如教师、学生。
2)控制类:是用于控制用例工作的类,控制对象(控制类的实例)通常控制其他对象或协调其他对象的行为,例如登录验证。
3)边界类:用于封装在用例内、外流动的信息或数据流,例如窗口、通信协议、接口等。 

面向对象程序设计(Object-Oriented Programming,OOP)

OOP 以对象为核心,该方法认为程序由一系列对象组成。OOP 的基本特点有封装、继承和多态。封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作组装到一起。继承是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。继承可以分为4类,分别为取代继承、包含继承、受限继承和特化继承。多态指同一操作作用于不同的对象,可以产生不同的结果。 

 数据持久化与数据库

永久保存对象的状态,需要进行对象的持久化(Persistence),把内存中的对象保存到数据库或可永久保存的存储设备中。在多层软件设计和开发中采用持久层(Persistence Layer)专注于实现数据持久化,将对象持久化到关系数据库中,需要进行对象/关系的映射(Object/Relation Mapping,ORM)。目前主流的持久化技术框架包括Hibernate、iBatis/Mybatis和JDO等。

Hibernate

是一个开源的全自动的ORM框架,对JDBC进行了非常轻量级的对象封装,提供抽象的HQL可以自动生成不同数据库的SQL语句,优点是具有跨数据库平台的特性。 

iBatis/Mybatis

提供手动的ORM实现,需要程序员手写SQL,优点是可以结合特定的数据库特性深度优化。 

 Java数据对象(Java Data Object,JDO)

是Java标准中的持久化API,提供了透明的对象存储,并且不仅仅支持关系数据库,还支持普通文件、XML文件和对象数据库等。

其他设计方法

 其他设计方法如构件与软件重用。软件重用是使用已有软件产品来开发新的软件系统的过程,分为水平式重用和垂直式重用两种类型,见表7.3

逆向工程 

逆向工程是通过分析已有的程序,寻求比源代码更高级的抽象表现形式(比如文档)的活动,是在不同抽象层级中进行的溯源行为
逆向工程得出的设计称为设计恢复(Design Recovery),但不一定能够抽象还原到原设计。
重构(Restructuring)是在同一抽象层级中转换系统描述的活动。对逆向工程所形成的系统进行修改或重构,生成的新版本称为重构工程。
逆向工程信息恢复的级别见表7.4。

 

4.4.软件测试 

软件测试的目的

测试是确保软件的质量,确认软件以正确的方式做了用户所期望的事情。软件测试通常在规定的时间和成本内完成,以尽量多地发现漏洞,但不能保证发现所有的漏洞

测试分类 

(1)根据程序执行状态可分为静态测试(Static Testing,ST)和动态测试(Dynamic Testing,DT)
(2)根据是否关注具体实现和内部结构可分为黑盒测试、白盒测试和灰盒测试
(3)根据程序执行的方式来分类可分为人工测试(Manual Testing,MT)和自动化测试(Automatic Testing,AT)
(4)从阶段上划分,软件测试可以分为单元测试、集成测试、系统测试和验收测试
1)单元测试主要是对该软件的模块进行测试,往往由程序员自己完成。常采用白盒的静态测试如静态分析、代码审查等,也可以采用自动化的动态测试。
2)集成测试对通过单元测试的模块进行组装测试,以验证组装的正确性,一般采用白盒测试和黑盒测试结合的方法。
3)系统测试检查组装完成的系统是否符合SRS的要求。主要测试内容包括功能测试、性能测试、健壮性测试、安全性测试等,结束标志是测试工作已满足测试目标所规定的需求覆盖率,并且测试所发现的缺陷都已全部归零。
4)验收测试是确认系统满足用户需求或者协议的要求,确保系统能支撑业务运行。
5)其他测试还有AB测试、Web测试、链接测试和表单测试等。

 4.5.净室软件工程

定义

净室软件工程(Cleanroom Software Engineering,CSE)是一种在软件开发过程中强调在软件中建立正确性的需要的方法。CSE 的理论基础主要是函数理论和抽样理论。CSE 使用盒子结构规约进行分析和设计建模,并且强调将正确性验证(而不是测试)作为发现和消除错误的主要机制,可以生成质量非常高的软件。CSE的缺点是太理论化、忽视测试、带有传统软件工程的弊端。

4.6.基于构件的软件工程

定义

基于构件的软件工程(Component-Based Software Engineering,CBSE)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。用于CBSE的构件应该具备以下特征:
(1)可组装型:所有外部交互必须通过公开定义的接口进行。
(2)可部署性:必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。
(3)文档化:构件必须是完全文档化的。
(4)独立性:构件应该是独立的,如确实需要其他构件提供服务,则应显示声明。
(5)标准化:必须符合某种标准化的构件模型。

 构件模型

构件模型定义了构件实现、文档化以及开发的标准。目前主流的构件模型是Web Services模型、Sun 公司的EJB 模型和微软的.NET 模型。构件模型包含了一些模型要素如接口、使用信息和部署信息。构件模型提供了一组被构件使用的通用服务,包括平台服务和支持服务。容器是构件模型基础设施,是支持服务的一个实现加上一个接口定义,构件必须提供该接口定义以便和容器整合在一起。

 CBSE过程

支持基于构件组装的软件开发过程主要包括:
(1)系统需求概览。
(2)识别候选构件。
(3)根据发现的构件修改需求。
(4)体系结构设计。
(5)构件定制与适配。
(6)组装构件,创建系统。
CBSE 过程与传统的软件开发过程的不同点:
(1)早期需要完整的需求,以便尽可能多地识别出可复用的构件。
(2)早期阶段根据可利用的构件来细化和修改需求以匹配CBSE。
(3)架构设计完成后,可能需要修改构件以适合功能和架构的需求。
(4)开发过程就是组装构件的过程,有时需要开发适配器。
(5)CBSE中的架构设计阶段特别重要,决定和限制了可选构件的范围。

构件组装 

常见的构件组装有顺序组装、层次组装和叠加组装3 种组装方式。构件组装可能面临接口不兼容的问题,常见的有参数不兼容、操作不兼容和操作不完备3 种。这时需要编写适配器构件来解决不兼容的问题。

 4.7.软件项目管理

软件进度管理

软件进度管理一般包括活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制6个过程。

工作分解结构 

工作分解结构(Work Breakdown Structure,WBS)是把一个项目,按一定的原则分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的活动中,直到分解不下去为止。以可交付成果为导向,对项目要素进行的分组,总是处于计划过程的中心。

活动定义 

活动定义是指确定完成项目的各个可交付成果所必须进行的各项具体活动,还需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或可交付成果。

任务活动图 

任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式来展示和管理项目活动。

软件配置管理 

软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。SCM的目的是使错误降为最小并最有效地提高生产效率。SCM的核心内容包括版本控制和变更控制。版本控制(Version Control)是指对软件开发过程中各种文件变更的管理,最主要的功能就是追踪和记录文件的变更、并行开发。变更控制(Change Control)是指对变更进行管理,确保变更有序进行。

 软件质量管理

软件质量就是软件与明确地和隐含地定义的需求相一致的程度。软件质量保证(Software Quality Assurance,SQA)的目的是使软件过程对于管理人员来说是可见的。
SQA的主要任务是:
1)SQA审计与评审,包括对软件工作产品、软件工具和设备的审计,评审开发组的行为符合预定的过程。
2)SQA报告
3)处理不符合问题。 软件质量认证,国内软件企业主要采用的是ISO 9001和CMM。

软件风险管理 

软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。风险管理的主要目标是预防风险,及应对发生的风险。风险管理活动可以分为:
1)Bochm把风险管理活动分成风险估计(风险辨识、风险分析、风险排序)和风险控制(风险管理计划、风险处理、风险监督)两大阶段。
2)Charette 把风险分成分析(辨识、估计、评价)和管理(计划、控制、监督)两大阶段。


5.数据库设计基础知识

5.1.数据库基础概念

基础概念

(1)数据(Data):是描述事物的符号记录,它具有多种表现形式,如文字、图形、图像、声音和语言等。
(2)数据库系统(DataBase System,DBS):是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,从而方便多用户访问的计算机系统。
(3)数据库(DataBase,DB):是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。
(4)数据库管理系统(DataBase Management System,DBMS):是数据库系统的核心软件,是由一组相互关联的数据集合和一组用以访问这些数据的软件组成。DBMS通常分三类:关系数据库系统(Relation DataBase System,RDBS)、面向对象的数据库系统(Object-Oriented DataBase Systems,OODBS)、对象关系数据库系统(Objective Relational DataBase System,ORDBS)。

发展阶段 

(1)人工管理阶段
特点:数据量较少、数据不保存、没有软件系统对数据进行处理。
缺点:应用程序与数据之间依赖性太强、数据组与数据组之间存在数据冗余。
(2)文件系统阶段
特点:数据可长期保留、数据不属于某个特定应用、文件组织形式多样化。
缺点:数据冗余、数据不一致性、数据孤立。
(3)数据库系统阶段
特点:采用复杂的数据模型表示数据结构、有较高的数据独立性。
优点:对应用程序的高度独立性、数据的充分共享性、操作方便性。

数据模型 

数据模型三要素:数据结构、数据操作、数据的约束条件。其中,数据的约束条件包括:
(1)实体完整性。实体完整性是指实体的主属性不能取空值。
(2)参照完整性。在关系数据库中主要是指外键参照的完整性。若A关系中的某个或者某些属性参照B关系或其他几个关系中的属性,那么在关系A中该属性要么为空,要么必须出现在B关系或者其他的关系的对应属性中。
(3)用户定义完整性。用户定义完整性反映的是某一个具体应用所对应的数据必须满足一定的约束条件。例如,软考成绩不能小于0,也不能大于75。

 数据库管理系统

数据库管理系统的主要功能包括数据定义,数据库操作,数据库运行管理,数据组织、存储和管理,数据库的建立和维护。数据库管理系统的特点:数据结构化且统一管理、有较高的数据独立性、数据控制功能。数据控制功能包括:保证护具的安全性和完整性以及并发控制的能力。

数据库三级模式两级映像 

数据库一般采用三级模式,其体系结构如图所示,系统开发人员需要通过视图层、逻辑层和物理层三个层次上的抽象来降低用户屏蔽系统的复杂性,简化用户与系统的交互。

三级模式

 从数据库管理系统的角度,数据库也分为外模式、概念模式和内模式。具体概念见表8.1。

 

两级映像

数据库系统在三级模式之间提供了两级映像:概念模式/内模式映像、外模式/概念模式映像。这两级映像保证了数据库中的数据具有较高的逻辑独立性和物理独立性。具体见表 

 

5.2.关系数据库

基本概念 

(1)属性(Attribute):在现实世界中,要描述一个事物常常取若干特征来表示。这些特征称为属性。
(2)(Domain):每个属性的取值范围对应一个值的集合,称为该属性的域。
(3)目或度(Degree):目或度指的是一个关系中属性的个数。
(4)候选码(Candidate Key):若关系中的某一属性或属性组的值,能唯一地标识一个元组,则称该属性或属性组为候选码。
(5)主码(Primary Key):或称主键,若一个关系有多个候选码,则选定其中一个作为主码。
(6)主属性(Prime Attribute):包含在任何候选码中的属性称为主属性。
(7)外码(Foreign Key):如果关系模式R 中的属性或属性组不是该关系的码,但它是其他关系的码,那么该属性对关系模式R 而言是外码。
(8)全码(All-key):关系模型的所有属性组是这个关系模式的候选码,称为全码。

关系代数运算 

关系代数的运算符有4类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符,系统架构设计师考试重点考查集合运算符与专门的关系运算符。

集合运算符和专门的关系运算符的含义及解释

 

外连接运算符

 

关系数据库设计基本理论 

(1)函数依赖:设R(U)是属性U上的一个关系模式,X和Y是U的子集,r是R的任一关系,如果对于r中的任意两个元组u和v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。函数依赖是一种最重要、最基本的数据依赖。而关系数据库设计理论的核心就是数据间的函数依赖。
(2)非平凡的函数依赖:如果X→Y,Y⊆X,则称X→Y是非平凡的函数依赖。
(3)平凡的函数依赖:如果X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。
(4)完全函数依赖:例如,有学生关系模式(学号,系号,系主任,课程号,成绩),该关系模式的主码是学号+课程号,(学号,课程号)→成绩是完全函数依赖。
(5)部分函数依赖:上述例子中,(学号,课程号)→系号就属于部分函数依赖,因为对于系
号来说有学号就可以推出系号。
(6)传递依赖:上述例子中,学号→系号,系号→系主任名,则称系主任名传递依赖于学号。
(7)函数依赖的公理系统(Armstrong公理系统):从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”。 设关系式R(U,F),U 是关系模式R的属性集,F是U上的一组函数依赖,则有以下三条推理规则:
1)A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含。
2)A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含。
3)A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。 根据上面三条推理规则,又可推出下面三条推理规则:
1)合并规则:若X→Y,X→Z,则X→YZ为F所蕴含。
2)伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含。
3)分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。

关系数据库的规范化 

(1)第一范式(1NF):若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。
(2)第二范式(2NF):若关系模式R∈1NF,且每一个非主属性完全依赖主码时,则关系式R是2NF(第二范式)。
(3)第三范式(3NF):当2NF消除了非主属性对主码的传递函数依赖,则称为3NF。
(4)BC 范式(BCNF):如果关系模式R∈1NF,且每个属性都不传递依赖于R的候选码,那么称R是BCNF模式。 上述4种范式之间有如下联系:BCNF⊂3NF⊂2NF⊂1NF。

事务管理 

DBMS 运行的基本工作单位是事务,事务是用户定义的一个数据库操作序列,这些操作序列要么全做,要么全都不做,是一个不可分割的工作单位。事务具有的四个特性(ACID):
(1)原子性(Atomicity):事务是数据库的逻辑工作单位,事务的所有操作在数据库中要么统出现故障时也是如此。全做,要么全都不做。
(2)一致性(Consistency):事务的执行使数据库从一个一致性状态变成另一个一致性状态。
(3)隔离性(Isolation):一个事务的执行不能被其他事务干扰。
(4)持久性(Durability):指一个事务一旦提交,它对数据库的改变必须是永久的,即便系统出现故障时也是如此。

相关的SQL语句 

(1)BEGIN TRANSACTION:事务开始语句。
(2)COMMIT:事务提交语句,表示事务执行成功地结束,把事务对数据库的修改写入磁盘(事务对数据库的操作首先是在缓冲区中进行的)。
(3)ROLL BACK:事务回滚语句,表示事务执行不成功地结束,即把事务对数据库的修改进行恢复。

并发控制 

在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作,此时数据库管理系统的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时避免用户得到不正确的数据。并发控制的主要技术是封锁,主要有两种类型的封锁,分别是 X 封锁和S封锁。

排他型封锁(X封锁)

如果事务T对数据A(可以是数据项、记录、数据集以至整个数据库)实现了X封锁,那么只允许事务T读取和修改数据A,其他事务要等事务T解除X封锁以后,才能对数据A实现任何类型的封锁。可见X封锁只允许一个事务独锁某个数据,具有排他性 

共享型封锁(S封锁)

如果事务T对数据A实现了S封锁,那么允许事务T读取数据A,但不能修改数据A,在所有S封锁解除之前决不允许任何事务对数据A实现X封锁。 

 数据库的备份与恢复

(1)备份(转储)与恢复:备份是指通过数据转储和监理日志文件的方法监理冗余数据,DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本。数据库的恢复是指把数据库从错误状态恢复到某一个已知的正确状态的功能。当数据库遭到破坏后,就可以利用后备副本把数据库恢复,这时数据库只能恢复到备份时的状态,从那以后的所有更新事务必须重新运行才能恢复到故障时的状态。
(2)备份分类包括以下4种:
1)静态备份:指备份期间不允许(或不存在)对数据库进行任何存取、修改活动。静态备份简单,但备份必须等待用户事务结束才能进行,新的事务必须等待备份结束才能执行。这降低了数据库的可用性。
2)动态备份:指备份期间允许对数据库进行存取或修改,即备份和用户事务可以并发执行。动态备份可克服静态备份的缺点,但备份结束时后援副本上的数据并不能保证正确有效。
3)海量备份:指每次备份全部数据库。
4)增量备份:指每次只备份上次备份后更新过的数据。如果数据库很大,事务处理又十分频繁,则增量备份方式是很有效的。
(3)数据库的4类故障:事务故障、系统故障、介质故障、计算机病毒。事务故障的恢复有两个操作:撤销事务(UNDO)和重做事务(REDO)。介质故障的恢复由数据库管理员装入数据库的副本和日记文件副本,再由系统执行撤销和重做操作。

 5.3.数据库设计

数据库设计的基本步骤

可以分为用户需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用程序设计、运行维护。

数据需求分析

用户需求分析是综合各用户的应用需求,对现实世界要处理的对象进行详细调查,在了解先行系统的概况,确定新系统功能的过程中,协助用户明确对新系统的信息要求、处理要求和系统要求,确定新系统的边界。 

 概念结构设计

概念数据模型又称为实体-联系模型,它按照用户的观点来对数据和信息建模,主要用于数据库设计。概念模型主要用实体-联系方法(Entity-Relationship Approach)表示,简称E-R方法。概念结构设计工作步骤包括:选择局部应用、逐一设计分E-R图和E-R图合并。在进行E-R 图合并时,需解决属性冲突、命名冲突和结构冲突。E-R模型简称E-R图,是描述概念世界、建立概念模型的实用工具。E-R图的三个要素有:
1)实体(型):用矩形框表示,框内标注实体名称。
2)属性:用椭圆形表示,并用连线与实体连接起来。
3)实体之间的联系:用菱形框表示,框内标注联系名称,用连线将菱形框分别与有关实体相连,并在连线上注明联系类型。

逻辑结构设计

逻辑结构设计阶段主要工作步骤包括确定数据模型、将E-R图转换成指定的数据模型、确定完整性约束和确定用户视图。 

物理设计

物理设计主要工作步骤包括确定数据分布、存储结构和访问方式。 

数据库实施

数据库实施是根据逻辑和物理设计的结果,在计算机上建立实际的数据库结构,数据加载(装入),进行试运行和评价。 

数据库运行维护

数据库运行维护主要包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。在数据库运行阶段,对数据库的维护主要由DBA完成 

商业智能

商业智能(Business Intelligence,BI)是企业对商业数据的搜集、管理和分析的系统过程,目的是使企业的各级决策者获得知识或洞察力,帮助他们作出对企业更有利的决策。一般认为数据仓库、联机分析处理(OLAP)和数据挖掘是商业智能的三大组成部分 

数据仓库

数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定且随时间变化的数据集合,用于支持管理决策。数据仓库的关键特征是:面向主题、集成的、非易失的、时变的。 

 传统数据库与数据仓库的比较

OLTP与OLAP的区别

 

 数据挖掘

数据挖掘是在没有明确假设的前提下去挖掘信息、发现知识。数据挖掘所得到的信息应具有先知、有效和实用三个特征。先前未知的信息是指该信息是预先未曾预料到的,即数据挖掘是要发现那些不能靠直觉发现的信息或知识,甚至是违背直觉的信息或知识,挖掘出的信息越是出乎意料,就可能越有价值。

 5.4.应用程序与数据库的交互

库函数级别访问接口

库函数级别的数据访问接口是数据库提供的最底层的高级程序语言访问数据接口,如Oracle数据库的Oracle Call Interface(OCI)。OCI由一组应用程序开发接口(API)组成,实际是将结构化查询语言(SQL)和高级语言程序相结合。其缺点是强依赖于特定的数据库,需数据库开发人员对数据库机制有较深的理解,学习难度较大,开发效率不是很高。

嵌入式SQL访问接口 

嵌入式SQL(Embeded SQL)是一种将SQL语句直接写入某些高级程序语言源代码中的方法。

通用数据接口标准 

开放数据库连接(Open DataBase Connectivity,ODBC)是为解决异构数据库间的数据共享产生的。优点是不依赖于任何DBMS,能以统一的方式处理所有的关系数据库。常见数据库接口包括数据库访问对象(Data Access Object,DAO)、远程数据库对象(Remote Data Object,RDO)、ActiveX 数据对象(Active Data Object,ADO)、Java 数据库连接(java DataBase Connection,JDBC)。

ORM访问接口 

对象关系映射(Object Relationship Mapping,ORM)用于实现面向对象编程语言里不同类型系统数据之间的转换。典型的ORM框架有Hibernate、Mybatis和JPA等。
(1)Hibernate:全自动化的框架,强大、复杂、笨重、学习成本高。
(2)Mybatis:半自动的框架。
(3)JPA:Java 自带的框架。

5.5.NoSQL数据库 

分类与特点

NoSQL 是一种概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID 特性。NoSQL 数据库按照所使用的数据结构的类型,可分为列式存储数据库、键值对存储数据库、文档型数据库、图数据库。
(1)列式存储数据库用来应对分布式存储的海量数据,键仍然存在,特点是指向了多个列。现有产品如Cattandra、HBate、Riak。
(2)键值对存储数据库优势是简单、易部署。但是只对部分值查询或更新时效率低下。现有产品如Tokzo Cabinet/Tzranu、Redis、Voldemort、Oracle BDB。
(3)文档型数据库在处理网页等复杂数据时,比传统键值对数据库查询效率更高,现有产品如CouchDB、MongoDB、SequoiaDB。
(4)图数据库适合存储通过图进行建模的数据,如社交网络数据、生物信息网络数据,交通网络数据等。常见产品有Neo4J、InfoGrid、Infinite Graph等。
NoSQL特征:易扩展、大数据量、高性能、灵活的数据模型、高可用。

 体系框架

NoSQL整体框架由下至上分为数据持久层(Data Persistence)、数据分布层(Data Distribution Model)、数据逻辑模型层(Data Logical Model)和接口层(Interface)。 NoSQL数据库适用情况:数据模型比较简单、需灵活性更强的IT系统、对数据库性能要求较高、不需要高度的数据一致性。

5.6.分布式数据库 

体系结构

分布式数据库的体系结构如图8.3所示。
(1)全局视图:全局视图(全局外模式)是全局应用的用户视图,是全局概念模式的子集,该层直接与用户(或应用程序)交互。
(2)全局概念模式:全局概念模式定义分布式数据库中数据的整体逻辑结构,数据就如同根本没有分布一样,可用传统的集中式数据库中所采用的方法进行定义。
(3)分片模式:将一个关系模式分解成为几个数据片。
(4)分配模式:分布式数据库的本质特性就是数据分布在不同的物理位置。分配模式的主要职责是定义数据片段(即分片模式的处理结果)的存放节点。
(5)局部概念模式:局部概念模式是局部数据库的概念模式。
(6)局部内模式:局部内模式是局部数据库的内模式。

 

特点 

(1)共享性:不同的节点的数据共享。
(2)自治性:每个节点对本地数据都能独立管理。
(3)可用性:
(4)分布性: 某一场地故障时,可以使用其他场地上的副本而不至于使整个系统瘫痪。 数据分布在不同场地上存储。

分布透明性 

分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数据库的数据模型。分布透明性包括分片透明性、位置透明性和局部数据模型透明性。
(1)分片透明性是分布透明性的最高层次。所谓分片透明性是指用户或应用程序只对全局关系进行操作而不必考虑数据的分片。
(2)位置透明性是分布透明性的下一层次。所谓位置透明性是指用户或应用程序应当了解分片情况,但不必了解片段的存储场地。
(3)局部数据模型透明性(逻辑透明)是指用户或应用程序应当了解分片及各片断存储的场地,但不必了解局部场地上使用的是何种数据模型。

 5.7.数据库优化技术

集中式数据库优化技术

集中式数据库性能优化最常见的是反规范化设计,主要包括增加冗余列表、水平分割表、垂直分割表、增加派生列、重新组。
(1)增加冗余列。增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。
(2)增加派生列。增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。
(3)重新组表。重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接,从而提高性能。
(4)水平分割表。按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
(5)垂直分割表。对表进行分割,将主键与部分列放到一个表中,主键与其他列放到另一个表中,在查询时减少I/O次数。
反规范化设计的优点是避免进行表之间的连接操作,从而可以提高数据操作的性能;缺点是会造成数据的重复存储,浪费了磁盘空间,会产生数据的不一致性问题。若要避免数据不一致的问题,可以通过设置触发器、采用事务机制(适用于单体数据库中)、应用保证(适用于异构数据库之间)以及批处理脚本的方式,这些方式的优缺点这里不再赘述。

分布式数据库优化技术 

分布式数据库的性能优化可以采用主从复制、读写分离、分表、分库等技术。

主从复制

主从复制是建立一个和主数据库完全一样的数据库环境,称为从数据库。这样做的好处是:
1)做数据的热备。作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2)架构的扩展。业务量越来越大,I/O 访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3)读写分离。使数据库能支持更大的并发。 在MySQL数据库中,主从数据库同步的模式有全同步、半同步、异步三种方式。主从数据库之间通过binlog(二进制日志)进行数据的同步。具体过程如图8.4所示。
这里的binlog日志有3种模式:
1)基于SQL语句的复制:每一条更新的语句(insert、update、delete)都会记录在binlog中,进而同步到从库的relaylog 中,被从库的SQL线程取出来,回放执行。该模式的优点是binlog的日志量可能会比较少,比如一个涉及行数为1000行的update语句,同步这一个语句,就同步了1000行的数据。缺点是同步的SQL语句里如果含有绑定本地变量的函数、关键字,可能造成主从不一致的情况。比如SQL语句中有time函数,如果主从数据库的服务器时间不是精确相等,就会造成结果不一致。
2)基于行的复制:不记录SQL语句,只记录哪个记录更新前和更新后的数据,可以保证主从之间的数据绝对相同。缺点是:1条SQL更新1000行的数据无法再偷懒,必须原原本本同步1000行的数据量。
3)混合复制:以上两种模式的混合,选取两者的优点。对于有绑定本地特性、评估可能造成主从不一致的SQL语句,则自动选用基于行的复制,其他的选择基于SQL语句的复制。

 

读写分离

设置不同的主、从数据库分别负责不同的操作。让主数据库负责数据的写操作,从数据库负责数据的读操作。通过角色分担的策略,分别提升读写性能,有效减少数据并发操作的延迟。 

分表

分表也叫分片,可以提升数据库并发以及I/O的性能。分表重在单个实例内部,将一张大表分成若干小表,业务同时访问多个表。分表的方式有两种,见表8.7 

 

分库

分库是将原本存放在一个实例上众多分类的数据(表),分开存放到不同的实例上。有利于差异化管理。例如,一个简单的电商网站,包括用户、商品、订单三个业务模块,可以将用户数据、商品数据、订单数据分开放到三台不同的数据库服务器上,而不是将所有数据都放在一台数据库服务器上。 

5.8.数据库基础概念 

基本概念

Redis 是一种分布式缓存技术,也是一种键值对数据库类型。Redis用作缓存组件时,其基于内存的读写特性,比基于磁盘读写的数据库性能要高很多,适合缓存高频热点的数据,来提高读性能。这样可以降低对数据库服务器的查询请求,提高系统性能。Redis以key-value(键值对)的形式为数据的保存格式。键(key)可以是一个字符串,值(value)可以是任意类型的数据。如整型、字符型、数组、列表、集合等。例如键值对:(“20231234”,“张珂”),其key:“20231234”是该数据的唯一标识,而value:“张珂”是该数据实际存储的内容。

 数据类型

Redis 支持的数据类型主要包括string类型、hash类型、set类型、list类型、zset类型、pub/sub类型。
(1)string 类型:是Redis 基本类型。可用于缓存层或计数器,如视频播放量、文章浏览量等。
(2)hash 类型:代替string类型,节省空间。描述用户信息较为方便。
(3)set 类型:无序集合,每个值不能重复。可用于去重、抽奖、初始化用户池等。
(4)list 类型:双向链表结构,可以模拟栈、队列等形式。可用于回复评论、点赞。
(5)zset 类型:有序集合、每个元素有一个分数。如首页推荐10个最热门的帖子。

访问方式 

引入Redis 后,热点数据存放在 Redis 中,但由于存在“一份数据存放了多个位置”,所以要考虑数据的一致性问题。读写数据的基本步骤为:
(1)读数据:①根据key读缓存;②读取成功则直接返回;③若key不在缓存中,则根据key读数据库;④读取成功后,写缓存;⑤成功返回。
(2)写数据:①根据key值写数据库;②成功后更新缓存key值;③成功返回。

 过期策略

在使用Redis 时,一般会设置Redis缓存空间的大小,不会让数据无限制地存放到Redis中,对于设置了过期时间的数据可以采用两种方式去淘汰这些数据。
(1)定期删除。Redis每隔一段时间就会抽取一些设置了过期时间的key。这里的抽取是随机进行的,因为无法对所有的key进行遍历,会给系统带来很大的负担。但是这样也会导致一些key到了过期时间也仍然没有被删除。
(2)惰性删除。查询key的时候Redis会对key进行检测,发现如果已经达到过期时间,则删除。惰性删除的缺点是如果这些过期的key没有被访问,那么它们就一直无法被删除,而且一直占用内存。
除了上述两种方式,Redis又提供了一些淘汰机制,主要有:
 volatile-lru(最近最少使用):从已设置过期时间的key中,移出最近最少使用的key进行淘汰。
 volatile-lfu(最不经常使用):从key中选择最不经常使用的进行淘汰。
 volatile-random(随机淘汰算法):从已设置过期时间的key中随机选择key淘汰。
 volatile-ttl(生存时间淘汰):从已设置过期时间的key中,移出将要过期的key。
 allkeys-lru:从所有key中选择最近最少使用的进行淘汰。
 allkeys-lfu:从所有key中选择最不经常使用的进行淘汰。
 allkeys-random:从所有key 中随机选择key进行淘汰。

 数据持久化

在实际应用中,一旦服务器宕机,内存中的数据将全部丢失。我们很容易想到的一个解决方案是,从后端数据库恢复这些数据,但这种方式存在两个问题:一是需要频繁访问数据库,会给数据库带来巨大的压力;二是,这些数据是从慢速数据库中读取出来的,性能肯定比不上从Redis 中读取来得快,这会导致使用这些数据的应用程序响应变慢。所以,对 Redis 来说,实现数据的持久化,避免从后端数据库中进行恢复,是至关重要的。Redis数据持久化的方式有两种,
见表8.8。

 

缓存异常问题 

(1)缓存穿透。大量请求访问了没有缓存的key,即大量的key在Redis里是不存在的,从而导致请求直接访问数据库,数据库压力增大。可能的原因如下:
1)恶意攻击,造成大量访问不存在的 key。例如登录时使用无效的用户名,在软考网站查询成绩时输入不存在的身份证号、准考证号。 解决方案:①针对比较少的请求来源 IP,主动限制其访问次数,或者拉入黑名单;②应用程序来检查key的合法性,提前拒绝不合法的请求;③使用布隆过滤器。
2)大量请求访问数据库里有但Redis没有的key。例如新业务刚刚上线,此时Redis是空的。 解决方案:①预热Redis,运行一个批处理脚本,将可能会大量访问的数据预先加载到Redis,业务再“开张”;②在最前端进行流量控制,逐步把请求释放进来。给出一段时间,让Redis逐步加载热数据;③如果是在数据库里也没有的key,也需要在Redis中设置key,使其值为null或空。
(2)缓存雪崩。大量请求访问到缓存中的 key,这些 key 是存在的,但同时到了过期时间,从而导致请求直接访问数据库,数据库压力增大。缓存雪崩可能进而影响一系列的雪崩,影响到上下游的所有应用服务。可能的原因如下:
1)Redis 故障。比如Redis宕机,网络出现抖动等。 解决方案:①使用主从复制提高可用性,使用 cluster 集群方案降低故障时影响的范围;②如果出现故障,则可以采取服务降级、熔断、限流等措施。
2)大量的key采用了相同的过期时间。例如在同一时刻设置了大量的key,但过期时间都是5分钟。 解决方案:过期时间加上一个随机值,使得众多key均匀过期。
(3)缓存击穿。少量热点的key缓存时间失效了,使得请求直接访问数据库。 可能的原因:热点的key设置了太短的过期时间。例如秒杀业务下的“库存数量”。 解决方案:①将key设置较长的过期时间。对于非常重要的key,则设置永久有效。但需要解决好与数据库中的key的一致性问题;②使用分布式锁。如果热点key失效了,要控制好访问后端数据库的流量。只允许一个请求去访问数据库,取出最新的 key,存放到 Redis,其他请求则必须等待。但分布式锁也要防止出现异常的情况。

Redis集群 

Redis 也可以采用集群的方式部署,主要有主从复制集群、哨兵集群、Cluster集群方式。集群切片的方式主要分为客户端分片、代理分片、服务器端分片三种方式。

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(100)
  • 海量数据存储与分析:HBase、ClickHouse、Doris三款数据库对比
  • http相关网络问题面试怎么答
  • C++ 格式化输入输出
  • Vue中的v-if与emit事件传递:一个常见陷阱分析
  • swift-19-从OC到Swift、函数式编程
  • SpringSecurity6-oauth2-三方gitee授权-授权码模式
  • 鸿蒙 Swiper 组件解析:轮播交互与动画效果全指南
  • 疏通经脉: Bridge 联通逻辑层和渲染层
  • 【python】~实现工具软件:QQ邮件即时、定时发送
  • 算法-基础算法-递归算法(Python)
  • PYTHON从入门到实践10-文件操作与异常
  • 日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(5):2022年12月2023年7月
  • 全新大模型开源,腾讯(int4能打DeepSeek) Vs 谷歌(2GB运行多模态)
  • Gemini-CLI:谷歌开源的命令行AI工具,重新定义开发者工作流
  • MyBatis批量删除
  • HMAC 流程
  • 矩阵的逆 线性代数
  • 代码部落 20250629 CSP-S复赛 模拟赛
  • NV064NV065美光固态闪存NV067NV076