欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:軟考數(shù)據(jù)庫(kù)詳細(xì)知識(shí)點(diǎn)整理(全)

柚子快報(bào)邀請(qǐng)碼778899分享:軟考數(shù)據(jù)庫(kù)詳細(xì)知識(shí)點(diǎn)整理(全)

http://yzkb.51969.com/

目錄

第一章?計(jì)算機(jī)系統(tǒng)基本知識(shí)

1.1 計(jì)算機(jī)系統(tǒng)

1.1.1 計(jì)算機(jī)硬件組成

1.1.2 中央處理單元

1.1.3 數(shù)據(jù)表示

1.1.4 校驗(yàn)碼

1.2 計(jì)算機(jī)體系結(jié)構(gòu)

1.2.1 體系結(jié)構(gòu)分類

1.2.2?指令系統(tǒng)存

1.2.3?儲(chǔ)系系統(tǒng)

1.2.4?輸入/輸出技術(shù)

1.2.5?總線結(jié)構(gòu)

1.3 可靠性、性能、安全

1.3.1 計(jì)算機(jī)可靠性

1.3.2?計(jì)算機(jī)系統(tǒng)的性能評(píng)價(jià)

1.3.3?信息安全

第二章 程序語(yǔ)言基礎(chǔ)知識(shí)

2.1 程序設(shè)計(jì)語(yǔ)言的基本概念

2.2 程序設(shè)計(jì)語(yǔ)言的基本成分

2.3 編譯程序基本原理

第三章 數(shù)據(jù)結(jié)構(gòu)與算法

3.1 數(shù)據(jù)結(jié)構(gòu)

3.1.1 線性結(jié)構(gòu)

3.1.2 數(shù)組

3.1.3 矩陣

3.1.4?樹(shù)與二叉樹(shù)

3.1.5?圖

3.2 查找

3.2.1 順序查找

3.2.2 折半查找

3.2.3 哈希表

3.3 排序

3.3.1 直接插入排序

3.3.2 希爾排序

3.3.3 簡(jiǎn)單選擇排序

3.3.4 堆排序

3.3.5 冒泡排序

3.3.6 快速排序

3.3.7 歸并排序

3.3.8 基數(shù)排序

3.3.9 內(nèi)部排序算法總結(jié)

3.3.10 算法特性

第四章 操作系統(tǒng)知識(shí)

4.1 進(jìn)程管理

4.1.1 操作系統(tǒng)概述

4.1.2 進(jìn)程組成和狀態(tài)

?4.1.3 前趨圖

4.1.4?進(jìn)程同步與互斥

4.1.5?進(jìn)程調(diào)度

4.1.6?死鎖

4.1.7?線程

4.2 存儲(chǔ)管理

4.2.1 分區(qū)存儲(chǔ)管理

4.2.3?分頁(yè)存儲(chǔ)管理

4.2.4?分段存儲(chǔ)管理

4.2.5?段頁(yè)式存儲(chǔ)管理

4.3 設(shè)備管理

4.3.1 設(shè)備管理概述

4.3.2?I/0軟件

4.3.3?設(shè)備管理技術(shù)

4.4 文件管理

4.4.1 文件管理概述

4.4.2?索引文件結(jié)構(gòu)

4.4.3?文件目錄

4.4.4?文件存儲(chǔ)空間管理

第五章 計(jì)算機(jī)網(wǎng)絡(luò)?

5.1 網(wǎng)絡(luò)功能和分類

5.2?OSI七層模型

5.3?TCP/IP協(xié)議

5.4?傳輸介質(zhì)

5.5?通信方式和交換方式

5.6?IP地址

5.7?IPv6

5.8?網(wǎng)絡(luò)規(guī)劃和設(shè)計(jì)

5.9 其他考點(diǎn)補(bǔ)充

5.10 網(wǎng)絡(luò)安全技術(shù)

5.11?網(wǎng)絡(luò)安全協(xié)議

第六章 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)

6.1 基本概念

6.1.1 關(guān)于數(shù)據(jù)的基本概念

6.1.2 數(shù)據(jù)庫(kù)管理系統(tǒng)的功能

6.1.3 數(shù)據(jù)各個(gè)發(fā)展階段的特點(diǎn)

6.1.4 數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)

6.2 數(shù)據(jù)模型

6.2.1 三級(jí)模式兩級(jí)映像

6.2.2 數(shù)據(jù)模型_模型分類

6.2.3?數(shù)據(jù)模型_組成要素

6.2.4?概念模型中的基本概念

6.2.5 數(shù)據(jù)模型

6.3 數(shù)據(jù)存儲(chǔ)與查詢

6.4 數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘基礎(chǔ)知識(shí)?

6.4.1 數(shù)據(jù)倉(cāng)庫(kù)

6.4.2 數(shù)據(jù)挖掘?

6.4.3?商業(yè)智能BI

第七章 關(guān)系數(shù)據(jù)庫(kù)

7.1 關(guān)系數(shù)據(jù)庫(kù)概述

7.2 關(guān)系代數(shù)

7.3 元組演算與域演算

7.4 查詢優(yōu)化

7.5 關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)?

7.6 模式分解

第八章 數(shù)據(jù)庫(kù)SQL語(yǔ)言

8.1 SQL語(yǔ)言概述

8.2 數(shù)據(jù)庫(kù)定義

8.2.1 創(chuàng)建表(create table)

8.2.2 修改表 (alter table)

8.2.3 刪除表 (drop table)

8.2.4 索引

8.2.5 視圖

8.3 數(shù)據(jù)操作

8.3.1 查詢語(yǔ)句格式

8.3.2 分組查詢

8.3.3?其他操作

8.3.4?約束

8.4 數(shù)據(jù)授權(quán)

8.4.1 授權(quán)grant

8.4.2 收回權(quán)限r(nóng)evoke

8.5 觸發(fā)器

8.6 嵌入式SQL?

第九章 非關(guān)系型數(shù)據(jù)庫(kù)NOSQL

9.1 概述

9.2 理論基礎(chǔ)

9.3 分區(qū)方法

9.4 存儲(chǔ)分布

9.5?查詢模型

9.6 存儲(chǔ)模式

第十章 系統(tǒng)開(kāi)發(fā)與運(yùn)行

10.1 系統(tǒng)實(shí)施

10.1.1 信息系統(tǒng)生命周期

10.1.2 能力成熟度模型

10.1.3 軟件過(guò)程開(kāi)發(fā)模型

10.1.4 信息系統(tǒng)開(kāi)發(fā)方法

10.1.5 系統(tǒng)分析與設(shè)計(jì)

10.1.6 結(jié)構(gòu)化開(kāi)發(fā)?

10.2 系統(tǒng)測(cè)試

10.2.1 測(cè)試原則和方法

10.2.2 測(cè)試階段

10.2.3 測(cè)試用例設(shè)計(jì)

10.2.4 調(diào)試

10.2.5 軟件度量

10.3 系統(tǒng)維護(hù)

10.3.1 系統(tǒng)轉(zhuǎn)換

10.3.2?系統(tǒng)維護(hù)

10.3.3?系統(tǒng)評(píng)價(jià)

10.4?面向?qū)ο箝_(kāi)發(fā)

第十一章 數(shù)據(jù)庫(kù)設(shè)計(jì)

11.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述

11.2 系統(tǒng)需求分析

11.3 概念結(jié)構(gòu)設(shè)計(jì)

11.4 邏輯結(jié)構(gòu)設(shè)計(jì)

11.5 物理結(jié)構(gòu)設(shè)計(jì)

11.6 實(shí)施階段

11.7 運(yùn)行與維護(hù)?

11.7.1 數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行

11.7.2 數(shù)據(jù)庫(kù)系統(tǒng)的維護(hù)?

11.7.3 數(shù)據(jù)庫(kù)系統(tǒng)的管理

11.7.4 性能調(diào)整

第十二章 事務(wù)管理

12.1 事務(wù)的基本概念

12.2 數(shù)據(jù)庫(kù)的并發(fā)控制

12.3 數(shù)據(jù)庫(kù)的故障與恢復(fù)

12.3.1 事務(wù)故障

12.3.2 系統(tǒng)故障

12.3.3?介質(zhì)故障?

12.3.4?數(shù)據(jù)庫(kù)備份

12.4 數(shù)據(jù)庫(kù)的安全性與完整性?

第十三章 云計(jì)算與大數(shù)據(jù)處理

13.1 云計(jì)算

13.1.1 云計(jì)算的關(guān)鍵特征

13.1.2 云計(jì)算分類

13.1.3 云關(guān)鍵技術(shù)

13.1.4 云計(jì)算的安全

13.1.5 云安全實(shí)施的步驟

13.2 大數(shù)據(jù)?

第十四章 數(shù)據(jù)庫(kù)主流應(yīng)用技術(shù)

14.1 分布式數(shù)據(jù)庫(kù)

14.2 Web與數(shù)據(jù)庫(kù)

14.3 XML與數(shù)據(jù)庫(kù)

14.4 面向?qū)ο髷?shù)據(jù)庫(kù)

14.5 大數(shù)據(jù)與數(shù)據(jù)庫(kù)

14.6 NewSQL?

第十五章 知識(shí)產(chǎn)權(quán)和標(biāo)準(zhǔn)化

15.1 知識(shí)產(chǎn)權(quán)概述

15.2 保護(hù)期限

15.3 知識(shí)產(chǎn)權(quán)人的確定

15.4 侵權(quán)判斷

15.5 標(biāo)準(zhǔn)劃分?

前言:

筆記來(lái)自《文老師軟考數(shù)據(jù)庫(kù)》教材精講,精講視頻在b站,某寶都可以找到,個(gè)人感覺(jué)通俗易懂。

第一章?計(jì)算機(jī)系統(tǒng)基本知識(shí)

1.1 計(jì)算機(jī)系統(tǒng)

1.1.1 計(jì)算機(jī)硬件組成

計(jì)算機(jī)的基本硬件系統(tǒng)由運(yùn)算器控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備5 大部件組成。運(yùn)算器、控制器等部件被集成在一起統(tǒng)稱為中央處理單元(Central Processing Unit,CPU)。CPU是硬件系統(tǒng)的核心,用于數(shù)據(jù)的加工處理,能完成各種算術(shù)邏輯運(yùn)算及控制功能。存儲(chǔ)器是計(jì)算機(jī)系統(tǒng)中的記憶設(shè)備,分為內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器。前者速容量小,一般用于臨時(shí)存放程序、數(shù)據(jù)及中間結(jié)果。而后者容量大、速度高、度慢,可以長(zhǎng)期保存程序和數(shù)據(jù)。(簡(jiǎn)稱外設(shè)),輸入設(shè)備用于輸入原始輸入設(shè)備和輸出設(shè)備合稱為外部設(shè)備數(shù)據(jù)及各種命令,而輸出設(shè)備則用于輸出計(jì)算機(jī)運(yùn)行的結(jié)果。

1.1.2 中央處理單元

【CPU的功能】

程序控制。CPU通過(guò)執(zhí)行指令來(lái)控制程序的執(zhí)行順序,這是PU的重要功能。操作控制。一條指令功能的實(shí)現(xiàn)需要若干操作信號(hào)配合來(lái)完成,CPU產(chǎn)生每條指令的操作信號(hào)并將操作信號(hào)送往對(duì)應(yīng)的部件,控制相應(yīng)的部件按指令的功能要求進(jìn)行操作。時(shí)間控制。CPU對(duì)各種操作進(jìn)行時(shí)間上的控制,即指令執(zhí)行過(guò)程中操作信號(hào)的出現(xiàn)時(shí)間、持續(xù)時(shí)間及出現(xiàn)的時(shí)間順序都需要進(jìn)行嚴(yán)格控制。數(shù)據(jù)處理。CPU通過(guò)對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算及邏輯運(yùn)算等方進(jìn)行加工處理,數(shù)據(jù)加工處理的結(jié)果被人們所利用。所以,對(duì)數(shù)據(jù)的加工處理也是CPU最根本的任務(wù)。

此外,CPU 還需要對(duì)系統(tǒng)內(nèi)部和外部的中斷(異常)做出響應(yīng),進(jìn)行相應(yīng)的處理。

【CPU的組成】 CPU 主要由運(yùn)算器、控制器寄存器組和內(nèi)部總線等部件組成。

運(yùn)算器:執(zhí)行所有的算術(shù)運(yùn)算,如加減乘除等,執(zhí)行所有的邏輯運(yùn)算并進(jìn)行邏輯測(cè)試,如與、或、非、比較等。由以下組件組成:? ? ? ? 1.算術(shù)邏輯單元ALU :實(shí)現(xiàn)對(duì)數(shù)據(jù)的算術(shù)和邏輯運(yùn)算;? ? ? ? 2.累加寄存器AC :運(yùn)算結(jié)果或源操作數(shù)的存放區(qū); ? ? ? ? 3.數(shù)據(jù)緩沖寄存器DR:暫時(shí)存放內(nèi)存的指令或數(shù)據(jù);? ? ? ? 4.狀態(tài)條件寄存器PSW?:保存指令運(yùn)行結(jié)果的條件碼內(nèi)容,如溢出標(biāo)志等??刂破鳎嚎刂普麄€(gè)CPU的工作,最為重要。由以下組件組成:? ? ? ? 1.指令寄存器IR:暫存CPU執(zhí)行指令;? ? ? ??2.程序計(jì)數(shù)器PC?:存放指令執(zhí)行地址;? ? ? ? 3.地址寄存器AR:保存當(dāng)前CPU所訪問(wèn)的內(nèi)存地址;? ? ? ? 4.指令譯碼器ID:分析指令操作碼。CPU依據(jù)指令周期的不同階段來(lái)區(qū)分二進(jìn)制的指令和數(shù)據(jù),因?yàn)樵谥噶钪芷诘牟煌A段,指令會(huì)命令CPU分別去取指令或者數(shù)據(jù)。

1.1.3 數(shù)據(jù)表示

進(jìn)制的表示:二進(jìn)制、十六進(jìn)制,一般在題目中會(huì)給出中文說(shuō)明,如果沒(méi)給出,注意二進(jìn)制符號(hào)為0b,一般表示為0b0011,十六進(jìn)制符號(hào)為0x或H,可表示為0x18F或18FH。(十六進(jìn)制可表示0-15,其中10-15用A-F來(lái)表示)R進(jìn)制整數(shù)轉(zhuǎn)十進(jìn)制:位權(quán)展開(kāi)法,用R進(jìn)制數(shù)的每一位乘以R的n次方,n是變量,從R進(jìn)制數(shù)的整數(shù)最低世并婚農(nóng)次為0,1,2,3..累加。例如有6進(jìn)制數(shù)5043,此時(shí)R=6,用6進(jìn)制數(shù)的每一位乘以6的n次方,n是變量從6進(jìn)制數(shù)的整數(shù)最低位開(kāi)始(5043從低位到高位排列:3,4,0,5),n依次為0,1,2,3,那么最終5043=3*6^0+4*6A1+0*6A2+5*6A3=1107。十進(jìn)制轉(zhuǎn)R進(jìn)制:十進(jìn)制整數(shù) (除以R倒取余數(shù))用十進(jìn)制整數(shù)除以R,記錄每次所得余數(shù),若商不為0,則繼續(xù)除以R,直至商為0,而后將所有余數(shù)從下至上記錄,排列成從左至右順序,即為轉(zhuǎn)換后的R進(jìn)制數(shù):例:有十進(jìn)制數(shù)200,轉(zhuǎn)換為5進(jìn)制,此時(shí)R=6,將200/6,,得商為33s余數(shù)為2;因?yàn)樯滩坏扔?,因此再將商33/6,得商為5,余數(shù)為3;再將5/6,得商為0,余數(shù)為5;此時(shí)商為0,將所有余數(shù)從下到上記錄,得532。m進(jìn)制轉(zhuǎn)n進(jìn)制:先將m進(jìn)制轉(zhuǎn)化為十進(jìn)制數(shù),再將十進(jìn)制數(shù)轉(zhuǎn)化為n進(jìn)制數(shù)中間需要通過(guò)十進(jìn)制中轉(zhuǎn),但下面兩種進(jìn)制間可以直接轉(zhuǎn)化:? ? ? ?1. 二進(jìn)制轉(zhuǎn)八進(jìn)制:每三位二進(jìn)制數(shù)轉(zhuǎn)換為一位八進(jìn)制數(shù),二進(jìn)制數(shù)位個(gè)數(shù)不是三的倍數(shù),則在前面補(bǔ)0(原則是數(shù)值不變),如二進(jìn)制數(shù)01101有五位,前面補(bǔ)一個(gè)0就有六位,為001101,每三位轉(zhuǎn)換為一位八進(jìn)制數(shù),001=1101=1+4=5,也即01101=15 ? ? ? ?2. 二進(jìn)制轉(zhuǎn)十六進(jìn)制:每四位二進(jìn)制數(shù)轉(zhuǎn)換為一位十六進(jìn)制數(shù),二進(jìn)制數(shù)位個(gè)數(shù)不是四的倍數(shù),則在前面補(bǔ)0,如二進(jìn)制數(shù)101101有六位,前面補(bǔ)兩個(gè)0就有八位,為00101101,每四位轉(zhuǎn)換為一位十六進(jìn)制數(shù),0010=2,1101=13=D,也即101101=2D。機(jī)器數(shù):各種數(shù)值在計(jì)算機(jī)中表示的形式,其特點(diǎn)是使用二進(jìn)制計(jì)數(shù)制,數(shù)的符號(hào)用0和1表示,小數(shù)點(diǎn)則隱含,不占位置。機(jī)器數(shù)有無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)之分。無(wú)符號(hào)數(shù)表示正數(shù),沒(méi)有符號(hào)位。帶符號(hào)數(shù)最高位為符號(hào)位,正數(shù)符號(hào)位為0,負(fù)數(shù)符號(hào)位為1。定點(diǎn)表示法分為純小數(shù)和純整數(shù)兩種,其中小數(shù)點(diǎn)不占存儲(chǔ)位,而是按照以下約定: 純小數(shù):約定小數(shù)點(diǎn)的位置在機(jī)器數(shù)的最高數(shù)值位之前。 純整數(shù):約定小數(shù)點(diǎn)的位置在機(jī)器數(shù)的最低數(shù)值位之后。 真值:機(jī)器數(shù)對(duì)應(yīng)的實(shí)際數(shù)值。

【帶符號(hào)數(shù)有下列編碼方式,當(dāng)真值為-45時(shí)】

原碼:一個(gè)數(shù)的正常二進(jìn)制表示最高位表示符號(hào),數(shù)值0的源碼有兩種形式+0(00000000)和-0(10000000)。-45對(duì)應(yīng)原碼為10101101反碼:正數(shù)的反碼即原碼;負(fù)數(shù)的反碼是在原碼的基礎(chǔ)上,各位按位取反。數(shù)值0的反碼也有兩種形式:+0 (00000000),-0 (11111111)。-45對(duì)應(yīng)反碼為11010010補(bǔ)碼:正數(shù)的補(bǔ)碼即原碼,負(fù)數(shù)的補(bǔ)碼是在原碼的基礎(chǔ)上,除符號(hào)位外,其他各位按位取反,而后末位+1,若有進(jìn)位則產(chǎn)生進(jìn)位。因此數(shù)值0的補(bǔ)碼只有一種形式+0=-0=00000000。-45對(duì)應(yīng)補(bǔ)碼為11010011移碼:用作浮點(diǎn)運(yùn)算的階碼,無(wú)論正數(shù)負(fù)數(shù),都是將該原碼的補(bǔ)碼的首位 (符號(hào)位)取反得到移碼。-45對(duì)應(yīng)移碼為01010011

【浮點(diǎn)數(shù)的表示】

浮點(diǎn)數(shù):表示方法為N=F*2E,其中E稱為階碼,F(xiàn)稱為尾數(shù);類似于十進(jìn)制的科學(xué)計(jì)數(shù)法,如85.125=085125*10^2,二進(jìn)制如101.011=0.101011*2A3.在浮點(diǎn)數(shù)的表示中,階碼為帶符號(hào)的純整數(shù),尾數(shù)為帶符號(hào)的純小數(shù),要注意符號(hào)占最高位(正數(shù)0負(fù)數(shù)1),其表示格式如下:

階符階碼數(shù)符尾數(shù)很明顯,與科學(xué)計(jì)數(shù)法類似個(gè)浮點(diǎn)數(shù)的表示方法不是唯一的,浮點(diǎn)數(shù)所能表示的數(shù)值范圍由階碼確定,所表示的數(shù)值精度由尾數(shù)確定 尾數(shù)的表示采用規(guī)格化方法,也即帶符號(hào)尾數(shù)的補(bǔ)碼必須為1.0xxxx(或者0.1xxxx(正數(shù)),其中x可為0或1。 浮點(diǎn)數(shù)的運(yùn)算:對(duì)階(使兩個(gè)數(shù)的階碼相同,小階向大階看齊,較小階碼增加幾位,尾數(shù)就右移幾位)。 尾數(shù)計(jì)算(相加,若是減運(yùn)算則加負(fù)數(shù))結(jié)果規(guī)格化(即尾數(shù)表示規(guī)格化,帶符號(hào)尾數(shù)轉(zhuǎn)換為1.0xxxx或0.1xxxx)。

1.1.4 校驗(yàn)碼

碼距:就單個(gè)編碼A:00而言,其碼距為1,因?yàn)槠渲恍枰淖円晃痪妥兂闪硪粋€(gè)編碼。在兩個(gè)編碼中,從A碼到B碼轉(zhuǎn)換所需要改變的位數(shù)稱為碼距,如A:00要轉(zhuǎn)換為B:11,碼距為2。一般來(lái)說(shuō),碼距越大,越利于糾錯(cuò)和檢錯(cuò)奇偶校驗(yàn)碼:在編碼中增加1位校驗(yàn)位來(lái)使編碼中1的個(gè)數(shù)為奇數(shù) (奇校驗(yàn)或者偶數(shù) (偶校驗(yàn)),從而使碼距變?yōu)?。例如: ○ 發(fā)送給接收方,接收方收到后,會(huì)計(jì)算收到的奇校驗(yàn):編碼中,含有奇數(shù)個(gè)1,編碼有多少個(gè)1,如果是奇數(shù)個(gè),則無(wú)誤,是偶數(shù)個(gè),則有誤。 ○ 偶校驗(yàn)同理,只是編碼中有偶數(shù)個(gè)1,由上述,奇偶校驗(yàn)只能檢1位錯(cuò),并且無(wú)法糾錯(cuò)。

【CRC校驗(yàn)碼】

CRC只能檢錯(cuò),不能糾錯(cuò)。使用CRC 編碼,需要先約定一個(gè)生成多項(xiàng)式G(x)生成多項(xiàng)式的最高位和最低位必須是1。假設(shè)原始信息有m位,則對(duì)應(yīng)多項(xiàng)式M(x)。生成校驗(yàn)碼思想就是在原始信息位后追加若干校驗(yàn)位,使得追加的信息能被G(x)整除。接收方接收到帶校驗(yàn)位的信息,然后用G(x)整除。余數(shù)為0,則沒(méi)有錯(cuò)誤;反之則發(fā)生錯(cuò)誤。例:假設(shè)原始信息串為10110,CRC的生成多項(xiàng)式為G(x)=x^4+x+1,求CRC校驗(yàn)碼 (1)在原始信息位后面添0,假設(shè)生成多項(xiàng)式的階為r,則在原始信息位后添加r個(gè)0,本題中,G(x)階為4,則在原始信息串后加4個(gè)0,得到的新串為101100000作為被除數(shù)。 (2)由多項(xiàng)式得到除數(shù),多項(xiàng)中x的冪指數(shù)存在的位置1,不存在的位置0。本題中,x的冪指數(shù)為0,1,4的變量都存在,而冪指數(shù)為2,3的不存在,因此得到串10011 (3)生成CRC校驗(yàn)碼,將前兩步得出的被除數(shù)和除數(shù)進(jìn)行模2除法運(yùn)算 (即不進(jìn)位也不借位的除法運(yùn)算)。得到余數(shù)1111(注意:余數(shù)不足r,則余數(shù)左邊用若千個(gè)0 補(bǔ)齊。如求得余數(shù)為11,r=4,則補(bǔ)兩個(gè)0得到0011)。 (4)生成最終發(fā)送信息串,將余數(shù)添加到原始信息后。上例中,原始信息為410110,添加余數(shù)1111后,結(jié)果為10110 1111。發(fā)送方將此數(shù)據(jù)發(fā)送給接收方 (5)接收方進(jìn)行校驗(yàn)。接收方的CRC 校驗(yàn)過(guò)程與生成過(guò)程類似,接收方接收了帶校驗(yàn)和的幀后,用多項(xiàng)式G(x)來(lái)除。余數(shù)為0,則表示信息無(wú)錯(cuò),否則要求發(fā)送方進(jìn)行重傳。注意:收發(fā)信息雙方需使用相同的生成多項(xiàng)式

【海明碼】

海明碼:本質(zhì)也是利用奇偶性來(lái)錯(cuò)和糾錯(cuò)的檢驗(yàn)方法,構(gòu)成方法是在數(shù)據(jù)位之間的確定位置上插入k個(gè)校驗(yàn)位,通過(guò)擴(kuò)大碼距實(shí)現(xiàn)檢錯(cuò)和糾錯(cuò)設(shè)數(shù)據(jù)位是n位,校驗(yàn)位是k位,則n和k必須滿足以下關(guān)系: 。例:求信息1011的海明碼 (1)校驗(yàn)位的位數(shù)和具體的數(shù)據(jù)位的位數(shù)之間的關(guān)系所有位都編號(hào),從最低位編號(hào),從1開(kāi)始遞增,校驗(yàn)位處于2的n (n=0 1 2.....)次方中,即處于第1,2,4,8,16,32,.....位上,其余位才能填充真正的數(shù)據(jù)位,若信息數(shù)據(jù)為1011,則可知,第1,2,4位為校驗(yàn)位,第3,5,6,7位為數(shù)據(jù)位,用來(lái)從低位開(kāi)始存放1011,得出信息位和校驗(yàn)位分布如下: (2)計(jì)算校驗(yàn)碼 如下圖所示 將所有信息位的編號(hào)都拆分成二進(jìn)制表示?

上圖中,7=4+2+1,表示7由第4位校驗(yàn)位(r2)和第2位校驗(yàn)位(r1)和第1位校驗(yàn)位(r0)共同校驗(yàn)同理,第6位數(shù)據(jù)位6=4+2,第5位數(shù)據(jù)位5=4+1,第3位數(shù)據(jù)位3=2+1前面知道,這些2的n次方都是校驗(yàn)位,可知,第4位校驗(yàn)位校驗(yàn)第765三位數(shù)據(jù)位,因此,第4位校驗(yàn)位r2等于這三位數(shù)據(jù)位的值異或,第2位和第1位校驗(yàn)位計(jì)算原理同上 計(jì)算出三個(gè)校驗(yàn)位后,可知最終要發(fā)送的海明校驗(yàn)碼為1010101。 (3)檢錯(cuò)和糾錯(cuò)原理 接收方收到海明碼之后,會(huì)將每位校驗(yàn)位與某校驗(yàn)的位數(shù)分別異或,即做如下三組運(yùn)算:?

如果是偶校驗(yàn),那么運(yùn)算得到的結(jié)果應(yīng)該全為0,如果是奇校驗(yàn),應(yīng)該全為1,才是正確,假設(shè)是偶校驗(yàn),且接收到的數(shù)據(jù)為1011101 (第四位出錯(cuò)),此時(shí)運(yùn)算的結(jié)果為:?

這里不全為0,表明傳輸過(guò)程有誤,并且按照r2r1r0排列為二進(jìn)制100,這里指出的就是錯(cuò)誤的位數(shù),表示第100,即第4位出錯(cuò),找到了出錯(cuò)位,糾錯(cuò)方法就是將該位逆轉(zhuǎn)。?

1.2 計(jì)算機(jī)體系結(jié)構(gòu)

1.2.1 體系結(jié)構(gòu)分類

按處理機(jī)的數(shù)量進(jìn)行分類: 單處理系統(tǒng)(一個(gè)處理單元和其他設(shè)備集成)、并行處理系統(tǒng)(兩個(gè)以上的處理機(jī)互聯(lián))分布式處理系統(tǒng)(物理上遠(yuǎn)距離且松合的多計(jì)算機(jī)系統(tǒng))Flynn分類法:分類有兩個(gè)因素,即指令流和數(shù)據(jù)流,指令流由控制部分處理,每一個(gè)控制部分處理一條指令流,多指令流就有多個(gè)控制部分;數(shù)據(jù)流由處理器來(lái)處理,每一個(gè)處理器處理一條數(shù)據(jù)流,多數(shù)據(jù)流就有多個(gè)處理器;至于主存模塊,是用來(lái)存儲(chǔ)的,存儲(chǔ)指令流或者數(shù)據(jù)流,因此,無(wú)論是多指令流還是多數(shù)據(jù)流,都需要多個(gè)主存模塊來(lái)存儲(chǔ),對(duì)于主存模塊,指令和數(shù)據(jù)都一樣。依據(jù)計(jì)算機(jī)特性,是由指今來(lái)控制數(shù)據(jù)的傳輸,因此,一條指令可以控制一條或多條數(shù)據(jù)流,但一條數(shù)據(jù)流不能被多條指令控制,否則會(huì)出錯(cuò),就如同上級(jí)命令太多還互相沖突不知道該執(zhí)行哪個(gè),因此多指今單數(shù)據(jù)MISD不可能?

1.2.2?指令系統(tǒng)存

計(jì)算機(jī)指令的組成:一條指令由操作碼和操作數(shù)兩部分組成,操作碼決定要完成的操作,操作數(shù)指參加運(yùn)算的數(shù)據(jù)及其所在的單元地址在計(jì)算機(jī)中,操作要求和操作數(shù)地址都由二進(jìn)制數(shù)碼表示,分別稱作操作碼和地址碼,整條指令以二進(jìn)制編碼的形式存放在存儲(chǔ)器中。計(jì)算機(jī)指令執(zhí)行過(guò)程:取指令--分析指令--執(zhí)行指令三個(gè)步驟,首先將程序計(jì)數(shù)器PC中的指令地址取出,送入地址總線,CPU依據(jù)指令地址去內(nèi)存中取出指令內(nèi)容存入指令寄存器IR;而后由指令譯碼器進(jìn)行分析,分析指令操作碼;最后執(zhí)行指令,取出指令執(zhí)行所需的源操作數(shù)。

【指令尋址方式】順序?qū)ぶ贩绞剑寒?dāng)執(zhí)行一段程序時(shí),是一條指令接著一條指令地順序執(zhí)行;跳躍尋址方式:指下一條指令的地址碼不是由程序計(jì)數(shù)器給出,而是由本條指令直接給出,程序跳跌后,按新的指令地址開(kāi)始順序執(zhí)行。因此,程序計(jì)數(shù)器的內(nèi)容也必須相應(yīng)改變,以便及時(shí)跟蹤新的指令地址。

【指令操作數(shù)的尋址方式】

立即尋址方式:指令的地址碼字段指出的不是地址,而是操作數(shù)本身;直接尋址方式:在指令的地址字段中直接指出操作數(shù)在主存中的地址;間接尋址方式:指令地址碼字段所指向的存儲(chǔ)單元中存儲(chǔ)的是操作數(shù)的地址;寄存器尋址方式:指令中的地址碼是寄存器的編號(hào);基址尋址方式:將基址寄存器的內(nèi)容加上指令中的形式地址而形成操作數(shù)的有效地址,其優(yōu)點(diǎn)是可以擴(kuò)大尋址能力;變址尋址方式:變址尋址方式計(jì)算有效地址的方法與基址尋址方式很相似,它是將變址寄存器的內(nèi)容加上指令中的形式地址而形成操作數(shù)的有效地址。

?【復(fù)雜指令系統(tǒng)和精簡(jiǎn)指令系統(tǒng)】 CISC是復(fù)雜指令系統(tǒng)兼容性強(qiáng),指令繁多、長(zhǎng)度可變,由微程序?qū)崿F(xiàn); RISC是精簡(jiǎn)指令系統(tǒng),指令少,使用頻率接近,主要依靠硬件實(shí)現(xiàn)(通用寄存器,硬布線邏輯控制)?

【指令系統(tǒng)-流水線】

指令流水線原理: 將指令分成不同段,每段由不同的部分去處理,因此可以產(chǎn)生疊加的效果,所有的部件去處理指令的不同段。

RISC中的流水線技術(shù) (1)超流水線 (Super Pipe Line) 技術(shù)。它通過(guò)細(xì)化流水、增加級(jí)數(shù)和提高主頻,使得在每個(gè)機(jī)器周期內(nèi)能完成一個(gè)甚至兩個(gè)浮點(diǎn)操作。其實(shí)質(zhì)是以時(shí)間換取空間 (2) 超標(biāo)量 (Super Scalar) 技術(shù)。它通過(guò)內(nèi)裝多條流水線來(lái)同時(shí)執(zhí)行多個(gè)處理,其時(shí)鐘頻率雖然與一股流水接dw更小的CPI。其實(shí)質(zhì)是以空間換取時(shí)間 (3)超長(zhǎng)指令字 (Very Long Instruction Word,VLIW) 技術(shù)VLIW和超標(biāo)量都是20世紀(jì)8年代出現(xiàn)的概念,其共同點(diǎn)是要同時(shí)執(zhí)行多條指令,其不同在于超標(biāo)量依靠硬件來(lái)實(shí)現(xiàn)并行處理的調(diào)度,VLIW 則充分發(fā)揮軟件的作用,而使硬件簡(jiǎn)化性能提高。

【流水線時(shí)間計(jì)算】流水線周期:指令分成不同執(zhí)行段,其中執(zhí)行時(shí)間最長(zhǎng)的段為流水線周期。流水線執(zhí)行時(shí)間:1條指令總執(zhí)行時(shí)間+ (總指令條數(shù)-1)*流水線周期。流水線吞吐率計(jì)算:吞吐率即單位時(shí)間內(nèi)執(zhí)行的指令條數(shù)公式:指令條數(shù)/流水線執(zhí)行時(shí)間。流水線的加速比計(jì)算:加速比即使用流水線后的效率提升度,即比不使用流水線快了多少倍,越高表明流水線效率越高,公式:不使用流水線執(zhí)行時(shí)間/使用流水線執(zhí)行時(shí)間?

1.2.3?儲(chǔ)系系統(tǒng)

計(jì)算機(jī)采用分級(jí)存儲(chǔ)體系的主要目的是為了解決存儲(chǔ)容量、成本和速度之間的矛盾問(wèn)題。兩級(jí)存儲(chǔ):Cache-主存、主存-輔存(虛擬存儲(chǔ)體系)。局部性原理:總的來(lái)說(shuō),在CPU運(yùn)行時(shí),所訪問(wèn)的數(shù)據(jù)會(huì)趨向于一個(gè)較小的局部空間地址內(nèi),包括下面兩個(gè)方面: (1)時(shí)間局部性原理:如果一個(gè)數(shù)據(jù)項(xiàng)正在被訪問(wèn),那么在近期它很可能會(huì)被再次訪問(wèn),即在相鄰的時(shí)間里會(huì)訪問(wèn)同一個(gè)數(shù)據(jù)項(xiàng)。 (2)空間局部性原理:在最近的將來(lái)會(huì)用到的數(shù)據(jù)的地址和現(xiàn)在正在訪問(wèn)的數(shù)據(jù)地址很可能是相近的,即相鄰的空間地址會(huì)被連續(xù)訪問(wèn)。

高速緩存Cache用來(lái)存儲(chǔ)當(dāng)前最活躍的程序和數(shù)據(jù),直接與CPU交互,位于CPU由半導(dǎo)體材料構(gòu)成。其內(nèi)容是主存和主存之間,容量小,速度為內(nèi)存的5-10倍內(nèi)存的副本拷貝,對(duì)于程序員來(lái)說(shuō)是透明的。Cache由控制部分和存儲(chǔ)器組成,存儲(chǔ)器存儲(chǔ)數(shù)據(jù),控制部分判斷CPU要訪問(wèn)的數(shù)據(jù)是否在cache中,在則命中,不在則依據(jù)一定的算法從主存中替換。地址映射: 在CPU工作時(shí),送出的是主存單元的地址,而應(yīng)從Cache存儲(chǔ)器中讀/寫(xiě)信息。這就需要將主存地址轉(zhuǎn)換為Cache存儲(chǔ)器地址,這種地址的轉(zhuǎn)換稱為地址映像,由硬件自動(dòng)完成映射,分為下列三種方法:? (1)直接映像:將Cache存儲(chǔ)器等分成塊,主存也等分成塊并編號(hào)。主存中的塊與Cache中的塊的對(duì)應(yīng)關(guān)系是固定的,也即二者塊號(hào)相同才能命中。地址變換簡(jiǎn)單但不靈活,容易造成資源浪費(fèi)。 (2)全相聯(lián)映像:同樣都等分成塊并編號(hào)。主存中任意一塊都與Cache中任意一塊對(duì)應(yīng)。因此可以隨意調(diào)入Cache任意位置,但地址變換復(fù)雜,速度較慢。因?yàn)橹鞔婵梢噪S意調(diào)入Cache任意塊,只有當(dāng)Cache滿了才會(huì)發(fā)生塊沖突,是最不容易發(fā)生塊沖突的映像方式。 (3)組組相連映像:前面兩種方式的結(jié)合,將Cache存儲(chǔ)器先分塊再分組,主存也同樣先分塊再分組,組間采用直接映像,即主存中組號(hào)與Cache中組號(hào)相同的組才能命中,但是組內(nèi)全相聯(lián)映像,也即組號(hào)相同的兩個(gè)組內(nèi)的所有塊可以任意調(diào)換。

【磁盤(pán)結(jié)構(gòu)和參數(shù)】

磁盤(pán)有正反兩個(gè)盤(pán)面,每個(gè)盤(pán)面有多個(gè)同心圓每個(gè)同心圓是一個(gè)磁道,每個(gè)同心圓又被劃分為多個(gè)扇區(qū),數(shù)據(jù)就被存放在一個(gè)個(gè)扇區(qū)中。磁頭首先要尋找到對(duì)應(yīng)的磁道,然后等待磁盤(pán)進(jìn)行周期旋轉(zhuǎn),旋轉(zhuǎn)到指定的扇區(qū),才能讀取到對(duì)應(yīng)的數(shù)據(jù),因此,會(huì)產(chǎn)生尋道時(shí)間和等待時(shí)間。公式為:存取時(shí)間=尋道時(shí)間+等待時(shí)間(平均定位時(shí)間+轉(zhuǎn)動(dòng)延遲)。注意:尋道時(shí)間是指磁頭移動(dòng)到磁道所需的時(shí)間,等待時(shí)間為等待讀寫(xiě)的扇區(qū)轉(zhuǎn)到磁頭下方所用的時(shí)間。

1.2.4?輸入/輸出技術(shù)

計(jì)算機(jī)系統(tǒng)中存在多種內(nèi)存與接口地址的編址方法,常見(jiàn)的是下面兩種: (1)內(nèi)存與接口地址獨(dú)立編址方法內(nèi)存地址和接口地址是完全獨(dú)立的兩個(gè)地址空間。訪問(wèn)數(shù)據(jù)時(shí)所使用的指令也完全不同,用于接口的指令只用于接口的讀/寫(xiě),其余的指令全都是用于內(nèi)存的因此,在編程序或讀程序時(shí)很易使用和辨認(rèn)。這種編址方法的缺點(diǎn)是用于接口的指令太少、功能太弱。 (2)內(nèi)存與接口地址統(tǒng)一編址方法內(nèi)存地址和接口地址統(tǒng)一在一個(gè)公共的地址空間里,即內(nèi)存單元和接口共用地址空間。優(yōu)點(diǎn)是原則上用于內(nèi)存的指令全都可以用于接口,這就大大地增強(qiáng)了對(duì)接口的操作功能,而且在指令上也不再區(qū)分內(nèi)存或接口指令。該編址方法的缺點(diǎn)就在于整個(gè)地址空間被分成兩部分,其中一部分分配給接口使用,剩余的為內(nèi)存所用,這經(jīng)常會(huì)導(dǎo)致內(nèi)存地址不連續(xù)。

計(jì)算機(jī)和外設(shè)間的數(shù)據(jù)交互方式: (1)程序控制(查詢)方式:CPU主動(dòng)查詢外設(shè)是否完成數(shù)據(jù)傳輸,效率極低。 (2)程序中斷方式:外設(shè)完成數(shù)據(jù)傳輸后,向CPU發(fā)送中斷,等待CPU處理數(shù)據(jù)效率相對(duì)較高。中斷響應(yīng)時(shí)間指的是從發(fā)出中斷請(qǐng)求到開(kāi)始進(jìn)入中斷處理程序中斷處理時(shí)間指的是從中斷處理開(kāi)始到中斷處理結(jié)束。中斷向量提供中斷服務(wù)程序的入口地址。多級(jí)中斷嵌套,使用堆棧來(lái)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。 (3)DMA方式(直接主存存取):CPU只需完成必要的初始化等操作,數(shù)據(jù)傳輸?shù)恼麄€(gè)過(guò)程都由DMA控制器來(lái)完成,在主存和外設(shè)之間建立直接的數(shù)據(jù)通路效率很高。

在一個(gè)總線周期結(jié)束后,CPU會(huì)響應(yīng)DMA請(qǐng)求開(kāi)始讀取數(shù)據(jù);CPU響應(yīng)程序中斷方式請(qǐng)求是在一條指令執(zhí)行結(jié)束時(shí)。

1.2.5?總線結(jié)構(gòu)

總線(Bus)是指計(jì)算機(jī)設(shè)備和設(shè)備之間傳輸信息的公共數(shù)據(jù)通道。總線是連接計(jì)算機(jī)硬件系統(tǒng)內(nèi)多種設(shè)備的通信線路,它的一個(gè)重要特征是由總線上的所有設(shè)備共享,因此可以將計(jì)算機(jī)系統(tǒng)內(nèi)的多種設(shè)備連接到總線上。從廣義上講,任何連接兩個(gè)以上電子元器件的導(dǎo)線都可以稱為總線,通常分為以下三類:(1)內(nèi)部總線:內(nèi)部芯片級(jí)別的總線,芯片與處理器之間通信的總線。(2)系統(tǒng)總線:是板級(jí)總線,用于計(jì)算機(jī)內(nèi)各部分之間的連接,具體分為數(shù)據(jù)總線(并行數(shù)據(jù)傳輸位數(shù))、地址總線 (系統(tǒng)可管理的內(nèi)存空間的大小) 、控制總線(傳送控制命令)。代表的有ISA總線、EISA總線、PCI總線。(3)外部總線:設(shè)備一級(jí)的總線,微機(jī)和外部設(shè)備的總線。代表的有RS232(串行總線)、SCSI(并行總線)、USB (通用串行總線,即插即用,支持熱插拔)。

1.3 可靠性、性能、安全

1.3.1 計(jì)算機(jī)可靠性

【串并聯(lián)系統(tǒng)可靠性】 無(wú)論什么系統(tǒng),都是由多個(gè)設(shè)備組成的協(xié)同工作,而這多個(gè)設(shè)備的組合方式可以是串聯(lián)、并聯(lián),也可以是混合模式,假設(shè)每個(gè)設(shè)備的可靠性為R1,R2......Rn則不同的系統(tǒng)的可靠性公式如下:(1)串聯(lián)系統(tǒng),一個(gè)設(shè)備不可靠,整個(gè)系統(tǒng)崩潰,整個(gè)系統(tǒng)可靠性R=R1*R2*...* Rn。

?(2)并聯(lián)系統(tǒng),所有設(shè)備都不可靠,整個(gè)系統(tǒng)才崩潰,整個(gè)系統(tǒng)可靠性R=1-(1-R1) *(1-R2) * ...*(1-Rn)。

1.3.2?計(jì)算機(jī)系統(tǒng)的性能評(píng)價(jià)

【性能評(píng)測(cè)的常用方法】 (1)時(shí)鐘頻率。一般來(lái)講,主頻越高,速度越快。 (2)指令執(zhí)行速度。計(jì)量單位KIPS、MIPS。 (3)等效指令速度法。統(tǒng)計(jì)各類指令在程序中所占比例,并進(jìn)行折算,是一種固定比例法。 (4)數(shù)據(jù)處理速率 (Processing Data Rate,PDR)法。采用計(jì)算PDR 值的方法來(lái)衡量機(jī)器性能,PDR值越大,機(jī)器性能越好。PDR與每條指令和每個(gè)操作數(shù)的平均位數(shù)以及每條指令的平均運(yùn)算速度有關(guān)。 (5)核心程序法。把應(yīng)用程序中用得最頻繁的那部分核心程序作為評(píng)價(jià)計(jì)算機(jī)性能的標(biāo)準(zhǔn)程序,在不同的機(jī)器上運(yùn)行,測(cè)得其執(zhí)行時(shí)間,作為各類機(jī)器性能評(píng)價(jià)的依據(jù)。?【基準(zhǔn)程序法】 基準(zhǔn)程序法是目前被用戶一致承認(rèn)的測(cè)試性能的較好方法,有(Benchmark)多種多樣的基準(zhǔn)程序,包括: (1)整數(shù)測(cè)試程序。同一廠家的機(jī)器,采用相同的體系結(jié)構(gòu),用相同的基準(zhǔn)程序測(cè)試,得到的MIPS 值越大,一般說(shuō)明機(jī)器速度越快。 (2)浮點(diǎn)測(cè)試程序。指標(biāo)MFLOPS(理論峰值浮點(diǎn)速度)。 (3)SPEC基準(zhǔn)程序(SPEC Benchmark)。重點(diǎn)面向處理器性能的基準(zhǔn)程序集將被測(cè)計(jì)算機(jī)的執(zhí)行時(shí)間標(biāo)準(zhǔn)化,即將被測(cè)計(jì)算機(jī)的執(zhí)行時(shí)間除以一個(gè)參考處理器的執(zhí)行時(shí)間。 (4)TPC基準(zhǔn)程序。用于評(píng)測(cè)計(jì)算機(jī)在事務(wù)處理、數(shù)據(jù)庫(kù)處理、企業(yè)管理與決策支持系統(tǒng)等方面的性能。其中,TPC-C是在線事務(wù)處理(On-lineTransactionProcessing,OLTP)的基準(zhǔn)程序,TPC-D是決策支持的基準(zhǔn)程序。TPC-E作為大型企業(yè)信息服務(wù)的基準(zhǔn)程序。?

1.3.3?信息安全

信息安全含義及屬性:保護(hù)信息的保密性、完整性、可用性,另外也包括其他屬性,如:真實(shí)性、可核查性、不可抵賴性和可靠性。保密性:信息不被泄漏給未授權(quán)的個(gè)人、實(shí)體和過(guò)程或不被其使用的特性包括: (1)最小授權(quán)原則 (2)防暴露 (3)信息加密 (4)物理保密完整性:信息未經(jīng)授權(quán)不能改變的特性。影響完整性的主要因素有設(shè)備故障誤碼、人為攻擊和計(jì)算機(jī)病毒等。保證完整性的方法包括: (1)協(xié)議:通過(guò)安全協(xié)議檢測(cè)出被刪除、失效、被修改的字段。 (2)糾錯(cuò)編碼方法:利用校驗(yàn)碼完成檢錯(cuò)和糾錯(cuò)功能。 (3)密碼校驗(yàn)和方法。 (4)數(shù)字簽名:能識(shí)別出發(fā)送方來(lái)源。 (5)公證:請(qǐng)求系統(tǒng)管理或中介機(jī)構(gòu)證明信息的真實(shí)性??捎眯?需要時(shí),授權(quán)實(shí)體可以訪問(wèn)和使用的特性。一般用系統(tǒng)正常使用時(shí)間和整個(gè)工作時(shí)間之比來(lái)度量。其他屬性:

真實(shí)性:指對(duì)信息的來(lái)源進(jìn)行判斷,能對(duì)偽造來(lái)源的信息予以鑒別??珊瞬樾裕合到y(tǒng)實(shí)體的行為可以被獨(dú)一無(wú)二的追溯到該實(shí)體的特性,這個(gè)特性就是要求該實(shí)體對(duì)其行為負(fù)責(zé),為探測(cè)和調(diào)查安全違規(guī)事件提供了可能性。不可抵賴性:是指建立有效的責(zé)任機(jī)制,防止用戶否認(rèn)其行為,這一點(diǎn)在電子商務(wù)中是極其重要的??煽啃裕合到y(tǒng)在規(guī)定的時(shí)間和給定的條件下,無(wú)故障地完成規(guī)定功能的概率【安全需求】 可劃分為物理線路安全、網(wǎng)絡(luò)安全、系統(tǒng)安全和應(yīng)用安全;從各級(jí)安全需求字面上也可以理解: (1)物理線路就是物理設(shè)備如理環(huán)境; (2)網(wǎng)絡(luò)安全指網(wǎng)絡(luò)上的攻擊、入侵; (3)系統(tǒng)安全指的是操作系統(tǒng)漏洞、補(bǔ)丁等; (4)應(yīng)用安全就是上層的應(yīng)用軟件,包括數(shù)據(jù)庫(kù)軟件。

【對(duì)稱加密技術(shù)】 數(shù)據(jù)的加密和解密的密鑰 (密碼) 是相同的,屬于不公開(kāi)密鑰加密算法。其缺點(diǎn)是加密強(qiáng)度不高 (因?yàn)槊荑€位數(shù)少)且密鑰分發(fā)困難 (因?yàn)槊荑€還需要傳輸給接收方,也要考慮保密性等問(wèn)題)。優(yōu)點(diǎn)是加密速度快,適合加密大數(shù)據(jù)。

常見(jiàn)的對(duì)稱密鑰加密算法如下: (1)DES:替換+移位、56位密鑰、64位數(shù)據(jù)塊、速度快,密鑰易產(chǎn)生; (2)3DES:三重DES,兩個(gè)56位密鑰K1、K2。加密:K1加密->K2解密->K1加密,解密:K1解密->K2加密->K1解密; (3)AES:是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES.對(duì)其的要求是“至少像3DES一樣安全”; (4)RC-5:RSA數(shù)據(jù)安全公司的很多產(chǎn)品都使用了RC-5; (5)IDEA:128位密鑰,64位數(shù)據(jù)塊,比DES的加密性好,對(duì)計(jì)算機(jī)功能要求相對(duì)低。

【非對(duì)稱加密技術(shù)】 數(shù)據(jù)的加密和解密的密鑰是不同的,分為公鑰和私鑰是公開(kāi)密鑰加密算法其缺點(diǎn)是加密速度慢。優(yōu)點(diǎn)是安全性高,不容易破解。 非對(duì)稱技術(shù)的原理是:發(fā)送者發(fā)送數(shù)據(jù)時(shí),使用接收者的公鑰作加密密鑰私鑰作解密密鑰,這樣只有接收者才能解密密文得到明文。安全性更高,因?yàn)闊o(wú)需傳輸密鑰。但無(wú)法保證完整性。如下:

常見(jiàn)的非對(duì)稱加密算法如下RSA:512位(或1024位)密鑰,計(jì)算機(jī)量極大,難破解,Elgamal、ECC(圓曲線算法)、背包算法、Rabin、D-H等。

【對(duì)稱密鑰和非對(duì)稱密鑰的比較】 相比較可知,對(duì)稱加密算法密鑰一般只有56位,因此加密過(guò)程簡(jiǎn)單,適合加密大數(shù)據(jù),也因此加密強(qiáng)度不高,而非對(duì)稱加密算法密鑰有1024位,相應(yīng)的解密計(jì)算量龐大,難以破解,卻不適合加密大數(shù)據(jù),一般用來(lái)加密對(duì)稱算法的密鑰,這樣,就將兩個(gè)技術(shù)組合使用了,這也是數(shù)字信封的原理。

【數(shù)字信封原理】 信是對(duì)稱加密的密鑰,數(shù)字信封就是對(duì)此密鑰進(jìn)行非對(duì)稱加密,具體過(guò)程:發(fā)送方將數(shù)據(jù)用對(duì)稱密鑰加密傳輸,而將對(duì)稱密鑰用接收方公鑰加密發(fā)送給對(duì)方。接收方收到數(shù)字信封,用自己的私鑰解密信封,取出對(duì)稱密鑰解密得原文。 數(shù)字信封運(yùn)用了對(duì)稱加密技術(shù)和非對(duì)稱加密技術(shù),本質(zhì)是使用對(duì)稱密鑰加密數(shù)據(jù),非對(duì)稱密鑰加密對(duì)稱密鑰,解決了對(duì)稱密鑰的傳輸問(wèn)題。?

【信息摘要】所謂信息摘要,就是一段數(shù)據(jù)的特征信息,當(dāng)數(shù)據(jù)發(fā)生了改變,信息摘要也會(huì)發(fā)生改變,發(fā)送方會(huì)將數(shù)據(jù)和信息摘要一起傳給接收方,接收方會(huì)根據(jù)接收到的數(shù)據(jù)重新生成一個(gè)信息摘要,若此摘要和接收到的摘要相同,則說(shuō)明數(shù)據(jù)正確。信息摘要是由哈希函數(shù)生成的。信息摘要的特點(diǎn):不算數(shù)據(jù)多長(zhǎng),都會(huì)產(chǎn)生固定長(zhǎng)度的信息摘要,任何不同的輸入數(shù)據(jù),都會(huì)產(chǎn)生不同的信息摘要,單向性,即只能由數(shù)據(jù)生成信息摘要不能由信息摘要還原數(shù)據(jù)。信息摘要算法:MD5(產(chǎn)生128位的輸出)、SHA-1(安全散列算法,產(chǎn)生160位的輸出,安全性更高)

【數(shù)字簽名】 唯一標(biāo)識(shí)一個(gè)發(fā)送方發(fā)送者發(fā)送數(shù)據(jù)時(shí),使用發(fā)送者的私鑰進(jìn)行加密,接收者收到數(shù)據(jù)后,只能使用發(fā)送者的公鑰進(jìn)行解密這樣就能唯一確定發(fā)送方,這也是數(shù)字簽名的過(guò)程但無(wú)法保證機(jī)密性。如下:

【公鑰基礎(chǔ)設(shè)施PKI】 是以不對(duì)稱密鑰加密技術(shù)為基礎(chǔ),以數(shù)據(jù)機(jī)密性、完整性身份認(rèn)證和行為不可抵賴性為安全目的,來(lái)實(shí)施和提供安全服務(wù)的具有普適性的安全基礎(chǔ)設(shè)施。 (1)數(shù)字證書(shū):一個(gè)數(shù)據(jù)結(jié)構(gòu),是一種由一個(gè)可信任的權(quán)威機(jī)構(gòu)簽署的信息集合。在不同的應(yīng)用中有不同的證書(shū)。如X.509證書(shū)必須包含下列信息:(1)版本號(hào)息;(2)序列號(hào);(3)簽名算法標(biāo)識(shí)符; (4)認(rèn)證機(jī)構(gòu);(5)有效期限;(6)主題信;(7)認(rèn)證機(jī)構(gòu)的數(shù)字簽名;(8)公鑰信息。 公鑰證書(shū)主要用于確保公鑰及其與用戶綁定關(guān)系的安全。這個(gè)公鑰就是證書(shū)所標(biāo)識(shí)的那個(gè)主體的合法的公鑰。任何一個(gè)用戶只要知道簽證機(jī)構(gòu)的公鑰,就能檢查對(duì)證書(shū)的簽名的合法性。如果檢查正確,那么用戶就可以相信那個(gè)證書(shū)所攜帶的公鑰是真實(shí)的,而且這個(gè)公鑰就是證書(shū)所標(biāo)識(shí)的那個(gè)主體的合法的公鑰例如駕照 (2)簽證機(jī)構(gòu)CA:負(fù)責(zé)簽發(fā)證書(shū)、管理和撤銷證書(shū)。是所有注冊(cè)用戶所信賴的權(quán)威機(jī)構(gòu),CA在給用戶簽發(fā)證書(shū)時(shí)要加上自己的數(shù)字簽名,以保證證書(shū)信息的真實(shí)性。任何機(jī)構(gòu)可以用CA的公鑰來(lái)驗(yàn)證該證書(shū)的合法性。?

第二章 程序語(yǔ)言基礎(chǔ)知識(shí)

2.1 程序設(shè)計(jì)語(yǔ)言的基本概念

程序設(shè)計(jì)語(yǔ)言是為了書(shū)寫(xiě)計(jì)算機(jī)程序而人為設(shè)計(jì)的符號(hào)語(yǔ)言,用于對(duì)計(jì)算過(guò)程進(jìn)行描述、組織和推導(dǎo)。低級(jí)語(yǔ)言:機(jī)器語(yǔ)言 (計(jì)算機(jī)硬件只能識(shí)別o和1的指令序列),匯編語(yǔ)言高級(jí)語(yǔ)言:功能更強(qiáng),抽象級(jí)別更高,與人們使用的自然語(yǔ)言比較接近。各程序設(shè)計(jì)語(yǔ)言特點(diǎn): (1)Fortran語(yǔ)言:科學(xué)計(jì)算,執(zhí)行效率高 (2)Pascal語(yǔ)言:為教學(xué)開(kāi)發(fā),表達(dá)能力強(qiáng) (3)C語(yǔ)言:指針操作能力強(qiáng),可以開(kāi)發(fā)系統(tǒng)級(jí)軟件,高效 (4)C++語(yǔ)言:面向?qū)ο?,高效?(5)Java語(yǔ)言:面向?qū)ο螅虚g代碼,跨平臺(tái) (6)C#語(yǔ)言:面向?qū)ο?,中間代碼,.Net框架 (7)Python是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言 (8)Prolog是邏輯型程序設(shè)計(jì)語(yǔ)言。匯編:將匯編語(yǔ)言翻譯成目標(biāo)程序執(zhí)行。解釋和編譯:將高級(jí)語(yǔ)言翻譯成目標(biāo)程序執(zhí)行。不同之處在于: (1)編譯程序生成獨(dú)立的可執(zhí)行文件,直接運(yùn)行,運(yùn)行時(shí)無(wú)法控制源程序,效率高。 (2)而解釋程序不生成可執(zhí)行文件,可以逐條解釋執(zhí)行,用于調(diào)試模式,可以控制源程序,因?yàn)檫€需要控制程序,因此執(zhí)行速度慢,效率低。程序設(shè)計(jì)語(yǔ)言定義三要素::語(yǔ)法、語(yǔ)義、語(yǔ)用。 (1)語(yǔ)法是指由程序設(shè)計(jì)語(yǔ)言的基本符號(hào)組成程序中的各個(gè)語(yǔ)法成分 (包括程序)的-組規(guī)則,其中由基本字符構(gòu)成的符號(hào) (單詞)書(shū)寫(xiě)規(guī)則稱為詞法規(guī)則,由符號(hào)構(gòu)成語(yǔ)法成分的規(guī)則稱為語(yǔ)法規(guī)則。 (2)語(yǔ)義是程序設(shè)計(jì)語(yǔ)言中按語(yǔ)法規(guī)則構(gòu)成的各個(gè)語(yǔ)法成分的含義,可分為靜態(tài)語(yǔ)義和動(dòng)態(tài)語(yǔ)義。靜態(tài)語(yǔ)義指編譯時(shí)可以確定的語(yǔ)法成分的含義,而運(yùn)行時(shí)刻才能確定的含義是動(dòng)態(tài)語(yǔ)義。一個(gè)程序的執(zhí)行效果說(shuō)明了該程序的語(yǔ)義,它取決于構(gòu)成程序的各個(gè)組成部分的語(yǔ)義。 (3)語(yǔ)用表示了構(gòu)成語(yǔ)言的各個(gè)記號(hào)和使用者的關(guān)系,涉及符號(hào)的來(lái)源、使用和影響。語(yǔ)言的實(shí)現(xiàn)則有個(gè)語(yǔ)境問(wèn)題。語(yǔ)境是指理解和實(shí)現(xiàn)程序設(shè)計(jì)語(yǔ)言的環(huán)境,包括編譯環(huán)境和運(yùn)行環(huán)境。程序設(shè)計(jì)語(yǔ)言的分類: (1)命令式和結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,包括Fortran、PASCAL和C語(yǔ)言 (2)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,包括c++、JAVA和Smalltalk語(yǔ)言 (3)函數(shù)式程序設(shè)計(jì)語(yǔ)言,包括LISP、Haskell、Scala、Scheme、APL等 (4)邏輯型程序設(shè)計(jì)語(yǔ)言,包括PROLOG。程序設(shè)計(jì)語(yǔ)言的基本成分: (1)數(shù)據(jù)成分:指一種程序設(shè)計(jì)語(yǔ)言的數(shù)據(jù)和數(shù)據(jù)類型。數(shù)據(jù)分為常量(程序運(yùn)行全局量 (存儲(chǔ)空間在靜態(tài)數(shù)據(jù)時(shí)不可改變)、變量(程序運(yùn)行時(shí)可以改變)區(qū)分配)、局部量 (存儲(chǔ)空間在堆棧區(qū)分配)數(shù)據(jù)類型有整型、字符型、雙精度、單精度浮點(diǎn)型、布爾型等。 (2)運(yùn)算成分:指明允許使用的運(yùn)算符號(hào)及運(yùn)算規(guī)則。包括算術(shù)運(yùn)算、邏輯運(yùn)算關(guān)系運(yùn)算、位運(yùn)算等。 (3)控制成分:指明語(yǔ)言允許表述的控制結(jié)構(gòu)。包括順序結(jié)構(gòu)、選擇結(jié)構(gòu)、構(gòu)。 (4)傳輸成分:指明語(yǔ)言允許的數(shù)據(jù)傳輸方式。如賦值處理、數(shù)據(jù)的輸入輸出等。

2.2 程序設(shè)計(jì)語(yǔ)言的基本成分

函數(shù):C程序由一個(gè)或多個(gè)函數(shù)組成,每個(gè)函數(shù)都有一個(gè)名字,其中有且僅有個(gè)名字為main的函數(shù)作為程序運(yùn)行時(shí)的起點(diǎn)。函數(shù)的使用涉及3個(gè)概念:函婁定義、函數(shù)聲明和函數(shù)調(diào)用。 函數(shù)的定義包括兩部分:函數(shù)首部和函數(shù)體。函數(shù)的定義描述了函數(shù)做什么和怎么做。函數(shù)首部說(shuō)明了函數(shù)返回值的數(shù)據(jù)類型、函數(shù)的名字和函數(shù)運(yùn)行時(shí)所需的參數(shù)及類型。函數(shù)所實(shí)現(xiàn)的功能在函數(shù)體部分進(jìn)行描述。函數(shù)應(yīng)該先聲明后引用。如果程序中對(duì)一個(gè)函數(shù)的調(diào)用在該函數(shù)的定義之前進(jìn)行,則應(yīng)該在調(diào)用前對(duì)被調(diào)用函數(shù)進(jìn)行聲明。函數(shù)原型用于聲明函數(shù)。函數(shù)聲明的一般形式為:返回值類型函數(shù)名(參數(shù)類型表)。函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參表)函數(shù)調(diào)用時(shí)實(shí)參與形參間交換信息的方法有值調(diào)用和用調(diào)用兩種 (1)值調(diào)用 (Call by Value) :若實(shí)現(xiàn)函數(shù)調(diào)用時(shí)將實(shí)參的值傳遞給相應(yīng)的形參,則稱為是傳值調(diào)用。在這種方式下形參不能向?qū)崊鬟f信息。在C語(yǔ)言中,要實(shí)現(xiàn)被調(diào)用函數(shù)對(duì)實(shí)參的修改,必須用指針作為參數(shù)。即調(diào)用時(shí)需要先對(duì)實(shí)參進(jìn)行取地址運(yùn)算,然后將實(shí)參的地址傳遞給指針形參。其本質(zhì)上仍屬于值調(diào)用。這種方式實(shí)現(xiàn)了間接內(nèi)存訪問(wèn)。 (2)引用調(diào)用 (Call by Reference):引用是C++中引入的概念,當(dāng)形式參數(shù)為引用類型時(shí),形參名實(shí)際上是實(shí)參的別名,函數(shù)中對(duì)形參的訪問(wèn)和修改實(shí)際上就是針對(duì)相應(yīng)實(shí)參所做的訪問(wèn)和改變。

2.3 編譯程序基本原理

編譯程序?qū)Ω呒?jí)語(yǔ)言源程序進(jìn)行編譯的過(guò)程中,要不斷收集、記錄和使用源程序中一些相關(guān)符號(hào)的類型和特征等信息,并將其存入符號(hào)表中,編譯過(guò)程如下: (1)詞法分析:是編譯過(guò)程的第一個(gè)階段。這個(gè)階段的任務(wù)是從左到右一個(gè)字符一個(gè)字符地讀入源程序,即對(duì)構(gòu)成源程序的字符流進(jìn)行掃描然后根據(jù)構(gòu)詞規(guī)則識(shí)別單詞(也稱單詞符號(hào)或符號(hào))。 (2)語(yǔ)法分析:是編譯過(guò)程的一個(gè)邏輯階段。語(yǔ)法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語(yǔ)法短語(yǔ),如“程序”,“語(yǔ)句”,“表達(dá)式”等等語(yǔ)法分析程序判斷源程序在結(jié)構(gòu)上是否正確。 (3)語(yǔ)義分析:是編譯過(guò)程的一個(gè)邏輯階段語(yǔ)義分析的任務(wù)是對(duì)結(jié)構(gòu)上正確的源程序進(jìn)行上下文有關(guān)性質(zhì)的審查,進(jìn)行類型審查。如類型匹配、除法除數(shù)不為0等。又分為靜態(tài)語(yǔ)義錯(cuò)誤 (在編譯階段能夠查找出來(lái))和動(dòng)態(tài)語(yǔ)義錯(cuò)誤 (只能在運(yùn)行時(shí)發(fā)現(xiàn))。

?中間代碼和目標(biāo)代碼:中間代碼是根據(jù)語(yǔ)義分析產(chǎn)生的,需要經(jīng)過(guò)優(yōu)化鏈接最終生成可執(zhí)行的自標(biāo)代碼。引入中間代碼的目的是進(jìn)行與機(jī)器無(wú)關(guān)的代碼優(yōu)化處理。常用的中間代碼有后綴式(逆波蘭式)三元式(三地址碼)、四元式和樹(shù)等形式。需要考慮三個(gè)問(wèn)題(一是如何生成較短的目標(biāo)代碼;二是如何充分利用計(jì)算機(jī)中的寄存器,減少目標(biāo)代碼訪問(wèn)存儲(chǔ)單元的次數(shù);三是如何充分利用計(jì)算機(jī)指令系統(tǒng)的特點(diǎn),以提高目標(biāo)代碼的質(zhì)量)前綴表達(dá)式:+ab中綴表達(dá)式:a+b后綴表達(dá)式:ab+主要掌握上述三種表達(dá)式即可,其實(shí)就是樹(shù)的三種遍歷,一般正常的表達(dá)式是中席遍歷,即中綴表達(dá)式,根據(jù)其構(gòu)造出樹(shù),再按題目要求求出前綴或后綴式。簡(jiǎn)單求法:后綴表達(dá)式是從左到右開(kāi)始,先把表達(dá)式加上括號(hào),再依次把運(yùn)算符加到本層次的括號(hào)后面。

第三章 數(shù)據(jù)結(jié)構(gòu)與算法

3.1 數(shù)據(jù)結(jié)構(gòu)

3.1.1 線性結(jié)構(gòu)

線性結(jié)構(gòu):每個(gè)元素最多只有一個(gè)出度和一個(gè)入度,表現(xiàn)為一條線狀。線性表按存儲(chǔ)方式分為順序表和鏈表。存儲(chǔ)結(jié)構(gòu):

順序存儲(chǔ):用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表中的數(shù)據(jù)元素,使得邏輯上相鄰的元素物理上也相鄰。鏈?zhǔn)酱鎯?chǔ):存儲(chǔ)各數(shù)據(jù)元素的結(jié)點(diǎn)的地址并不要求是連續(xù)的,數(shù)據(jù)元素邏輯上相鄰,物理上分開(kāi)。

順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)的對(duì)比如下圖所示?

(1)在空間方面:因?yàn)殒湵磉€需要存儲(chǔ)指針,因此有空間浪費(fèi)存在。 (2)在時(shí)間方面,當(dāng)需要對(duì)元素進(jìn)行破壞性操作 (插入、刪除) 時(shí),鏈表效率更高,因?yàn)槠渲恍枰薷闹羔樦赶蚣纯桑樞虮硪驗(yàn)榈刂肥沁B續(xù)的,當(dāng)刪除或插入一個(gè)元素后,后面的其他節(jié)點(diǎn)位置都需要變動(dòng)。 (3)而當(dāng)需要對(duì)元素進(jìn)行不改變結(jié)構(gòu)操作時(shí)(讀取、查找),順序表效率更高因?yàn)槠湮锢淼刂肥沁B續(xù)的,如同數(shù)組一般只需按索引號(hào)就可快速定位,而鏈表需要從頭節(jié)點(diǎn)開(kāi)始,一個(gè)個(gè)的查找下去。

棧和隊(duì)列隊(duì)列、棧結(jié)構(gòu)如下圖,隊(duì)列是先進(jìn)先出,分隊(duì)頭和隊(duì)尾棧是先進(jìn)后出,只有棧頂能進(jìn)出。循環(huán)隊(duì)列 設(shè)循環(huán)隊(duì)列Q的容量為MAXSIZE,初始時(shí)隊(duì)列為空,且Qrear和Qfront都等于0;元素入隊(duì)時(shí)修改隊(duì)尾指針,即令Qrear=(Q.rear+1)%MAXSIZE;元素出隊(duì)時(shí)修改隊(duì)頭指針,即令Qfront==(Qfront+1)%MAXSIZE根據(jù)隊(duì)列操作的定義,當(dāng)出隊(duì)操作導(dǎo)致隊(duì)列變?yōu)榭諘r(shí),有Qrear==Qfront;若入隊(duì)操作導(dǎo)致隊(duì)列滿,則Qrear==Qfront。在隊(duì)列空和隊(duì)列滿的情況下,循環(huán)隊(duì)列的隊(duì)頭、隊(duì)尾指針指向的位置是相同的,此時(shí)僅僅根據(jù)Qrear和Qfront 之間的關(guān)系無(wú)法斷定隊(duì)列的狀態(tài)。為了區(qū)別隊(duì)空和隊(duì)滿的情況,可采用以下兩種處理方式:其一是設(shè)置一個(gè)標(biāo)志,以區(qū)別頭、尾指針的值相同時(shí)隊(duì)列是空還是滿;其二是犧牲一個(gè)存儲(chǔ)單元,約定以“隊(duì)列的尾指針?biāo)肝恢玫南乱粋€(gè)位置是隊(duì)頭指針時(shí)”表示隊(duì)列滿。字符串是一種特殊的線性表,其數(shù)據(jù)元素都為字符。

空串:長(zhǎng)度為0的字符串,沒(méi)有任何字符。空格串:由一個(gè)或多個(gè)空格組成的串,空格是空白字符,占一個(gè)字符長(zhǎng)度。子串:串中任意長(zhǎng)度的連續(xù)字符構(gòu)成的序列稱為子串。含有子串的串稱為主串,空串是任意串的子串。串的模式匹配:子串的定位操作,用于查找子串在主串中第一次出現(xiàn)的位置的算法。

【模式匹配算法】

樸素的模式匹配算法:也稱為布魯特一福斯算法,其基本思想是從主串的第1個(gè)字符起與模式串的第1個(gè)字符比較,若相等,則繼續(xù)逐個(gè)字符進(jìn)行后續(xù)的比較否則從主串中的第2個(gè)字符起與模式串的第1個(gè)字符重新比較,直至模式串中每個(gè)字符依次和主串中的一個(gè)連續(xù)的字符序列相等時(shí)為止,此時(shí)稱為匹配成功,否則稱為匹配失敗。?

3.1.2 數(shù)組

數(shù)組是定長(zhǎng)線性表在維度上的擴(kuò)展,即線性表中的元素又是一個(gè)線性表。N維數(shù)組是一種“同構(gòu)”的數(shù)據(jù)結(jié)構(gòu),其每個(gè)數(shù)據(jù)元素類型相同、結(jié)構(gòu)一致。其可以表示為行向量形式或者列向量形式線性表,單個(gè)關(guān)系最多只有一個(gè)前驅(qū)和一個(gè)后繼,本質(zhì)還是線性的。數(shù)組結(jié)構(gòu)的特點(diǎn):數(shù)據(jù)元素?cái)?shù)目固定,數(shù)據(jù)元素類型相同;數(shù)據(jù)元素的下標(biāo)關(guān)系具有上下界的約束且下標(biāo)有序數(shù)組數(shù)據(jù)元素固定,一般不做插入和刪除運(yùn)算,適合于采用順序結(jié)構(gòu)數(shù)組存儲(chǔ)地址的計(jì)算,特別是二維數(shù)組,要注意理解,假設(shè)每個(gè)數(shù)組元素占用存儲(chǔ)長(zhǎng)度為len,起始地址為a,存儲(chǔ)地址計(jì)算如下(默認(rèn)從0開(kāi)始編號(hào))

3.1.3 矩陣

特殊矩陣:矩陣中的元素(或非0元素)的分布有定的規(guī)律。常見(jiàn)的特殊矩陣有對(duì)稱矩陣、三角矩陣和對(duì)角矩陣稀疏矩陣:在一個(gè)矩陣中,若非零元素的個(gè)數(shù)遠(yuǎn)遠(yuǎn)少于零元素個(gè)數(shù),且非零元素的分布沒(méi)有規(guī)律。存儲(chǔ)方式為三元組結(jié)構(gòu),即存儲(chǔ)每個(gè)非零元素的(行列,值)。

3.1.4?樹(shù)與二叉樹(shù)

樹(shù)是n個(gè)節(jié)點(diǎn)的有限集合(n>=0)當(dāng)n=0時(shí)稱為空樹(shù),在任一顆非空樹(shù)中,有且僅有-個(gè)根節(jié)點(diǎn)。其余結(jié)點(diǎn)可分為m(m20)個(gè)互不相交的有限子集T1,T2,Tm,其中,每個(gè)Ti...又都是一棵樹(shù),并且稱為根結(jié)點(diǎn)的子樹(shù)。樹(shù)的基本概念如下: (1)雙親、孩子和兄弟。結(jié)點(diǎn)的子樹(shù)的根稱為該結(jié)點(diǎn)的孩子,相應(yīng)地,該結(jié)點(diǎn)稱為其子結(jié)點(diǎn)的雙親。。具有相同雙親的結(jié)點(diǎn)互為兄弟。 (2)結(jié)點(diǎn)的度。一個(gè)結(jié)點(diǎn)的子樹(shù)的個(gè)數(shù)記為該結(jié)點(diǎn)的度。例如A的度為3,B的度為2,C的度為0,D的度為1。 (3)葉子結(jié)點(diǎn)。葉子結(jié)點(diǎn)也稱為終端結(jié)點(diǎn),指度為0的結(jié)點(diǎn)。例如,E、F、c、G都是葉子結(jié)點(diǎn) (4)內(nèi)部結(jié)點(diǎn)。度不為0的結(jié)點(diǎn),也稱為分支結(jié)點(diǎn)或非終端結(jié)點(diǎn)。除根結(jié)點(diǎn)以外,分支結(jié)點(diǎn)也稱為內(nèi)部結(jié)點(diǎn)。例如,B、D都是內(nèi)部結(jié)點(diǎn)。 (5)結(jié)點(diǎn)的層次。根為第一層,根的孩子為第二層,依此類推,若某結(jié)點(diǎn)在第i層,則其孩子結(jié)點(diǎn)在第i+1層。例如,A在第1層,B、C、D在第2層,E、F和G在第3 層。 (6)樹(shù)的高度。一棵樹(shù)的最大層數(shù)記為樹(shù)的高度(或深度)。例如,圖中所示樹(shù)的高度為3 (7)有序(無(wú)序)樹(shù)。若將樹(shù)中結(jié)點(diǎn)的各子樹(shù)看成是從左到右具有次序的,即不能交換則稱該樹(shù)為有序樹(shù),否則稱為無(wú)序樹(shù)。

二叉樹(shù)是n個(gè)節(jié)點(diǎn)的有限集合,它或者是空樹(shù)或者是由一個(gè)根節(jié)點(diǎn)及兩顆互不相交的且分別稱為左有子村的一又村村所組成。

二叉樹(shù)有一些性質(zhì)如下,要求掌握,在實(shí)際考試中可以用特殊值法驗(yàn)證。 (1)二叉樹(shù)第i層 (i>=1) 上至多有2^(i-1)個(gè)節(jié)點(diǎn)。 (2)深度為k的二叉樹(shù)至多有2^k - 1個(gè)節(jié)點(diǎn)(k>=1) (3)對(duì)任何一棵二叉樹(shù),若其終端節(jié)點(diǎn)數(shù)為n0,度為2 的節(jié)點(diǎn)數(shù)為n2,則n0=n2 + 1。 此公式可以畫(huà)一個(gè)簡(jiǎn)單的二叉樹(shù)使用特殊值法快速驗(yàn)證,也可以證明如下設(shè)一棵二叉樹(shù)上葉結(jié)點(diǎn)數(shù)為no,單分支結(jié)點(diǎn)數(shù)為n,,雙分支結(jié)點(diǎn)數(shù)為n,則總結(jié)點(diǎn)數(shù)=n,+ni+n2。在一棵二叉樹(shù)中,所有結(jié)點(diǎn)的分支數(shù)(即度數(shù))應(yīng)等于單分支結(jié)點(diǎn)數(shù)加上雙分支結(jié)點(diǎn)數(shù)的2倍,即總的分支數(shù)=n,+2n。由于二叉樹(shù)中除根結(jié)點(diǎn)以外每個(gè)結(jié)點(diǎn)都有唯一的一個(gè)分支指向它,因此二叉樹(shù)中:總的分支數(shù)=總結(jié)點(diǎn)數(shù)-1。 (4)具有n 個(gè)節(jié)點(diǎn)的完全二叉樹(shù)的深度為|log2 nl+ 1?二叉樹(shù)的順序存儲(chǔ)結(jié)構(gòu): 順序存儲(chǔ),就是用一組連續(xù)的存儲(chǔ)單元存儲(chǔ)二叉樹(shù)中的節(jié)點(diǎn),按照從上到下從左到右的順序依次存儲(chǔ)每個(gè)節(jié)點(diǎn)。對(duì)于深度為k的完全二叉樹(shù),除第k層外,其余每層中節(jié)點(diǎn)數(shù)都是上一層的兩倍,由此,從一個(gè)節(jié)點(diǎn)的編號(hào)可推知其雙親、左孩子、右孩子結(jié)點(diǎn)的編號(hào)。假設(shè)有編號(hào)為的節(jié)點(diǎn),則有: (1)若i=1,則該節(jié)點(diǎn)為根節(jié)點(diǎn),無(wú)雙親; (2)若i>1,則該節(jié)點(diǎn)的雙親節(jié)點(diǎn)為i/2。 (3)若2i<=n,則該節(jié)點(diǎn)的左孩子編號(hào)為2i,否則無(wú)左孩子。 (4)若2i + 1<=n,則該節(jié)點(diǎn)的右孩子編號(hào)為2i+1,否則無(wú)右孩子顯然,順序存儲(chǔ)結(jié)構(gòu)對(duì)完全二叉樹(shù)而言既簡(jiǎn)單又節(jié)省空間,而對(duì)于一般二叉樹(shù)則不適用。因?yàn)樵陧樞虼鎯?chǔ)結(jié)構(gòu)中,以節(jié)點(diǎn)在存儲(chǔ)單元中的位置來(lái)表示節(jié)點(diǎn)之間的關(guān)系,那么對(duì)于一般的二叉樹(shù)來(lái)說(shuō),也必須按照完全二叉樹(shù)的形式存儲(chǔ)也就是要添上一些實(shí)際并不存在的“虛節(jié)點(diǎn)”,這將造成空間的浪費(fèi)。二叉樹(shù)的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu): 由于二叉樹(shù)中節(jié)點(diǎn)包含有數(shù)據(jù)元素、左子樹(shù)根、右子樹(shù)根及雙親等信息,因此可以用三叉鏈表或二叉鏈表(即一個(gè)節(jié)點(diǎn)含有三個(gè)指針或兩個(gè)指針)來(lái)存儲(chǔ)二叉樹(shù),鏈表的頭指針指向二叉樹(shù)的根節(jié)點(diǎn)一顆非空的二叉樹(shù)由根節(jié)點(diǎn)、左子樹(shù)、右子樹(shù)三部分組成,遍歷這三部分也就遍歷了整顆二叉樹(shù)。這三部分遍歷的基本順序是先左子樹(shù)后右子樹(shù),但根節(jié)點(diǎn)順序可變,以根節(jié)點(diǎn)訪問(wèn)的順序?yàn)闇?zhǔn)有下列三種遍歷方式: 先序 (前序) 遍歷: 根左右 中序遍歷: 左根右 后序遍歷: 左右根 示例:前序:12457836 中序: 42785136 后序:48752631

層次遍歷:按層次,從上到下,從左到右反向構(gòu)造二叉樹(shù) 僅僅有前序和后序是無(wú)法構(gòu)造二叉樹(shù)的,必須要是和中序遍歷的集合才能反向構(gòu)造出二叉樹(shù)。 構(gòu)造時(shí),前序和后序遍歷可以確定根節(jié)點(diǎn),中序遍歷用來(lái)確定根節(jié)點(diǎn)的左子樹(shù)節(jié)點(diǎn)和右子樹(shù)節(jié)點(diǎn),而后按此方法進(jìn)行遞歸,直至得出結(jié)果。引入線索二叉樹(shù)是為了保存二叉樹(shù)遍歷時(shí)某節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)的信息,二叉樹(shù)的鏈?zhǔn)酱鎯?chǔ)只能獲取到某節(jié)點(diǎn)的左孩子和右孩子結(jié)點(diǎn),無(wú)法獲取其遍歷時(shí)的前驅(qū)和后繼節(jié)點(diǎn),因此可以在鏈?zhǔn)酱鎯?chǔ)中再增加兩個(gè)指針域,使其分別指向前驅(qū)和后繼節(jié)點(diǎn),但這樣太浪費(fèi)存儲(chǔ)空間,考慮下述實(shí)現(xiàn)方法: (1)若n個(gè)節(jié)點(diǎn)的二叉樹(shù)使用二叉鏈表存儲(chǔ),則必然有n+1個(gè)空指針域,利用這些空指針域來(lái)存放節(jié)點(diǎn)的前驅(qū)和后繼節(jié)點(diǎn)信息,為此,需要增加兩個(gè)標(biāo)志,以區(qū)分指針域存放的到底是孩子結(jié)點(diǎn)還是遍歷節(jié)點(diǎn),如下: (2)若二又樹(shù)的二叉鏈表采用上述結(jié)構(gòu),則稱為線索鏈表,其中指向前驅(qū)、后繼節(jié)點(diǎn)的指針?lè)Q為線索,加上線索的二叉樹(shù)稱為線索二叉樹(shù)。最優(yōu)二叉樹(shù)又稱為哈夫曼樹(shù),是一類帶權(quán)路徑長(zhǎng)度最短的樹(shù),相關(guān)概念如下路徑:

樹(shù)中一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)點(diǎn)之間的通路結(jié)點(diǎn)的路徑長(zhǎng)度:路徑上的分支數(shù)目。樹(shù)的路徑長(zhǎng)度:根節(jié)點(diǎn)到達(dá)每一個(gè)葉子節(jié)點(diǎn)之間的路徑長(zhǎng)度之和。權(quán):節(jié)點(diǎn)代表的值結(jié)點(diǎn)的。帶權(quán)路徑長(zhǎng)度:該結(jié)點(diǎn)到根結(jié)點(diǎn)之間的路徑長(zhǎng)度乘以該節(jié)點(diǎn)的權(quán)值樹(shù)的帶權(quán)路徑長(zhǎng)度(樹(shù)的代價(jià)):樹(shù)的所有葉子節(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和哈夫曼樹(shù)的求法: 給出一組權(quán)值,將其中兩個(gè)最小的權(quán)值作為葉子節(jié)點(diǎn),其和作為父節(jié)點(diǎn),組成二叉樹(shù),而后刪除這兩個(gè)葉子節(jié)點(diǎn)權(quán)值,并將父節(jié)點(diǎn)的值添加到該組權(quán)值中。重復(fù)進(jìn)行上述步驟,直至所有權(quán)值都被使用完。若需要構(gòu)造哈夫曼編碼 (要保證左節(jié)點(diǎn)值小于右節(jié)點(diǎn)的值,才是標(biāo)準(zhǔn)的哈夫曼樹(shù)),將標(biāo)準(zhǔn)哈夫曼樹(shù)的左分支設(shè)為0,右分支設(shè)為1,寫(xiě)出每個(gè)葉節(jié)點(diǎn)的編會(huì)發(fā)現(xiàn),哈夫曼編碼前綴不同,因此不會(huì)混淆,同時(shí)也是最優(yōu)編碼。查找二叉樹(shù)上的每個(gè)節(jié)點(diǎn)都存儲(chǔ)一個(gè)值,且每個(gè)節(jié)點(diǎn)的所有左孩子結(jié)點(diǎn)值都小于交節(jié)點(diǎn)值,而所有右孩子結(jié)點(diǎn)值都大于父節(jié)點(diǎn)值,是一個(gè)有規(guī)律排列的二叉樹(shù),這種數(shù)據(jù)結(jié)構(gòu)可以方便查找、插入等數(shù)據(jù)操作。二叉排序樹(shù)的查找效率取決于二叉排序樹(shù)的深度,對(duì)于結(jié)點(diǎn)個(gè)數(shù)相同的二叉排序樹(shù),平衡二叉樹(shù)的深度最小,而單枝樹(shù)的深度是最大的,故效率最差平衡二叉樹(shù)又稱為AVL 樹(shù),它或者是一棵空樹(shù),或者是具有下列性質(zhì)的二又樹(shù)它的左子樹(shù)和右子樹(shù)都是平衡二叉樹(shù),且左子樹(shù)和右子樹(shù)的高度之差的絕對(duì)值不超過(guò)1。若將二叉樹(shù)結(jié)點(diǎn)的平衡因子 (Balance Factor,BF) 定義為該結(jié)點(diǎn)左子樹(shù)的高度減去其右子樹(shù)的高度,則平衡二叉樹(shù)上所有結(jié)點(diǎn)的平衡因子只可能是-10和1。只要樹(shù)上有一個(gè)結(jié)點(diǎn)的平衡因子的絕對(duì)值大于1,則該二叉樹(shù)就是不平衡的。

3.1.5?圖

無(wú)向圖:圖的結(jié)點(diǎn)之間連接線是沒(méi)有箭頭的,不分方向。有向圖:圖的結(jié)點(diǎn)之間連接線是箭頭,區(qū)分A到B,和B到A是兩條線。完全圖:無(wú)向完全圖中,節(jié)點(diǎn)兩兩之間都有連線,n個(gè)結(jié)點(diǎn)的連線數(shù)為(n-1)+(n-2)+...+1= n*(n-1)/2;有完全圖5b節(jié)點(diǎn)兩兩之間都有互通的兩個(gè)箭頭,個(gè)節(jié)點(diǎn)的連線數(shù)為n*(n-1)。度、出度和入度:頂點(diǎn)的度是關(guān)聯(lián)與該頂點(diǎn)的邊的數(shù)目。在有向圖中,頂點(diǎn)的度為出度和入度之和。路徑:存在一條通路,可以從一個(gè)頂點(diǎn)到達(dá)另一個(gè)頂點(diǎn)。子圖:有兩個(gè)圖G=(V, E)和G'=(V',E),如果 C VE'C E,則稱G為G的子圖。連通圖和連通分量:針對(duì)無(wú)向圖。若從頂點(diǎn)v到頂點(diǎn)u之間是有路徑的,則說(shuō)明v和u之間是連通的,若無(wú)向圖中任意兩個(gè)頂點(diǎn)之間都是連通的,則稱為連通圖。無(wú)向圖G的極大連通子圖稱為其連通分量。強(qiáng)連通圖和強(qiáng)連通分量:針對(duì)有向圖。若有向圖任意兩個(gè)頂點(diǎn)間都互相存在路徑,即存在v到u,也存在u到v的路徑,則稱為強(qiáng)連通圖。有向圖中的極大連通子圖稱為其強(qiáng)連通分量。網(wǎng):邊帶權(quán)值的圖稱為網(wǎng)圖的存儲(chǔ): 鄰接矩陣:假設(shè)一個(gè)圖中有n個(gè)節(jié)點(diǎn),!則使用n階矩陣來(lái)存儲(chǔ)這個(gè)圖中各節(jié)點(diǎn)的關(guān)系,規(guī)則是若節(jié)點(diǎn)到節(jié)點(diǎn)有連線,!則矩陣Ri,j=1,否則為0,示例如下圖所示

鄰接鏈表:用到了兩個(gè)數(shù)據(jù)結(jié)構(gòu),先用維數(shù)組將圖中所有頂點(diǎn)存儲(chǔ)起來(lái),而后,對(duì)此一維數(shù)組的每個(gè)頂點(diǎn)元素,使用鏈表掛上其出度到達(dá)的結(jié)點(diǎn)的編號(hào)和權(quán)值,示例如下圖所示:

存儲(chǔ)特點(diǎn):圖中的頂點(diǎn)數(shù)決定了鄰接矩陣的階和鄰接表中的單鏈表數(shù)目,邊數(shù)的多少?zèng)Q定了單鏈表中的結(jié)點(diǎn)數(shù),用鄰接矩陣存儲(chǔ)。而不影響鄰接矩陣的規(guī)模,因此采用何種存儲(chǔ)方式與有向圖、無(wú)向圖沒(méi)有區(qū)別,要看圖的邊數(shù)和頂點(diǎn)數(shù),完全圖適合采用鄰接矩陣存儲(chǔ)。圖的遍歷是指從圖的任意節(jié)點(diǎn)出發(fā),沿著某條搜索路徑對(duì)圖中所有節(jié)點(diǎn)進(jìn)行訪問(wèn)且只訪問(wèn)一次,分為以下兩種方式: (1)深度優(yōu)先遍歷:從任一頂點(diǎn)出發(fā),遍歷到底,直至返回,再選取任一其他節(jié)點(diǎn)出發(fā),重復(fù)這個(gè)過(guò)程直至遍歷完整個(gè)圖; (2)廣度優(yōu)先遍歷: 先訪問(wèn)完一個(gè)頂點(diǎn)的所有鄰接頂點(diǎn),而后再依次訪問(wèn)其鄰接頂點(diǎn)的所有鄰接頂點(diǎn),類似于層次遍歷。

圖的最小生成樹(shù)假設(shè)有n個(gè)節(jié)點(diǎn),那么這個(gè)圖的最小生成樹(shù)有n-1條邊 (不會(huì)形成環(huán)路,是樹(shù)非圖),這n-1條邊應(yīng)該會(huì)將所有頂點(diǎn)都連接成一個(gè)樹(shù),并且這些邊的權(quán)值之和最小,因此稱為最小生成樹(shù)。共有下列兩種算法:(1)普里姆算法:從任意頂點(diǎn)出發(fā),找出與其鄰接的邊權(quán)值最小的,此時(shí)此邊的另外一個(gè)頂點(diǎn)自動(dòng)加入樹(shù)集合中,而后再?gòu)倪@這個(gè)樹(shù)集合的所有頂點(diǎn)中找出與其鄰接的邊權(quán)值最小的,同樣此邊的另外一個(gè)頂點(diǎn)加入樹(shù)集合中,依次遞歸,直至圖中所有頂點(diǎn)都加入樹(shù)集合中,此時(shí)此樹(shù)就是該圖的最小生成樹(shù)。普里姆算法的時(shí)間復(fù)雜度為o(n^2),與圖中的邊數(shù)無(wú)關(guān),因此該算法適合于求邊稠密的網(wǎng)的最小生成樹(shù)。(2)克魯斯卡爾算法:這個(gè)算法是從邊出發(fā)的,因?yàn)楸举|(zhì)是選取權(quán)值最(推薦)小的n-1條邊,因此,就將邊按權(quán)值大小排序,依次選取權(quán)值最小的邊,直至囊括所有節(jié)點(diǎn),要注意每次選邊后要檢查不能形成環(huán)路??唆斔箍査惴ǖ臅r(shí)間復(fù)雜度為o(eloge),與圖中的頂點(diǎn)數(shù)無(wú)關(guān),因此該算法適合于求邊稀疏的網(wǎng)的最小生成樹(shù)。

拓?fù)湫蛄校喝魣D中一個(gè)節(jié)點(diǎn)入度為0,則應(yīng)該最先執(zhí)行此活動(dòng),而后刪除掉此節(jié)點(diǎn)和其關(guān)聯(lián)的有向邊,再去找圖中其他沒(méi)有入度的結(jié)點(diǎn),執(zhí)行活動(dòng),依次進(jìn)行,示例如下(有點(diǎn)類似于進(jìn)程的前趨圖原理)工具與技術(shù): 關(guān)鍵路徑法關(guān)鍵路徑:是項(xiàng)目的最短工期,但卻是從開(kāi)始到結(jié)束時(shí)間最長(zhǎng)的路徑。進(jìn)度網(wǎng)絡(luò)圖中可能有多條關(guān)鍵路徑,因?yàn)榛顒?dòng)會(huì)變化,因此關(guān)鍵路徑也在不斷變化中關(guān)鍵活動(dòng):關(guān)鍵路徑上的活動(dòng),最早開(kāi)始時(shí)間=最晚開(kāi)始時(shí)間。通常,每個(gè)節(jié)點(diǎn)的活動(dòng)會(huì)有如下幾個(gè)時(shí)間: (1)最早開(kāi)始時(shí)間 (ES)某項(xiàng)活動(dòng)能夠開(kāi)始的最早時(shí)間 (2)某項(xiàng)活動(dòng)能夠完成的最早時(shí)間。EF=ES+工期最早結(jié)束時(shí)間(EF) (3)最遲結(jié)束時(shí)間(LF)。為了使項(xiàng)目按時(shí)完成,某項(xiàng)活動(dòng)必須完成的最遲時(shí)間。 (4)最遲開(kāi)始時(shí)間(LS)。為了使項(xiàng)目按時(shí)完成,某項(xiàng)活動(dòng)必須開(kāi)始的最遲時(shí)間。LS=LF-工期總浮動(dòng)時(shí)間:在不延誤項(xiàng)目完工時(shí)間且不違反進(jìn)度制約因素的前提下,活動(dòng)可以從最早開(kāi)始時(shí)間推遲或拖延的時(shí)間量,就是該活動(dòng)的進(jìn)度靈活性。正常情況下,關(guān)鍵活動(dòng)的總浮動(dòng)時(shí)間為零??偢?dòng)時(shí)間=最遲開(kāi)始LS-最早開(kāi)始ES 或最遲完成LF-最早完成EF 或關(guān)鍵路徑非關(guān)鍵路徑時(shí)長(zhǎng)。自由浮動(dòng)時(shí)間:是指在不延誤任何緊后活動(dòng)的最早開(kāi)始時(shí)間且不違反進(jìn)度制約因素的前提下,活動(dòng)可以從最早開(kāi)始時(shí)間推遲或拖延的時(shí)間量。自由浮動(dòng)時(shí)間=緊后活動(dòng)最早開(kāi)始時(shí)間的最小值-本活動(dòng)的最早完成時(shí)間。

3.2 查找

3.2.1 順序查找

順序查找的思想:將待查找的關(guān)鍵字為key的元素從頭到尾與表中元素進(jìn)行比較,如果中間存在關(guān)鍵字為key的元素,則返回成功;否則,則查找失敗。平均查找長(zhǎng)度為時(shí)間復(fù)雜度為O(n)。

3.2.2 折半查找

折半查找只適用于待查找序列中的元素是有序排列的情況。設(shè)查找表的元素存儲(chǔ)在一維數(shù)組r[1..n]中,在表中元素已經(jīng)按照關(guān)鍵字遞增或遞減)方式排序的情況下,進(jìn)行折半查找的方法是: 1、首先將待查元素的關(guān)鍵字 (key) 值與表r中間位置上 (下標(biāo)為mid) 記錄的關(guān)鍵字進(jìn)行比較,若相等,則查找成功; 2、若key>r[mid].key,則說(shuō)明待查記錄只可能在后半個(gè)子表r[mid+1..n]中,下一步應(yīng)在后半個(gè)子表中查找; 3、若key

3.2.3 哈希表

哈希表通過(guò)一個(gè)以記錄的關(guān)鍵字為自變量的函數(shù) (稱為哈希函數(shù))得到該記錄的存儲(chǔ)地址,所以在哈希表中進(jìn)行查找操作時(shí),需要用同一哈希函數(shù)計(jì)算得到待查記錄的存儲(chǔ)地址,然后到相應(yīng)的存儲(chǔ)單元去獲得有關(guān)信息再判定查找是否成功。

哈希函數(shù)產(chǎn)生了沖突的解決方法如下 1.開(kāi)放定址法:?Hi=(H(key)+di) % m i=1,2,..., k(km - 1)其中,H(key)為哈希函數(shù);m 為哈希表表長(zhǎng);di為增量序列常見(jiàn)的增量序列有以下3 種。 (1) d =1,2,3,··,m-1,稱為線性探測(cè)再散列; (2) 二次探測(cè)再散列; (3) d=偽隨機(jī)數(shù)序列,稱為隨機(jī)探測(cè)再散列。 2.鏈地址法。它在查找表的每一個(gè)記錄中增加一個(gè)鏈域,鏈域中存放下一個(gè)具有相同哈希函數(shù)值的記錄的存儲(chǔ)地址。利用鏈域,就把若千個(gè)發(fā)生沖突的記錄鏈接在一個(gè)鏈表內(nèi)。當(dāng)鏈域的值為NULL時(shí),表示已沒(méi)有后繼記錄了。因此,對(duì)于發(fā)生沖突時(shí)的查找和插入操作就跟線性表一樣了 3.再哈希法: 在同義詞發(fā)生地址沖突時(shí)計(jì)算另一個(gè)哈希函數(shù)地址,直到?jīng)_突不再發(fā)生。這種方法不易產(chǎn)生聚集現(xiàn)象,但增加了計(jì)算時(shí)間。 4.建立一個(gè)公共溢出區(qū)。無(wú)論由哈希函數(shù)得到的哈希地址是什么,一旦發(fā)生沖突都填入到公共溢出區(qū)中

3.3 排序

3.3.1 直接插入排序

要注意的是,前提條件是前i-1個(gè)元素是有序的第i個(gè)元素依次從第i-1個(gè)元素而后插入,插入位置及其后往前比較,直到找到一個(gè)比第i個(gè)元素值小的元素的元素依次向后移動(dòng)。當(dāng)給出一隊(duì)無(wú)序的元素時(shí),首先,應(yīng)該將第1個(gè)元素看做是一個(gè)有序的隊(duì)列,而后從第2個(gè)元素起,按插入排序規(guī)則,依次與前面的元素進(jìn)行比較,直到找到一個(gè)小于他的值,才插入。示例如下圖所示:下圖中,59依次向前比較,先和68比較,再和57比較,發(fā)現(xiàn)57比他小,才插入:

3.3.2 希爾排序

希爾排序又稱“縮小增量排序“是對(duì)直接插入排序方法的改進(jìn)。希爾排序的基本思想是:先將整個(gè)待排記錄序列分割成若千子序列,然后分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄基本有序時(shí),再對(duì)全體記錄進(jìn)行一次直接插入。排序具體做法是:先取一個(gè)小于n 的整數(shù)d1作為第一個(gè)增量把文件的全部記錄分成d1個(gè)組,將所有距離為d1 倍數(shù)的記錄放在同一個(gè)組中,在各組內(nèi)進(jìn)行直接插入排序;然后取第二個(gè)增量d2(d2

3.3.3 簡(jiǎn)單選擇排序

n個(gè)記錄進(jìn)行簡(jiǎn)單選擇排序的基本方法是: 通過(guò)n - i(1<=i<=n)次關(guān)鍵字之間的比較,從n - i +1個(gè)記錄中選出關(guān)鍵字最小的記錄,并和第i 個(gè)記錄進(jìn)行交換,當(dāng)i等于n時(shí)所有記錄有序排列。按上述,本質(zhì)就是每次選擇出最小的元素進(jìn)行交換主要是選擇比較過(guò)程交換過(guò)程只有一次。示例如下:

3.3.4 堆排序

堆排序的基本思想是:對(duì)一組待排序記錄的關(guān)鍵字,首先按堆的定義排成一個(gè)序列(即建立初始堆),從而可以輸出堆頂?shù)淖畲箨P(guān)鍵字(對(duì)于大根堆而言),然后將剩余的關(guān)鍵字再調(diào)整成新堆,便得到次大的關(guān)鍵字,如此反復(fù),直到全部關(guān)鍵字排成有序序列為止。為序列(55,60,40,10,80,65,15,5,75) 建立初始大根堆的過(guò)程如圖所示

由上圖可知,首先將給出的數(shù)組按完全二叉樹(shù)規(guī)則建立,而后,找到此完全又樹(shù)的最后一個(gè)非葉子節(jié)點(diǎn) (也即最后一顆子樹(shù)),比較此非葉子節(jié)點(diǎn)和其兩個(gè)孩子結(jié)點(diǎn)的大小,若小,則與其孩子結(jié)點(diǎn)中最大的結(jié)點(diǎn)進(jìn)行交換;依據(jù)此規(guī)則再去找倒數(shù)第二個(gè)非葉子節(jié)點(diǎn);這是只有一層的情況,當(dāng)涉及到多層次時(shí)又打破了之前的堆,因此,又要進(jìn)行變換。建立初始堆后,開(kāi)始排序,每次取走堆頂元素 (必然是最大的)而后將堆中最后一個(gè)元素移入堆頂,而后按照初始建堆中的方法與其孩子結(jié)點(diǎn)比較大小依次向下判斷交換成為一個(gè)新的堆,再取走堆頂元素,重復(fù)此過(guò)程。堆排序適用于在多個(gè)元素中找出前幾名的方案設(shè)計(jì),因?yàn)槎雅判蚴沁x擇排序而且選擇出前幾名的效率很高。

3.3.5 冒泡排序

n個(gè)記錄進(jìn)行冒泡排序的方法是:首先將第一個(gè)記錄的關(guān)鍵字和第二個(gè)記錄的關(guān)鍵字進(jìn)行比較,若為逆序,則交換這兩個(gè)記錄的值,然后比較第二個(gè)記錄和第三個(gè)記錄的關(guān)鍵字依此類推,直至第n- 1個(gè)記錄和第n 個(gè)記錄的關(guān)鍵字比較過(guò)為止。上述過(guò)程稱為一趟冒泡排序,其結(jié)果是關(guān)鍵字最大的記錄被交換到第n 個(gè)記錄的位置上。然后進(jìn)行第二趟冒泡排序,對(duì)前n - 1個(gè)記錄進(jìn)行同樣的操作,其結(jié)果是關(guān)鍵字次大的記錄被交換到第n - 1個(gè)記錄的位置上。最多進(jìn)行n - 1 趟所有記錄有序排列。若在某趟冒泡排序過(guò)程沒(méi)有進(jìn)行相鄰位置的元素交換處理,則可結(jié)束排序過(guò)程。示例給的是從后往前排序,也是可以的,需要從最后兩個(gè)元素開(kāi)始進(jìn)行比較,將較小的元素交換到前面去,依次進(jìn)行比較交換。比較是為了交換,交換次數(shù)很多。區(qū)分冒泡排序和簡(jiǎn)單選擇排序。

3.3.6 快速排序

快速排序是將n個(gè)記錄分成兩塊,再遞歸,實(shí)際分成兩塊的方法如圖所示:設(shè)定一個(gè)基準(zhǔn)為57,設(shè)定兩個(gè)指針high=1,low=n,從low指向的第n個(gè)元素開(kāi)始,與基準(zhǔn)值進(jìn)行比較,若小于基準(zhǔn)值,則與基準(zhǔn)進(jìn)行交換low--,此時(shí),轉(zhuǎn)而從high指向的第1個(gè)元素開(kāi)始和基準(zhǔn)值進(jìn)行比較,若大于基準(zhǔn)值,則和基準(zhǔn)值進(jìn)行交換此時(shí),又轉(zhuǎn)而從low一指向的值和基準(zhǔn)進(jìn)行比較,重復(fù)上述過(guò)程。要注意的是:每次都是和基準(zhǔn)值進(jìn)行比較,因此最終是以基準(zhǔn)值為中間,將隊(duì)列分成兩塊。只有當(dāng)和基準(zhǔn)值發(fā)生了交換,才變換high和low指針的計(jì)數(shù),否則會(huì)一直low-下去上圖中,最終以57為界,左邊都是小于57的元素右邊都是大于57的元素,完成一次快速排序,接著對(duì)兩塊再分別進(jìn)行遞歸即可

3.3.7 歸并排序

所謂“歸并”是將兩個(gè)或兩個(gè)以上的有序文件合并成為一個(gè)新的有序文件歸并排序的一種實(shí)現(xiàn)方法是把一個(gè)有n 個(gè)記錄的無(wú)序文件看成是由n 個(gè)長(zhǎng)度為1的有序子文件組成的文件,然后進(jìn)行兩兩歸并,得到[n/21個(gè)長(zhǎng)度為2或1的有序文件,再兩兩歸并,如此重復(fù),直至最后形成包含n個(gè)記錄的有序文件為止。這種反復(fù)將兩個(gè)有序文件歸并成一個(gè)有序文件的排序方法稱為兩路歸并排序。要仔細(xì)理解上述過(guò)程,一般歸并排序都是用來(lái)合并多個(gè)線性表的,對(duì)單列數(shù)據(jù),二路歸并排序可以對(duì)元素進(jìn)行兩兩合并,示例如下!對(duì)第三次歸并,將52與28比較,28小,放入新表頭,52再與33比較,33放入新表,52再與72比較,52放入新表,57再與72比較,57放入新表.....

3.3.8 基數(shù)排序

基數(shù)排序是基于多個(gè)關(guān)鍵字來(lái)進(jìn)行多輪排序的,本質(zhì)也是將問(wèn)題細(xì)分,如圖例子,分別按個(gè)位、十位、百位的大小作為關(guān)鍵字進(jìn)行了三輪排序,最終得出結(jié)果?;鶖?shù)排序是一種借助多關(guān)鍵字排序思想對(duì)單邏輯關(guān)鍵字進(jìn)行排序的方法?;鶖?shù)排序不是基于關(guān)鍵字比較的排序方法,它適合于元素很多而關(guān)鍵字較少的序列?;鶖?shù)的選擇和關(guān)鍵字的分解是根據(jù)關(guān)鍵字的類型來(lái)決定的,例如關(guān)鍵字是十進(jìn)制數(shù),則按個(gè)位、十位來(lái)分解。

3.3.9 內(nèi)部排序算法總結(jié)

若待排序的記錄數(shù)目n 較小,可采用直接插入排序和簡(jiǎn)單選擇排序。由于直接插入排序所需的記錄移動(dòng)操作較簡(jiǎn)單選擇排序多,因此當(dāng)記錄本身信息量較大時(shí),用簡(jiǎn)單選擇排序方法較好。若待排序記錄按關(guān)鍵字基本有序,則宜采用直接插入排序或冒泡排序當(dāng)n 很大且關(guān)鍵字的位數(shù)較少時(shí),采用鏈?zhǔn)交鶖?shù)排序較好。若n 較大,則應(yīng)采用時(shí)間復(fù)雜度為o(nlogn)的排序方法,例如快速排序、堆排序或歸并排序。

3.3.10 算法特性

算法 (Algorithm)是對(duì)特定問(wèn)題求解步驟的一種描述,它是指令的有限序列其中每一條指令表示一個(gè)或多個(gè)操作。此外,一個(gè)算法還具有下列5個(gè)重要特性: (1)有窮性一個(gè)算法必須總是(對(duì)任何合法的輸入值)在執(zhí)行有窮步之后結(jié)束且每一步都可在有窮時(shí)間內(nèi)完成確定性。算法中的每一條指令必須有確切的含義,理解時(shí)不會(huì)產(chǎn)生二義性. (2)并且在任何條件下,算法只有唯一的一條執(zhí)行路徑,即對(duì)于相同的輸入只能得出相同的輸出。 (3)可行性。一個(gè)算法是可行的,即算法中描述的操作都可以通過(guò)已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次來(lái)實(shí)現(xiàn)。 (4)輸入。一個(gè)算法有零個(gè)或多個(gè)輸入,這些輸入取自于某個(gè)特定的對(duì)象的集合. (5)輸出。一個(gè)算法有一個(gè)或多個(gè)輸出,這些輸出是同輸入有著某些特定關(guān)系的量。

第四章 操作系統(tǒng)知識(shí)

4.1 進(jìn)程管理

4.1.1 操作系統(tǒng)概述

操作系統(tǒng)定義:能有效地組織和管理系統(tǒng)中的各種軟/硬件資源,合理地組織計(jì)算機(jī)系統(tǒng)工作流程,控制程序的執(zhí)行,并且向用戶提供一個(gè)良好的工作環(huán)境和友好的接口。操作系統(tǒng)有兩個(gè)重要的作用: 第一,通過(guò)資源管理提高計(jì)算機(jī)系統(tǒng)的效率; 第二,改善人機(jī)界面向用戶提供友好的工作環(huán)境。操作系統(tǒng)的4個(gè)特征是并發(fā)性、共享性、虛擬性和不確定性。操作系統(tǒng)的功能 (1)進(jìn)程管理。實(shí)質(zhì)上是對(duì)處理機(jī)的執(zhí)行“時(shí)間”進(jìn)行管理采用多道程序等技術(shù)將CPU的時(shí)間合理地分配給每個(gè)任務(wù),主要包括進(jìn)程控制.進(jìn)程同步、進(jìn)程通信和進(jìn)程調(diào)度。 (2)文件管理。主要包括文件存儲(chǔ)空間管理、目錄管理、文件的讀/寫(xiě)管理和存取控制。 (3)存儲(chǔ)管理。存儲(chǔ)管理是對(duì)主存器“空間”進(jìn)行管理,主要包括存儲(chǔ)分配與回收、存儲(chǔ)保護(hù)、地址映射 (變換)和主存擴(kuò)充。 (4)設(shè)備管理。實(shí)質(zhì)是對(duì)硬件設(shè)備的管理,包括對(duì)輸入/輸出設(shè)備的分配、啟動(dòng)、完成和回收。 (5)作業(yè)管理。包括任務(wù)、界面管理、人機(jī)交互、圖形界面、語(yǔ)音控制和虛擬現(xiàn)實(shí)等。操作系統(tǒng)的分類: (1)批處理操作系統(tǒng):?jiǎn)蔚琅幚砗投嗟琅幚?主機(jī)與外設(shè)可并行)。 (2)分時(shí)操作系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)與多個(gè)終端設(shè)備連接。將CPU的工作時(shí)間劃分為許多很短的時(shí)間片,輪流為各個(gè)終端的用戶服務(wù)。 (3)實(shí)時(shí)操作系統(tǒng):實(shí)時(shí)是指計(jì)算機(jī)對(duì)于外來(lái)信息能夠以足夠快的速度進(jìn)行處理并在被控對(duì)象允許的時(shí)間范圍內(nèi)做出快速反應(yīng)。實(shí)時(shí)系統(tǒng)對(duì)交互能力要求不高但要求可靠性有保障。 (4)網(wǎng)絡(luò)操作系統(tǒng):是使聯(lián)網(wǎng)計(jì)算機(jī)能方便而有效地共享網(wǎng)絡(luò)資源,為網(wǎng)絡(luò)用戶提供各種服務(wù)的軟件和有關(guān)協(xié)議的集合。三種模式:集中模式、客戶端/服務(wù)器模式、對(duì)等模式。 (5)分布式操作系統(tǒng):分布式計(jì)算機(jī)系統(tǒng)是由多個(gè)分散的計(jì)算機(jī)經(jīng)連接而成的計(jì)算機(jī)系統(tǒng),系統(tǒng)中的計(jì)算機(jī)無(wú)主、次之分,任意兩臺(tái)計(jì)算機(jī)可以通過(guò)通信交換信息。 (6)微型計(jì)算機(jī)操作系統(tǒng):簡(jiǎn)稱微機(jī)操作系統(tǒng),常用的有Windows、Mac os、LinuX。?嵌入式操作系統(tǒng)主要特點(diǎn): (1)微型化。從性能和成本角度考慮,希望占用的資源和系統(tǒng)代碼量少,如內(nèi)存少、字長(zhǎng)短、運(yùn)行速度有限、能源少(用微小型電池) (2)可定制。從減少成本和縮短研發(fā)周期考慮,要求嵌入式操作系統(tǒng)能運(yùn)行在不同的微處理器平臺(tái)上,能針對(duì)硬件變化進(jìn)行結(jié)構(gòu)與功能上的配置,以滿足不同應(yīng)用需要。 (3)實(shí)時(shí)性。嵌入式操作系統(tǒng)主要應(yīng)用于過(guò)程控制、數(shù)據(jù)采集、傳輸通信、多媒體信息及關(guān)鍵要害領(lǐng)域需要迅速響應(yīng)的場(chǎng)合,所以對(duì)實(shí)時(shí)性要求較高。 (4)可靠性。系統(tǒng)構(gòu)件、模塊和體系結(jié)構(gòu)必須達(dá)到應(yīng)有的可靠性,對(duì)關(guān)鍵要害應(yīng)用還要提供容錯(cuò)和防故障措施。 (5)易移植性。為了提高系統(tǒng)的易移植性,通常采用硬件抽象層和板級(jí)支撐包的底層設(shè)計(jì)技術(shù)。嵌入式系統(tǒng)初始化過(guò)程按照自底向上、從硬件到軟件的次序依次為:片級(jí)初始化>板級(jí)初始化>系統(tǒng)初始化。?

4.1.2 進(jìn)程組成和狀態(tài)

進(jìn)程的組成:進(jìn)程控制塊PCB(唯一標(biāo)志)、程序(描述進(jìn)程要做什么)、數(shù)據(jù)(存放進(jìn)程執(zhí)行時(shí)所需數(shù)據(jù))。進(jìn)程基礎(chǔ)的狀態(tài)是下左圖中的三態(tài)圖。需要熟練掌握左下圖中的進(jìn)程三態(tài)之間的轉(zhuǎn)換。

?4.1.3 前趨圖

用來(lái)表示哪些任務(wù)可以并行執(zhí)行,哪些任務(wù)之間有順序關(guān)系,具體如下圖可知,ABC可以并行執(zhí)行,但是必須AB C都執(zhí)行完后,才能執(zhí)行D,這就確定了兩點(diǎn):任務(wù)間的并行、任務(wù)間的先后順序。

4.1.4?進(jìn)程同步與互斥

臨界資源:各進(jìn)程間需要以互斥方式對(duì)其進(jìn)行訪問(wèn)的資源。臨界區(qū):指進(jìn)程中對(duì)臨界資源實(shí)施操作的那段程序。本質(zhì)是一段程序代碼。互斥:某資源(即臨界資源)在同一時(shí)間內(nèi)只能由一個(gè)任務(wù)單獨(dú)使用,使用時(shí)需要加鎖,使用完后解鎖才能被其他任務(wù)使用;如打印機(jī)。同步:多個(gè)任務(wù)可以并發(fā)執(zhí)行,只不過(guò)有速度上的差異,在一定情況下停下等待,不存在資源是否單獨(dú)或共享的問(wèn)題;如自行車(chē)和汽車(chē)互斥信號(hào)量:對(duì)臨界資源采用互斥訪問(wèn),使用互斥信號(hào)量后其他進(jìn)程無(wú)法訪問(wèn),初值為1。同步信號(hào)量:對(duì)共享資源的訪問(wèn)控制,初值一般是共享資源的數(shù)量

【PV操作】

P操作:申請(qǐng)資源,S=S-1,若S>=0,則執(zhí)行P操作的進(jìn)程繼續(xù)執(zhí)行;若S<0,則置該進(jìn)程為阻塞狀態(tài)(因?yàn)闊o(wú)可用資源)并將其插入阻塞隊(duì)列。V操作:釋放資源,S=S+1,若S>0,則執(zhí)行V操作的進(jìn)程繼續(xù)執(zhí)行;若S<=0并將其插入就緒隊(duì)列(此時(shí)因?yàn)槿鄙儋Y源被P操作則從阻塞狀態(tài)喚醒一個(gè)進(jìn)程,阻塞的進(jìn)程可以繼續(xù)執(zhí)行),然后執(zhí)行V操作的進(jìn)程繼續(xù)。

經(jīng)典問(wèn)題:生產(chǎn)者和消費(fèi)者的問(wèn)題三個(gè)信號(hào)量:互斥信號(hào)量S0(倉(cāng)庫(kù)獨(dú)立使用權(quán)),同步信號(hào)量S1(倉(cāng)庫(kù)空閑個(gè)數(shù)),同步信號(hào)量S2(倉(cāng)庫(kù)商品個(gè)數(shù))

4.1.5?進(jìn)程調(diào)度

進(jìn)程調(diào)度方式是指當(dāng)有更高優(yōu)先級(jí)的進(jìn)程到來(lái)時(shí)如何分配CPU。分為可剝奪和不可剝奪兩種,可剝奪指當(dāng)有更高優(yōu)先級(jí)進(jìn)程到來(lái)時(shí),強(qiáng)行將正在運(yùn)行進(jìn)程的CPU分配給高優(yōu)先級(jí)進(jìn)程;不可剝奪是指高優(yōu)先級(jí)進(jìn)程必須等待當(dāng)前進(jìn)程自動(dòng)釋放CPU。在某些操作系統(tǒng)中,一個(gè)作業(yè)從提交到完成需要經(jīng)歷高、中、低三級(jí)調(diào)度 (1)高級(jí)調(diào)度。高級(jí)調(diào)度又稱“長(zhǎng)調(diào)度”“作業(yè)調(diào)度”或“接納調(diào)度”,它決定處于輸入池中的哪個(gè)后備作業(yè)可以調(diào)入主系統(tǒng)做好運(yùn)行的準(zhǔn)備,成為一個(gè)或一組就緒進(jìn)程。在系統(tǒng)中一個(gè)作業(yè)只需經(jīng)過(guò)一次高級(jí)調(diào)度。 (2)中級(jí)調(diào)度。中級(jí)調(diào)度又稱“中程調(diào)度”或“對(duì)換調(diào)度”,它決定處于交換區(qū)中的哪個(gè)就緒進(jìn)程可以調(diào)入內(nèi)存,以便直接參與對(duì)CPU的競(jìng)爭(zhēng)。 (3)低級(jí)調(diào)度。低級(jí)調(diào)度又稱“短程調(diào)度”或“進(jìn)程調(diào)度”它決定處于內(nèi)存中的哪個(gè)就緒進(jìn)程可以占用CPU。低級(jí)調(diào)度是操作系統(tǒng)中最活躍、最重要的調(diào)度程序,對(duì)系統(tǒng)的影響很大。調(diào)度算法: (1)先來(lái)先服務(wù)FCFS:先到達(dá)的進(jìn)程優(yōu)先分配CPU。用于宏觀調(diào)度。 (2)時(shí)間片輪轉(zhuǎn):分配給每個(gè)進(jìn)程CPU時(shí)間片,輪流使用CPU,每個(gè)進(jìn)程時(shí)間片大小相同,很公平,用于微觀調(diào)度優(yōu)先級(jí)調(diào)度:每個(gè)進(jìn)程都擁有一個(gè)優(yōu)先級(jí),優(yōu)先級(jí)大的先分配CPU。 (3)多級(jí)反饋調(diào)度:時(shí)間片輪轉(zhuǎn)和優(yōu)先級(jí)調(diào)度結(jié)合而成,設(shè)置多個(gè)就緒隊(duì)列1,2,3...n,每個(gè)隊(duì)列分別賦予不同的優(yōu)先級(jí),分配不同的時(shí)間片長(zhǎng)度;新進(jìn)程先進(jìn)入隊(duì)列1的末屬,按FCFS原則,執(zhí)行隊(duì)列1的時(shí)間片:若未能執(zhí)行完進(jìn)程,則轉(zhuǎn)入隊(duì)列2的末尾,如此重復(fù)。

4.1.6?死鎖

當(dāng)一個(gè)進(jìn)程在等待永遠(yuǎn)不可能發(fā)生的事件時(shí),就會(huì)產(chǎn)生死鎖,若系統(tǒng)中有多個(gè)進(jìn)程處于死鎖狀態(tài),就會(huì)造成系統(tǒng)死鎖。死鎖產(chǎn)生的四個(gè)必要條件: 資源互斥、每個(gè)進(jìn)程占有資源并等待其他資源系統(tǒng)不能剝奪進(jìn)程資源、進(jìn)程資源圖是一個(gè)環(huán)路。死鎖產(chǎn)生后解決措施是打破四大條件,有下列方法: (1)死鎖預(yù)防采用某種策略限制并發(fā)進(jìn)程對(duì)于資源的請(qǐng)求,破壞死鎖產(chǎn)生的四個(gè)條件之一使系統(tǒng)任何時(shí)刻都不滿足死鎖的條件。 (2)死鎖避免一般采用銀行家算法來(lái)避免,銀行家算法,就是提前計(jì)算出一條不會(huì)死鎖的資源分配方法,才分配資源,否則不分配資源,相當(dāng)于借貸,考慮對(duì)方還得起才借錢(qián),提前考慮好以后,就可以避免死鎖。 (3)死鎖檢測(cè):允許死鎖產(chǎn)生,但系統(tǒng)定時(shí)運(yùn)行一個(gè)檢測(cè)死鎖的程序,若檢測(cè)到系統(tǒng)中發(fā)生死鎖,則設(shè)法加以解除。 (4)死鎖解除:即死鎖發(fā)生后的解除方法,如強(qiáng)制剝奪資源,撤銷進(jìn)程等。死鎖資源計(jì)算:系統(tǒng)內(nèi)有n個(gè)進(jìn)程,每個(gè)進(jìn)程都需要R個(gè)資源,那么其發(fā)生死鎖的最大資源數(shù)為n*(R-1)。其不發(fā)生死鎖的最小資源數(shù)為n*(R-1)+1。

4.1.7?線程

傳統(tǒng)的進(jìn)程有兩個(gè)屬性:可擁有資源的獨(dú)立單位;可獨(dú)立調(diào)度和分配的基本單位。引入線程的原因是進(jìn)程在創(chuàng)建、撤銷和切換中,系統(tǒng)必須為之付出較大的時(shí)空開(kāi)銷,故在系統(tǒng)中設(shè)置的進(jìn)程數(shù)目不宜過(guò)多,進(jìn)程切換的頻率不宜太高,這就限制了并發(fā)程度的提高。引入線程后,將傳統(tǒng)進(jìn)程的兩個(gè)基本屬性分開(kāi),線程作為調(diào)度和分配的基本單位,進(jìn)程作為獨(dú)立分配資源的單位。。用戶可以通過(guò)創(chuàng)建線程來(lái)完成任務(wù),以減少程序并發(fā)執(zhí)行時(shí)付出的時(shí)空開(kāi)銷。線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立分配和調(diào)度的基本單位。線程基本上不擁有資源,只擁有一點(diǎn)運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器、一組寄存器和棧),它可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源,例如進(jìn)程的公共數(shù)據(jù)、全局變量、代碼、文件等資源,但不能共享線程獨(dú)有的資源如線程的棧指針等標(biāo)識(shí)數(shù)據(jù)。

4.2 存儲(chǔ)管理

4.2.1 分區(qū)存儲(chǔ)管理

所謂分區(qū)存儲(chǔ)組織,就是整存,將某進(jìn)程運(yùn)行所需的內(nèi)存整體一起分配給它然后再執(zhí)行。有三種分區(qū)方式:固定分區(qū):靜態(tài)分區(qū)方法,將主存分為若千個(gè)固定的分區(qū),將要運(yùn)行的作業(yè)裝配進(jìn)去,由于分區(qū)固定,大小和作業(yè)需要的大小不同,會(huì)產(chǎn)生內(nèi)部碎片可變分區(qū):動(dòng)態(tài)分方法,主存空間的分區(qū)是在作業(yè)轉(zhuǎn)入時(shí)劃分,正好劃分為作業(yè)需要的大小,這樣就不存在內(nèi)部碎片,但容易將整片主存空間切割成許多塊,會(huì)產(chǎn)生外部碎片??勺兎謪^(qū)的算法如下系統(tǒng)分配內(nèi)存的算法有很多,如下圖所示,根據(jù)分配前的內(nèi)存情況,還需要分配9K空間,對(duì)不同算法的結(jié)果介紹如下:可重定位分區(qū)可以解決碎片問(wèn)題,移動(dòng)所有已經(jīng)分配好的區(qū)域,使其成為個(gè)連續(xù)的區(qū)域,這樣其他外部細(xì)小的分區(qū)碎片可以合并為大的分區(qū),滿足作業(yè)要求。只在外部作業(yè)請(qǐng)求空間得不到滿足時(shí)進(jìn)行。

4.2.3?分頁(yè)存儲(chǔ)管理

邏輯頁(yè)分為頁(yè)號(hào)和頁(yè)內(nèi)地址,頁(yè)內(nèi)地址就是物理偏移地址,而頁(yè)號(hào)與物理塊號(hào)并非按序?qū)?yīng)的,需要查詢頁(yè)表,才能得知頁(yè)號(hào)對(duì)應(yīng)的物理塊號(hào),再用物理塊號(hào)加上偏移地址才得出了真正運(yùn)行時(shí)的物理地址。 優(yōu)點(diǎn):利用率高,碎片小,分配及管理簡(jiǎn)單 缺點(diǎn):增加了系統(tǒng)開(kāi)銷,可能產(chǎn)生抖動(dòng)現(xiàn)象。

頁(yè)面置換算法: (1)最優(yōu)算法:OPT,理論上的算法無(wú)法實(shí)現(xiàn),是在進(jìn)程執(zhí)行完后進(jìn)行的最佳效率計(jì)算,用來(lái)讓其他算法比較差距。原理是選擇未來(lái)最長(zhǎng)時(shí)間內(nèi)不被訪問(wèn)的頁(yè)面置換,這樣可以保證未來(lái)執(zhí)行的都是馬上要訪問(wèn)的。 (2)先進(jìn)先出算法:FIFO,先調(diào)入內(nèi)存的頁(yè)先被置換淘汰,會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,即分配的頁(yè)數(shù)越多,缺頁(yè)率可能越多(即效率越低) (3)最近最少使用:LRU,在最近的過(guò)去,進(jìn)程執(zhí)行過(guò)程中,過(guò)去最少使用的頁(yè)面被置換淘汰,,根據(jù)局部性原理,這種方式效率高,且不會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,使用大量計(jì)數(shù)器但是沒(méi)有LFU多 (4)淘汰原則:優(yōu)先淘汰最近未訪問(wèn)的,而后淘汰最近未被修改的頁(yè)面

【快表】

是一塊小容量的相聯(lián)存儲(chǔ)器,由快速存儲(chǔ)器組成,按內(nèi)容訪問(wèn),速度快,并且可以從硬件上保證按內(nèi)容并行查找,一般用來(lái)存放當(dāng)前訪問(wèn)最頻繁的少數(shù)活動(dòng)頁(yè)面的頁(yè)號(hào)。快表是將頁(yè)表存于cache中;慢表是將頁(yè)表存于內(nèi)存上。慢表需要訪問(wèn)兩次內(nèi)存才能取出頁(yè),而快表是訪問(wèn)一次cache和一次內(nèi)存,因此更快。

4.2.4?分段存儲(chǔ)管理

將進(jìn)程空間分為一個(gè)個(gè)段,每段也有段號(hào)和段內(nèi)地址,與頁(yè)式存儲(chǔ)不同的是每段物理大小不同,分段是根據(jù)邏輯整體分段的,因此,段表也與頁(yè)表的內(nèi)容不同,頁(yè)表中直接是邏輯頁(yè)號(hào)對(duì)應(yīng)物理塊號(hào),而下圖所示,段表有段長(zhǎng)和基址兩個(gè)屬性,才能確定一個(gè)邏輯段在物理段中的位置。?

4.2.5?段頁(yè)式存儲(chǔ)管理

對(duì)進(jìn)程空間先分段,后分頁(yè),具體原理圖和優(yōu)缺點(diǎn)如下!優(yōu)點(diǎn):空間浪費(fèi)小、存儲(chǔ)共享容易、存儲(chǔ)保護(hù)容易、能動(dòng)態(tài)鏈接缺點(diǎn):由于管理軟件的增加,復(fù)雜性和開(kāi)銷也隨之增加,需要的硬件以及占用的內(nèi)容也有所增加,使得執(zhí)行速度大大下降

4.3 設(shè)備管理

4.3.1 設(shè)備管理概述

設(shè)備是計(jì)算機(jī)系統(tǒng)與外界交互的工具,具體負(fù)責(zé)計(jì)算機(jī)與外部的輸入/輸出工作所以常稱為外部設(shè)備(簡(jiǎn)稱外設(shè))。在計(jì)算機(jī)系統(tǒng)中,將負(fù)責(zé)管理設(shè)備和輸入/輸出的機(jī)構(gòu)稱為I/0系統(tǒng)。因此,i/0 系統(tǒng)由設(shè)備、控制器、通道(具有通道的計(jì)算I0 設(shè)香機(jī)系統(tǒng))、總線和I/0 軟件組成。 設(shè)備的分類: (1)按數(shù)據(jù)組織分類:塊設(shè)備、字符設(shè)備; (2)按照設(shè)備功能分類:輸入設(shè)備、輸出設(shè)備、存儲(chǔ)設(shè)備、網(wǎng)絡(luò)聯(lián)網(wǎng)設(shè)備、供電設(shè)備; (3)源分配角度分類:獨(dú)占設(shè)備資共享設(shè)備和虛擬設(shè)備; (4)數(shù)據(jù)傳輸速率分類:低速設(shè)備、中速設(shè)備、高速設(shè)備。 設(shè)備管理的任務(wù)是保證在多道程序環(huán)境下,當(dāng)多個(gè)進(jìn)程競(jìng)爭(zhēng)使用設(shè)備時(shí),按定的策略分配和管理各種設(shè)備,控制設(shè)備的各種操作,完成//0 設(shè)備與主存之間的數(shù)據(jù)交換。 設(shè)備管理的主要功能是動(dòng)態(tài)地掌握并記錄設(shè)備的狀態(tài)、設(shè)備分配和釋放、緩沖區(qū)管理、實(shí)現(xiàn)物理1/0 設(shè)備的操作、提供設(shè)備使用的用戶接口及設(shè)備的訪問(wèn)和控制

4.3.2?I/0軟件

I/O設(shè)備管理軟件的所有層次及每一層功能如下圖: 實(shí)例:當(dāng)用戶程序試圖讀一個(gè)硬盤(pán)文件時(shí),需要通過(guò)操作系統(tǒng)實(shí)現(xiàn)這一操作與設(shè)備無(wú)關(guān)軟件檢查高速緩存中有無(wú)要讀的數(shù)據(jù)塊,若沒(méi)有,則調(diào)用設(shè)備驅(qū)動(dòng)程序,向i/0 硬件發(fā)出一個(gè)請(qǐng)求。然后,用戶進(jìn)程阻塞并等待磁盤(pán)操作的完成當(dāng)磁盤(pán)操作完成時(shí),硬件產(chǎn)生一個(gè)中斷,轉(zhuǎn)入中斷處理程序。中斷處理程序檢查中斷的原因,認(rèn)識(shí)到這時(shí)磁盤(pán)讀取操作已經(jīng)完成,于是喚醒用戶進(jìn)程取回從磁盤(pán)讀取的信息,從而結(jié)束此次I/0 請(qǐng)求。用戶進(jìn)程在得到了所需的硬盤(pán)文件內(nèi)容之,后繼續(xù)運(yùn)行。

4.3.3?設(shè)備管理技術(shù)

一臺(tái)獨(dú)占設(shè)備,在同一時(shí)間只能由一個(gè)進(jìn)程使用,其他進(jìn)程只能等待,且不知道什么時(shí)候打印機(jī)空閑,此時(shí),極大的浪費(fèi)了外設(shè)的工作效率。引入SPOOLING (外圍設(shè)備聯(lián)機(jī)操作)技術(shù),就是在外設(shè)上建立兩個(gè)數(shù)據(jù)緩沖區(qū),分別稱為輸入井和輸出井,這樣,無(wú)論多少進(jìn)程,都可以共用這一臺(tái)打印機(jī),只需要將打印命令發(fā)出,數(shù)據(jù)就會(huì)排隊(duì)存儲(chǔ)在緩沖區(qū)中,打印機(jī)會(huì)自動(dòng)按順序打印,實(shí)現(xiàn)了物理外設(shè)的共享,使得每個(gè)進(jìn)程都感覺(jué)在使用一個(gè)打印機(jī),這就是物理設(shè)備的虛擬化。如下圖所示

4.4 文件管理

4.4.1 文件管理概述

文件是具有符號(hào)名的、在邏輯上具有完整意義的一組相關(guān)信息項(xiàng)的集合。信息項(xiàng)是構(gòu)成文件內(nèi)容的基本單位,可以是一個(gè)字符,也可以是一個(gè)記錄記錄可以等長(zhǎng),也可以不等長(zhǎng)。一個(gè)文件包括文件體和文件說(shuō)明。文件體是文件真實(shí)的內(nèi)容。文件說(shuō)明是操作系統(tǒng)為了管理文件所用到的信息,包括文件名文件內(nèi)部標(biāo)識(shí)文件的類型、文件存儲(chǔ)地址、文件的長(zhǎng)度、訪問(wèn)權(quán)限、建立時(shí)間和訪問(wèn)時(shí)間等。文件管理系統(tǒng),就是操作系統(tǒng)中實(shí)現(xiàn)文件統(tǒng)一管理的一組軟件和相關(guān)數(shù)據(jù)的集合,專門(mén)負(fù)責(zé)管理和存取文件信息的軟件機(jī)構(gòu),簡(jiǎn)稱文件系統(tǒng)。文件系統(tǒng)的功能包括按名存取;統(tǒng)一的用戶接口;并發(fā)訪問(wèn)和控制;安全性控制;優(yōu)化性能;差錯(cuò)恢復(fù)。文件的類型: (1)按文件性質(zhì)和用途可將文件分為系統(tǒng)文件、庫(kù)文件和用戶文件; (2)按信息保存期限分類可將文件分為臨時(shí)文件、檔案文件和永久文件; (3)按文件的保護(hù)方式分類可將文件分為只讀文件、讀/寫(xiě)文件、可執(zhí)行文件和不保護(hù)文件;(4) UNIX 系統(tǒng)將文件分為普通文件、目錄文件和設(shè)備文件 (特殊文件)。文件的邏輯結(jié)構(gòu)可分為兩大類:有結(jié)構(gòu)的記錄式文件;無(wú)結(jié)構(gòu)的流式文件文件的物理結(jié)構(gòu)是指文件在物理存儲(chǔ)設(shè)備上的存放方法,包括: (1)連續(xù)結(jié)構(gòu)。連續(xù)結(jié)構(gòu)也稱順序結(jié)構(gòu),它將邏輯上連續(xù)的文件信息 (如記錄)依次存放在連續(xù)編號(hào)的物理塊上。 (2)鏈接結(jié)構(gòu)。鏈接結(jié)構(gòu)也稱串聯(lián)結(jié)構(gòu),它是將邏輯上連續(xù)的文件信息 (如記錄)存放在不連續(xù)的物理塊上,每個(gè)物理塊設(shè)有一個(gè)指針指向下一個(gè)物理塊。 (3)索引結(jié)構(gòu)。將邏輯上連續(xù)的文件信息 (如記錄)存放在不連續(xù)的物理塊中系統(tǒng)為每個(gè)文件建立一張索引表。索引表記錄了文件信息所在的邏輯塊號(hào)對(duì)應(yīng)的物理塊號(hào),并將索引表的起始地址放在與文件對(duì)應(yīng)的文件目錄項(xiàng)中。 (4)多個(gè)物理塊的索引表。索引表是在文件創(chuàng)建時(shí)由系統(tǒng)自動(dòng)建立的,并與文件一起存放在同一文件卷上。根據(jù)一個(gè)文件大小的不同,其索引表占用物理塊的個(gè)數(shù)不等,一般占一個(gè)或幾個(gè)物理塊。?

4.4.2?索引文件結(jié)構(gòu)

如圖所示,系統(tǒng)中有13個(gè)索引節(jié)點(diǎn),0-9為直接索引,即每個(gè)索引節(jié)點(diǎn)存放的是內(nèi)容,假設(shè)每個(gè)物理盤(pán)大小為4KB,共可存4KB*10=40KB數(shù)據(jù);10號(hào)索引節(jié)點(diǎn)為一級(jí)間接索引節(jié)點(diǎn),大小為4KB,存放的并非直接數(shù)據(jù),而是鏈接到直接物理盤(pán)塊的地址,假設(shè)每個(gè)地址占4B,則共有1024個(gè)地址,對(duì)應(yīng)1024個(gè)物理盤(pán),可存1024*4KB=4096KB數(shù)據(jù)。二級(jí)索引節(jié)點(diǎn)類似,直接盤(pán)存放一級(jí)地址,一級(jí)地址再存放物理盤(pán)快地址,而后鏈接到存放數(shù)據(jù)的物理盤(pán)塊,容量又?jǐn)U大了一個(gè)數(shù)量級(jí),為1024*1024*4KB數(shù)據(jù)。

4.4.3?文件目錄

文件控制塊中包含以下三類信息:基本信息類、存取控制信息類和使用信息類。 (1)基本信息類。例如文件名、文件的物理地址、文件長(zhǎng)度和文件塊數(shù)等。 (2)存取控制信息類。文件的存取權(quán)限,像UNIX 用戶分成文件主、同組用戶和一般用戶三類,這三類用戶的讀/寫(xiě)執(zhí)行RWX權(quán)限。 (3)使用信息類。文件建立日期、最后一次修改日期、最后一次訪問(wèn)的日期、當(dāng)前使用的信息(如打開(kāi)文件的進(jìn)程數(shù)在文件上的等待隊(duì)列)等。文件控制塊的有序集合稱為文件目錄相對(duì)路徑:是從當(dāng)前路徑開(kāi)始的路徑 絕對(duì)路徑:是從根目錄開(kāi)始的路徑。 全文件名=絕對(duì)路徑+文件名。要注意,絕對(duì)路徑和相對(duì)路徑是不加最后的文件名的,只是單純的路徑序列。

4.4.4?文件存儲(chǔ)空間管理

文件的存取方法是指讀/寫(xiě)文件存儲(chǔ)器上的一個(gè)物理塊的方法。通常有順序存取和隨機(jī)存取兩種方法。順序存取片法是指對(duì)文件中的信息按順序依次進(jìn)行讀寫(xiě);隨機(jī)存取方法是指對(duì)文件中的信息可以按任意的次序隨機(jī)地讀/寫(xiě)文件存儲(chǔ)空間的管理: (1)空閑區(qū)表。將外存空間上的一個(gè)連續(xù)的未分配區(qū)域稱為“空閑區(qū)”。操作系統(tǒng)為磁盤(pán)外存上的所有空閑區(qū)建立一張空閑表,每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)空閑區(qū)適用于連續(xù)文件結(jié)構(gòu)。 (2)位示這種方法是在外存上建立一張位示圖(Bitmap),記錄文件存儲(chǔ)每一位對(duì)應(yīng)文件存儲(chǔ)器上的一個(gè)物理塊,取值0 和1 分別表示空閑和暫用。 (3)空閑塊鏈。每個(gè)空閑物理塊中有指向下-個(gè)空閑物理塊的指針,所有空閑物理塊構(gòu)成一個(gè)鏈表,鏈表的頭指針?lè)旁谖募鎯?chǔ)器的特定位置上(如管理塊中),不需要磁盤(pán)分配表,節(jié)省空間。 (4)成組鏈接法。例如,在實(shí)現(xiàn)時(shí)系統(tǒng)將空閑塊分成若干組,每100個(gè)空閑塊為一組,每組的第一個(gè)空閑塊登記了下一組空閑塊的物理盤(pán)塊號(hào)和空閑塊總數(shù)假如某個(gè)組的第一個(gè)空閑塊號(hào)等于0,意味著該組是最后一組,無(wú)下一組空閑塊。

第五章 計(jì)算機(jī)網(wǎng)絡(luò)?

5.1 網(wǎng)絡(luò)功能和分類

計(jì)算機(jī)網(wǎng)絡(luò)是計(jì)算機(jī)技術(shù)與通信技術(shù)相結(jié)合的產(chǎn)物,它實(shí)現(xiàn)了遠(yuǎn)程通信、遠(yuǎn)程信息處理和資源共享。計(jì)算機(jī)網(wǎng)絡(luò)的功能:數(shù)據(jù)通信、資源共享、負(fù)載均衡、高可靠性。

總線型(利用率低、干擾大、價(jià)格低)、星型(交換機(jī)形成的局域網(wǎng)、中央單元負(fù)荷大)、環(huán)型(流動(dòng)方向固定、效率低擴(kuò)充難)、樹(shù)型(總線型的擴(kuò)充、分級(jí)結(jié)構(gòu))、分布式(任意節(jié)點(diǎn)連接管理難成本高)

5.2?OSI七層模型

5.3?TCP/IP協(xié)議

網(wǎng)絡(luò)協(xié)議三要素:語(yǔ)法、語(yǔ)義、時(shí)序。其中語(yǔ)法部分規(guī)定傳輸數(shù)據(jù)的格式,語(yǔ)義部分規(guī)定所要完成的功能,時(shí)序部分規(guī)定執(zhí)行各種操作的條件、順序關(guān)系等。

網(wǎng)絡(luò)層協(xié)議:

IP:網(wǎng)絡(luò)層最重要的核心協(xié)議,在源地址和目的地址之間傳送數(shù)據(jù)報(bào),無(wú)連接、不可靠。ICMP:因特網(wǎng)控制報(bào)文協(xié)議,用于在IP主機(jī)、路由器之間傳遞控制消息??刂葡⑹侵妇W(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。ARP和RARP:地址解析協(xié)議,ARP是將IP地址轉(zhuǎn)換為物理地址,RARP是將物理地址轉(zhuǎn)換為IP地址。IGMP:網(wǎng)絡(luò)組管理協(xié)議,允許因特網(wǎng)中的計(jì)算機(jī)參加多播,是計(jì)算機(jī)用做向相鄰多目路由器報(bào)告多目組成員的協(xié)議,支持組播。傳輸層協(xié)議:

TCP:整個(gè)TCP/IP協(xié)議族中最重要的協(xié)議之一,在IP協(xié)議提供的不可靠數(shù)據(jù)數(shù)據(jù)基礎(chǔ)上,采用了重發(fā)技術(shù),為應(yīng)用程序提供了一個(gè)可靠的、面向連接的、全雙工的數(shù)據(jù)傳輸服務(wù)。一般用于傳輸數(shù)據(jù)量比較少,且對(duì)可靠性要求高的場(chǎng)合。UDP:是一種不可靠、無(wú)連接的協(xié)議,有助于提高傳輸速率,一般用于傳輸數(shù)據(jù)量大,對(duì)可靠性要求不高,但要求速度快的場(chǎng)合。應(yīng)用層協(xié)議:基于TCP的FTP、HTTP等都是可靠傳輸。基于UDP的DHCP、DNS等都是不可靠傳輸。

FTP:可靠的文件傳輸協(xié)議,用于因特網(wǎng)上的控制文件的雙向傳輸。HTTP:超文本傳輸協(xié)議,用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議。使用SSL加密后的安全網(wǎng)頁(yè)協(xié)議為HTTPS。SMTP和POP3:簡(jiǎn)單郵件傳輸協(xié)議,是一組用于由源地址到目的地址傳送郵件的規(guī)則,郵件報(bào)文采用ASCII格式表示。Telnet:遠(yuǎn)程連接協(xié)議,是因特網(wǎng)遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。TFTP:不可靠的、開(kāi)銷不大的小文件傳輸協(xié)議。SNMP:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,由一組網(wǎng)絡(luò)管理的標(biāo)準(zhǔn)協(xié)議,包含一個(gè)應(yīng)用層協(xié)議、數(shù)據(jù)庫(kù)模型和一組資源對(duì)象。該協(xié)議能夠支持網(wǎng)絡(luò)管理系統(tǒng),泳衣監(jiān)測(cè)連接到網(wǎng)絡(luò)上的設(shè)備是否有任何引起管理師行關(guān)注的情況。DHCP:動(dòng)態(tài)主機(jī)配置協(xié)議,基于UDP,基于C/S模型,為主機(jī)動(dòng)態(tài)分配IP地址,有三種方式:固定分配、動(dòng)態(tài)分配、自動(dòng)分配。DNS:域名解析協(xié)議,通過(guò)域名解析出IP地址

5.4?傳輸介質(zhì)

雙絞線:將多根銅線按規(guī)則纏繞在一起,能夠減少擾:分為無(wú)屏蔽雙絞線UTP和屏蔽雙絞線STP,都是由一對(duì)銅線族組成。也即我們常說(shuō)的網(wǎng)線: 雙絞線的傳輸距離在100m以內(nèi)。無(wú)屏蔽雙絞線UTP:價(jià)格低,安裝簡(jiǎn)單,但可靠性相對(duì)較低,分為CAT3(3類UTP,速率為10Mbps)、CAT4(4類UTP,與3類差不多,無(wú)應(yīng)用)、CAT5(5類UTP,速率為100Mbps,用于快速以太網(wǎng))、CAT5E(超5類UTP,速率為1000Mbps)、CAT6 (6類UTP,用來(lái)替代CAT5E,速率也是1000Mbps)屏蔽雙絞線STP:比之UTP增加了一層屏蔽層,可以有效的提高可靠性,但對(duì)應(yīng)的價(jià)格高,安裝麻煩,一般用于對(duì)傳輸可靠性要求很高的場(chǎng)合。網(wǎng)線有如下兩種安裝標(biāo)準(zhǔn):都是八根不同顏色的網(wǎng)線按照不同的順序排序,插入水晶頭中區(qū)分在第1236四根網(wǎng)線的位置不同。光纖:由纖芯和包層組成,傳輸?shù)墓庑盘?hào)在纖芯中傳輸,然而從PC端出來(lái)的信號(hào)都是電信號(hào),要經(jīng)過(guò)光纖傳輸?shù)脑?,就必須將電信?hào)轉(zhuǎn)換為光信號(hào)。多模光纖MMF:纖芯半徑較大,因此可以同時(shí)傳輸多種不同的信號(hào),光信號(hào)在光纖中以全反射的形式傳輸,采用發(fā)光二極管LED為光源,成本低,但是傳輸?shù)男屎涂煽啃远驾^低,適合于短距離傳輸其傳輸距離與傳輸速率相關(guān),速率為100Mbps時(shí)為2KM,速率為1000Mbps時(shí)為550m。單模光纖SMF:纖芯半徑很小,一般只能傳輸一種信號(hào),采用激光二極管LD作為光源,并且只支持激光信號(hào)的傳播,同樣是以全反射形式傳播,只不過(guò)反射角很大,看起來(lái)像一條直線,成本高,但是傳輸距離遠(yuǎn),可靠性高。傳輸距離可達(dá)5KM。

5.5?通信方式和交換方式

通信方向:數(shù)據(jù)通信是指發(fā)送方發(fā)送數(shù)據(jù)到接收方,這個(gè)傳輸過(guò)程可以分類如下: 單工:只能由設(shè)備A發(fā)給設(shè)備B,即數(shù)據(jù)流只能單向流動(dòng)。 半雙工:設(shè)備A和設(shè)備B可以互相通信,但是同一時(shí)刻數(shù)據(jù)流只能單向流動(dòng)。 全雙工:設(shè)備A和設(shè)備B在任意時(shí)刻都能互相通信。同步方式 異步傳輸:發(fā)送方每發(fā)送一個(gè)字符,需要約定一個(gè)起始位和停止位插入到字符的起始和結(jié)尾處這樣當(dāng)接收方接收到該字符時(shí)能夠識(shí)別,但是這樣會(huì)造成資源浪費(fèi),傳輸效率降低。 同步傳輸:以數(shù)據(jù)塊為單位進(jìn)行傳輸,當(dāng)發(fā)送方要發(fā)送數(shù)據(jù)時(shí),先發(fā)送一個(gè)同步幀,接收方收到后做好接收準(zhǔn)備,開(kāi)始接收數(shù)據(jù)塊,結(jié)束后又會(huì)有結(jié)束幀確認(rèn),這樣一次傳輸一個(gè)數(shù)據(jù)塊,效率高。串行傳輸:只有一根數(shù)據(jù)線,數(shù)據(jù)只能1bit挨個(gè)排隊(duì)傳送,適合低速設(shè)備、遠(yuǎn)距離的傳送,般用于廣域網(wǎng)中。并行傳輸:有多根數(shù)據(jù)線,可以同時(shí)傳輸多個(gè)bit數(shù)據(jù),適合高速設(shè)備的傳送,常用語(yǔ)計(jì)算機(jī)內(nèi)部各硬件模塊之間。?

5.6?IP地址

機(jī)器中存放的IP地址是32位的二進(jìn)制代碼,每隔8位插入一個(gè)空格,可提高可讀性,為了便于理解和設(shè)置,一般會(huì)采用點(diǎn)分十進(jìn)制方法來(lái)表示:將32位二進(jìn)制代碼每8位二進(jìn)制轉(zhuǎn)換成十進(jìn)制,就變成了4個(gè)十進(jìn)制數(shù),而后在每個(gè)十進(jìn)制數(shù)間隔中插入。因?yàn)槊總€(gè)十進(jìn)制數(shù)都是由8個(gè)二進(jìn)制數(shù)轉(zhuǎn)換而來(lái),因此每個(gè)十進(jìn)制數(shù)的取值范圍為0-255(掌握二進(jìn)制轉(zhuǎn)十進(jìn)制的快速計(jì)算方法,牢記2的冪指數(shù)值,實(shí)現(xiàn)快速轉(zhuǎn)換)分類IP地址:IP地址分四段,每段八位,共32位二進(jìn)制數(shù)組成在邏輯上,這32位IP地址分為網(wǎng)絡(luò)號(hào)和主機(jī)號(hào),依據(jù)網(wǎng)絡(luò)號(hào)位數(shù)的不同,可以將P地址分為以下幾類:

今無(wú)分類編址:即不按照A B C類規(guī)則,自動(dòng)規(guī)定網(wǎng)絡(luò)號(hào),無(wú)分類編址格式為:IP地址/網(wǎng)絡(luò)號(hào),示例:128.168.0.11/20表示的1P地址為128.168.0.11,其網(wǎng)絡(luò)號(hào)占20位,因此主機(jī)號(hào)占32-20=12位,也可以劃分子網(wǎng)。公有地址:通過(guò)它直接訪問(wèn)因特網(wǎng)。是全網(wǎng)唯一的IP地址。 私有地址:屬于非注冊(cè)地址,專門(mén)為組織機(jī)構(gòu)內(nèi)部使用,不能直接訪問(wèn)因特網(wǎng),下表所示為私有地址范圍。

?其他特殊地址如下表所示:

子網(wǎng)劃分一般公司在申請(qǐng)網(wǎng)絡(luò)時(shí),會(huì)直接獲得一個(gè)范圍很大的網(wǎng)絡(luò),如一個(gè)B類地址,因?yàn)橹鳈C(jī)數(shù)之間相差的太大了,不利于分配,我們一般采用子網(wǎng)劃分的方法來(lái)劃分網(wǎng)絡(luò),即自定義網(wǎng)絡(luò)號(hào)位數(shù),就能自定義主機(jī)號(hào)位數(shù),就能根據(jù)主機(jī)個(gè)數(shù)來(lái)劃分出最適合的方案,不會(huì)造成資源的浪費(fèi)。因此就有子網(wǎng)的概念,一般的IP地址按標(biāo)準(zhǔn)劃分為ABC類后,可以進(jìn)行再一步的劃分,將主機(jī)號(hào)拿出幾位作為子網(wǎng)號(hào),就可以劃分出多個(gè)子網(wǎng),此時(shí)IP地址組成為: 網(wǎng)絡(luò)號(hào)+子網(wǎng)號(hào)+主機(jī)號(hào)。子網(wǎng)掩碼網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)都為1,主機(jī)號(hào)都為0,這樣的地址為子網(wǎng)掩碼。要注意的是:子網(wǎng)號(hào)可以為全0和全1,主機(jī)號(hào)不能為全0或全1,因此,主機(jī)數(shù)需要-2,而子網(wǎng)數(shù)不用。還可以聚合網(wǎng)絡(luò)為超網(wǎng),就是劃分子網(wǎng)的逆過(guò)程,將網(wǎng)絡(luò)號(hào)取出幾位作為主機(jī)號(hào),此時(shí),這個(gè)網(wǎng)絡(luò)內(nèi)的主機(jī)數(shù)量就變多了,成為一個(gè)更大的網(wǎng)絡(luò)。?

5.7?IPv6

主要是為了解決IPv4地址數(shù)不夠用的情況而提出的設(shè)計(jì)方案,IPv6具有以下特性:: (1)Pv6地址長(zhǎng)度為128位,地址空間增大了2^96倍; (2)靈活的IP報(bào)文頭部格式,使用一系列固定格式的擴(kuò)展頭部取代了IPv4中可變長(zhǎng)度的選項(xiàng)字段。IPv6中選項(xiàng)部分的出現(xiàn)方式也有所變化,使路由器可以簡(jiǎn)單擼過(guò)選項(xiàng)而不做任何處理,加快了報(bào)文處理速度; (3)IPv6簡(jiǎn)化了報(bào)文頭部格式,加快報(bào)文轉(zhuǎn)發(fā); (4)提高了吞吐量;提高安全性,身份認(rèn)證和隱私權(quán)是IPv6的關(guān)鍵特性; (5)支持更多的服務(wù)類型; (6)允許協(xié)議繼續(xù)演變,增加新的功能,使之適應(yīng)未來(lái)技術(shù)的發(fā)展。IPv4和IPv6的過(guò)渡期間,主要采用三種基本技術(shù): (1)雙協(xié)議棧:主機(jī)同時(shí)運(yùn)行IPv4和1Pv6兩套協(xié)議棧,同時(shí)支持兩套協(xié)議,一般來(lái)說(shuō)IPv4和IPv6地址之間存在某種轉(zhuǎn)換關(guān)系,如IPv6的低32位可以直接轉(zhuǎn)換為IPv4地址,實(shí)現(xiàn)互相通信。(2)隧道技術(shù):這種機(jī)制用來(lái)在Pv4網(wǎng)絡(luò)之上建立一條能夠傳輸PV6數(shù)據(jù)報(bào)的陳道,例如可以將IPv6數(shù)據(jù)報(bào)當(dāng)做IPv4數(shù)據(jù)報(bào)的數(shù)據(jù)部分加以封裝,只需要加一個(gè)IPv4的首部,就能在IPv4網(wǎng)絡(luò)中傳輸IPV6報(bào)。 (3)翻譯技術(shù):利用一臺(tái)專門(mén)的翻譯設(shè)備(如轉(zhuǎn)換網(wǎng)關(guān)),在純IP4和純IPV6網(wǎng)絡(luò)之間轉(zhuǎn)換IP報(bào)頭的地址,同時(shí)根據(jù)協(xié)議不同對(duì)分組做相應(yīng)的語(yǔ)義翻譯,從而使純IPv4和純IPv6站點(diǎn)之間能夠透明通信。

5.8?網(wǎng)絡(luò)規(guī)劃和設(shè)計(jì)

三層模型將網(wǎng)絡(luò)劃分為核心層、匯聚層和接入層,每一層都有著特定的作用。核心層提供不同區(qū)域之間的最佳路由和高速數(shù)據(jù)傳送;匯聚層將網(wǎng)絡(luò)業(yè)務(wù)連接到接入層,并且實(shí)施與安全、流量、負(fù)載和路由相關(guān)的策略接入層為用戶提供了在本地網(wǎng)段訪問(wèn)應(yīng)用系統(tǒng)的能力,還要解決相鄰用戶之間的互訪需要,接入層要負(fù)責(zé)一些用戶信息(例如用戶IP地址、MAC地址和訪問(wèn) 日志等)的收集工作和用戶管理功能(包括認(rèn)證和計(jì)費(fèi)等)

?建筑物綜合布線系統(tǒng)PDS: (1)工作區(qū)子系統(tǒng):實(shí)現(xiàn)工作區(qū)終端設(shè)備到水平子系統(tǒng)的信息插座之間的互聯(lián)。 (2)水平布線子系統(tǒng)然實(shí)現(xiàn)管息插和管理子系統(tǒng)之間的連接。 (3)設(shè)備間子系統(tǒng):實(shí)現(xiàn)中央主配線架與各種不同設(shè)備之間的連接。 (4)垂直干線子系統(tǒng):實(shí)現(xiàn)各樓層設(shè)備間子系統(tǒng)之間的互連。 (5)管理子系統(tǒng):連接各樓層水平布線子系統(tǒng)和垂直干纜線,負(fù)責(zé)連接控制其他子系統(tǒng)為連接其他子系統(tǒng)提供連接手段。 (6)建筑群子系統(tǒng):各個(gè)建筑物通信系統(tǒng)之間的互聯(lián)

5.9 其他考點(diǎn)補(bǔ)充

網(wǎng)絡(luò)地址翻譯NAT:公司內(nèi)有很多電腦,在公司局域網(wǎng)內(nèi)可以互聯(lián)通信,但是要訪問(wèn)外部因特網(wǎng)時(shí),只提供固定的少量IP地址能夠訪問(wèn)因特網(wǎng),將公司所有電腦這個(gè)大的地址集合映射到能夠訪問(wèn)因特網(wǎng)的少量IP地址集合的過(guò)程就稱為NAT。很明顯,使用了NAT后,一個(gè)公司只有少量固定IP地址可以上網(wǎng),大大減少了IP地址的使用量。默認(rèn)網(wǎng)關(guān):一臺(tái)主機(jī)可以有多個(gè)網(wǎng)關(guān)。默認(rèn)網(wǎng)關(guān)的意思是一臺(tái)主機(jī)如果找不到可用的網(wǎng)關(guān),就把數(shù)據(jù)包發(fā)給默認(rèn)指定的網(wǎng)關(guān),由這個(gè)網(wǎng)關(guān)來(lái)處理數(shù)據(jù)包?,F(xiàn)在主機(jī)使用的網(wǎng)關(guān),一般指的是默認(rèn)網(wǎng)關(guān)。默認(rèn)網(wǎng)關(guān)的IP地址必須與本機(jī)IP地址在同一個(gè)網(wǎng)段內(nèi),即同網(wǎng)絡(luò)號(hào)。虛擬局域網(wǎng)VLAN:是一組邏輯上的設(shè)備和用戶,這些設(shè)備和用戶并不受物理位置的限制,可以根據(jù)功能、部門(mén)及應(yīng)用等因素將它們組織起來(lái),相互之間的通信就好像它們?cè)谕粋€(gè)網(wǎng)段中一樣。VLAN工作在0SI參考模型的第2層和第3層,一個(gè)VLAN就是一個(gè)廣播域,VLAN之間的通信是通過(guò)第3層的路由器來(lái)完成的。與傳統(tǒng)的局域網(wǎng)技術(shù)相比較,VLAN技術(shù)更加靈活,它具有以下優(yōu)點(diǎn): 網(wǎng)絡(luò)設(shè)備的移動(dòng)、添加和修改的管理開(kāi)銷減少;可以控制廣播活動(dòng);可提高網(wǎng)絡(luò)的安全性。虛擬專用網(wǎng)VPN是在公用網(wǎng)絡(luò)上建立專用網(wǎng)絡(luò)的技術(shù)。其之所以稱為虛擬網(wǎng),主要是因?yàn)檎麄€(gè)VPN網(wǎng)絡(luò)的任意兩個(gè)節(jié)點(diǎn)之間的連接并沒(méi)有傳統(tǒng)專網(wǎng)所需的端到端的物理鏈路,而是架構(gòu)在公用網(wǎng)絡(luò)服務(wù)商所提供的網(wǎng)絡(luò)平臺(tái),如Internet、ATM(異步傳輸模式》、Frame Relay (中繼)等之上的邏輯網(wǎng)絡(luò),用戶數(shù)據(jù)在邏輯鏈路中傳輸。PPP:安全認(rèn)證介紹:PPP的NCP可以承載多種協(xié)議的三層數(shù)據(jù)包。PPP使用LCP控制多種鏈路的參數(shù)(建立、認(rèn)證、壓縮、回?fù)?。PPP的認(rèn)證類型:pap認(rèn)證是通過(guò)二次握手建立認(rèn)證(明文不加密),chap挑戰(zhàn)握手認(rèn)證協(xié)議通過(guò)三次握手建立認(rèn)證(密文采用MD5加密)。PPP的雙向驗(yàn)證,采用的是chap的主驗(yàn)證風(fēng)格。PPP的加固驗(yàn)證,采用的是兩種 (pap,chap)驗(yàn)證同時(shí)使用沖突域和廣播域:路由器可以阻斷廣播域和沖突域,交換機(jī)只能阻斷沖突域,因此一個(gè)路由器下可以劃分多個(gè)廣播域和多個(gè)沖突域:一個(gè)交換機(jī)下整體是一個(gè)廣播域,但可以劃分多個(gè)沖突域:而物理層設(shè)備集線器下整體作為一個(gè)沖突域和一個(gè)廣播域。?

5.10 網(wǎng)絡(luò)安全技術(shù)

【防火墻】

防火墻是在內(nèi)部網(wǎng)絡(luò)和外部因特網(wǎng)之間增加的一道安全防護(hù)措施,分為網(wǎng)絡(luò)級(jí)防火墻和應(yīng)用級(jí)防火墻。網(wǎng)絡(luò)級(jí)防火墻層次低,但是效率高,因?yàn)槠涫褂冒^(guò)濾和狀態(tài)監(jiān)測(cè)手段,般只檢驗(yàn)網(wǎng)絡(luò)包外在(起始地址、狀態(tài))屬性是否異常,若異常,則過(guò)濾掉不與內(nèi)網(wǎng)通信,因此對(duì)應(yīng)用和用戶是透明的。但是這樣的問(wèn)題是,如果遇到偽裝的危險(xiǎn)數(shù)據(jù)包就沒(méi)辦法過(guò)濾,此時(shí),就要依靠應(yīng)用級(jí)防火墻,層次高,效率低,因?yàn)閼?yīng)用級(jí)防火墻會(huì)將網(wǎng)絡(luò)包拆開(kāi),具體檢查里面的數(shù)據(jù)是否有問(wèn)題,會(huì)消耗大量時(shí)間,造成效率低下,但是安全強(qiáng)度高。

【入侵檢測(cè)】

入侵檢測(cè)系統(tǒng)IDS防火墻技術(shù)主要是分隔來(lái)自外網(wǎng)的威脅,卻對(duì)來(lái)自內(nèi)網(wǎng)的直接攻擊無(wú)能為力此時(shí)就要用到入侵檢測(cè)IDS技術(shù),位于防火墻之后的第二道屏障,作為防火墻技術(shù)的補(bǔ)充。原理:監(jiān)控當(dāng)前系統(tǒng)/用戶行為,使用入侵檢測(cè)分析引擎進(jìn)行分析,這里包含個(gè)知識(shí)庫(kù)系統(tǒng),囊括了歷史行為、特定行為模式等操作,將當(dāng)前行為和知識(shí)庫(kù)進(jìn)行匹配,就能檢測(cè)出當(dāng)前行為是否是入侵行為,如果是入侵,則記錄證據(jù)并上報(bào)給系統(tǒng)和防火墻,交由它們處理不同于防火墻,IDS入侵檢測(cè)系統(tǒng)是一個(gè)監(jiān)聽(tīng)設(shè)備,沒(méi)有跨接在任何鏈路上無(wú)須網(wǎng)絡(luò)流量流經(jīng)它便可以工作。因此,對(duì)IDS的部署,唯一的要求是: DS應(yīng)當(dāng)掛接在所有所關(guān)注流量都必須流經(jīng)的鏈路上。因此,IDS在交換式網(wǎng)絡(luò)中的位置般選擇在: (1)盡可能靠近攻擊源 (2) 盡可能靠近受保護(hù)資源?

【入侵防御】

入侵防御系統(tǒng)IPSIDS和防火墻技術(shù)都是在入侵行為已經(jīng)發(fā)生后所做的檢測(cè)和分析,而iPS是能夠提前發(fā)現(xiàn)入侵行為,在其還沒(méi)有進(jìn)入安全網(wǎng)絡(luò)之前就防御。在安全網(wǎng)絡(luò)之前的鏈路上掛載入侵防御系統(tǒng)IPS,可以實(shí)時(shí)檢測(cè)入侵行為,并直接進(jìn)行阻斷,這是與IDS的區(qū)別,要注意。殺毒軟件用于檢測(cè)和解決計(jì)算機(jī)病毒,與防火墻和IDS要區(qū)分,計(jì)算機(jī)病毒要靠殺毒軟件防火墻是處理網(wǎng)絡(luò)上的非法攻擊。蜜罐系統(tǒng):偽造一個(gè)蜜罐網(wǎng)絡(luò)引誘黑客攻擊蜜罐網(wǎng)絡(luò)被攻擊不影響安全網(wǎng)絡(luò),,并且可以借此了解黑客攻擊的手段和原理,從而對(duì)安全系統(tǒng)進(jìn)行升級(jí)和優(yōu)化?網(wǎng)絡(luò)攻擊和威脅

【計(jì)算機(jī)病毒和木馬】

病毒:編制或者在計(jì)算機(jī)程序中插入的破壞計(jì)算機(jī)功能或者破壞數(shù)據(jù),影響計(jì)算機(jī)使用并且能夠自我復(fù)制的一組計(jì)算機(jī)指令或者程序代碼。木馬:是一種后門(mén)程序,常被黑客用作控制遠(yuǎn)程計(jì)算機(jī)的工具,隱藏在被控制電腦上的一個(gè)小程序監(jiān)控電腦一切操作并盜取信息。代表性病毒實(shí)例: 蠕蟲(chóng)病毒(感染EXE文件):熊貓燒香,羅密歐與朱麗葉,惡鷹,尼姆達(dá),沖擊波,歡樂(lè)時(shí)光。 木馬:QQ消息尾巴木馬,特洛伊木馬,x臥底。 宏病毒(感染word、excel等文件中的宏變量):美麗沙,臺(tái)灣1號(hào) CIH病毒:史上唯一破壞硬件的病毒。 紅色代碼:蠕蟲(chóng)病毒+木馬。

5.11?網(wǎng)絡(luò)安全協(xié)議

物理層主要使用物理手段,隔離、屏蔽物理設(shè)備等,其它層都是靠協(xié)議來(lái)保證傳輸?shù)陌踩唧w如下圖所示:

SSL協(xié)議:安全套接字協(xié)議,被設(shè)計(jì)為加強(qiáng)Web安全傳輸(HTTP/HTTPS/)的協(xié)議安全性高,和HTTP結(jié)合之后,形成HTTPS安全協(xié)議,端口號(hào)為443。SSH協(xié)議:安全外殼協(xié)議,被設(shè)計(jì)為加強(qiáng)Telnet/FTP安全的傳輸協(xié)議。SET協(xié)議:安全電子交易協(xié)議主要應(yīng)用于B2C模式(電子商務(wù)) 中保障支付信息的安全性。SET協(xié)議本身比較復(fù)雜,設(shè)計(jì)比較嚴(yán)格,安全性高,它能保證信息傳輸?shù)臋C(jī)密性、真實(shí)性、完整性和不可否認(rèn)性。SET協(xié)議是PKI架下的一個(gè)典型實(shí)現(xiàn),同時(shí)也在不斷升級(jí)和完善,如SET20將支持借記卡電子交易。Kerberos協(xié)議:是一種網(wǎng)絡(luò)身份認(rèn)證協(xié)議該協(xié)議的基礎(chǔ)是基于信任第三方它提供了在開(kāi)放型網(wǎng)絡(luò)中進(jìn)行身份認(rèn)證的方法,認(rèn)證實(shí)體可以是用戶也可以是用戶服務(wù)。這種認(rèn)證不依賴宿主機(jī)的操作系統(tǒng)或計(jì)算機(jī)的IP地址,不需要保證網(wǎng)絡(luò)上所有計(jì)算機(jī)的物理安全性,并且假定數(shù)據(jù)包在傳輸中可被隨機(jī)竊取和算改。PGP協(xié)議:使用RSA公證書(shū)進(jìn)行身份認(rèn)證,使用IDEA (128位密)進(jìn)行數(shù)據(jù)加密,使用MD5進(jìn)行數(shù)據(jù)完整性驗(yàn)證。發(fā)送方A有三個(gè)密鑰:A的私鑰、B的公A成的一次性對(duì)稱密接收方B有兩個(gè)密鑰:B的私鑰、A的公鑰。

第六章 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)

6.1 基本概念

6.1.1 關(guān)于數(shù)據(jù)的基本概念

數(shù)據(jù):是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象,是描述事物的符號(hào)記錄數(shù)據(jù)的種類:文本、圖形、圖像、音頻、視頻、學(xué)生的檔案記錄、貨物的運(yùn)輸情況等。數(shù)據(jù)庫(kù)(DB):是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)的基本特征:數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲(chǔ),可為各種用戶共享,幾余度較小;數(shù)據(jù)獨(dú)立性較高;易擴(kuò)展。數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS:是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用于科學(xué)地獲取、組織、存儲(chǔ)和維護(hù)數(shù)據(jù),是一個(gè)大型復(fù)雜的軟件系統(tǒng)。數(shù)據(jù)庫(kù)系統(tǒng)(DBS)是計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)庫(kù)后的系統(tǒng)構(gòu)成。 數(shù)據(jù)庫(kù)庫(kù)系統(tǒng)的構(gòu)成:數(shù)據(jù)庫(kù);硬件平臺(tái);軟件 (應(yīng)用程序) ;數(shù)據(jù)庫(kù)管理員。

6.1.2 數(shù)據(jù)庫(kù)管理系統(tǒng)的功能

DBMS的組成部分:●?數(shù)據(jù)定義語(yǔ)言DDL及編譯處理程序●?數(shù)據(jù)操縱語(yǔ)言DML及其編譯程序●?數(shù)據(jù)庫(kù)運(yùn)行控制程序●?實(shí)用程序?

DBMS的主要功能:●?數(shù)據(jù)定義●?數(shù)據(jù)操縱●?數(shù)據(jù)庫(kù)運(yùn)行管理●?數(shù)據(jù)組織、存儲(chǔ)和管理●?數(shù)據(jù)庫(kù)的建立和維護(hù)●?數(shù)據(jù)通信接口●?數(shù)據(jù)控制功能

數(shù)據(jù)控制功能? (1)數(shù)據(jù)的安全性(Security) 保護(hù)保護(hù)數(shù)據(jù),以防止不合法的使用造成的數(shù)據(jù)的泄密和破壞。 (2)數(shù)據(jù)的完整性(Integrity)檢查將數(shù)據(jù)控制在有效的范圍內(nèi),或保證數(shù)據(jù)之間滿足一定的關(guān)系。 (3)并發(fā)(Concurrency)控制對(duì)多用戶的并發(fā)操作加以控制和協(xié)調(diào),防止相互干擾而得到錯(cuò)誤的結(jié)果。 (4)數(shù)據(jù)庫(kù)恢復(fù)(Recovery) 將數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)

6.1.3 數(shù)據(jù)各個(gè)發(fā)展階段的特點(diǎn)

6.1.4 數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)

從數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員或數(shù)據(jù)庫(kù)管理系統(tǒng)的角度看(內(nèi)部體系結(jié)構(gòu)): 數(shù)據(jù)庫(kù)采用三級(jí)模式結(jié)構(gòu),是數(shù)據(jù)庫(kù)系統(tǒng)的內(nèi)部的系統(tǒng)結(jié)構(gòu),外模式、模式、內(nèi)模式。從數(shù)據(jù)庫(kù)最終用戶角度看(外部體系結(jié)構(gòu)): (1)集中式:數(shù)據(jù)、數(shù)據(jù)管理、功能應(yīng)用、用戶接口到DBMS核心都集中在DBMS所在的計(jì)算機(jī)上。 (2)分布式數(shù)據(jù)庫(kù)系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)相結(jié)合的產(chǎn)物。是針對(duì)面向地理上分散,而管理上又需要不同程度集中管理的需求而提出的一種數(shù)據(jù)管理信息系統(tǒng)。 (3)客戶-服務(wù)器結(jié)構(gòu):一個(gè)處理機(jī)(客戶端)的請(qǐng)求被送到另一個(gè)處理機(jī)(服務(wù)器上執(zhí)行。 (4)并行式:使用相連接的多個(gè)CPU和多個(gè)磁盤(pán)進(jìn)行并行操作,提高數(shù)據(jù)處理和I/O速度。 (5)數(shù)據(jù)庫(kù)技術(shù)是計(jì)算機(jī)處理與數(shù)據(jù)存儲(chǔ)最有效、最成功的技術(shù),而Web技術(shù)的特點(diǎn)是資源共享,因此數(shù)據(jù)與資源共享這兩種技術(shù)的結(jié)合即形成了今天廣泛應(yīng)用的IWeh數(shù)據(jù)庫(kù)(即網(wǎng)絡(luò)數(shù)據(jù)庫(kù))

6.2 數(shù)據(jù)模型

6.2.1 三級(jí)模式兩級(jí)映像

模式(概念模式、邏輯模式):就是我們通常使用的表這個(gè)級(jí)別;是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖,綜合了所有用戶的需求;一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)模式。如公司的所有員工管理信息系統(tǒng)。外模式(子模式、用戶模式):對(duì)應(yīng)數(shù)據(jù)庫(kù)中的視圖這個(gè)級(jí)別;是數(shù)據(jù)庫(kù)用戶 (包括應(yīng)用程序員和最終用戶使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。員工管理員和薪酬管理員關(guān)注的不同方面。介于模式與應(yīng)用之間,可以有多個(gè)外模式,通常是模式的子集;反映了不同的用戶的應(yīng)用需求外模式的用途:保證數(shù)據(jù)庫(kù)安全性的一個(gè)有力措施每個(gè)用戶只能看見(jiàn)和訪問(wèn)所對(duì)應(yīng)的外模式中的數(shù)據(jù)。內(nèi)模式《存儲(chǔ)模式):管理如何存儲(chǔ)物理的數(shù)據(jù),是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的表示方法;一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式。?

【三個(gè)級(jí)別】●?用戶級(jí)數(shù)據(jù)庫(kù):對(duì)應(yīng)于外模式,是用戶看到和使用的數(shù)據(jù)庫(kù),又稱用戶視圖,一個(gè)數(shù)據(jù)庫(kù)可有多個(gè)不同的用戶視圖;●?概念級(jí)數(shù)據(jù)庫(kù):對(duì)應(yīng)于概念模式,是所有用戶視圖的最小并集,一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)只有一個(gè)DBA視圖?!?物理級(jí)數(shù)據(jù)庫(kù):對(duì)應(yīng)于內(nèi)模式,是數(shù)據(jù)庫(kù)的底層表示,它描述數(shù)據(jù)的實(shí)際存儲(chǔ)組織,是最接近于物理存儲(chǔ)的,又稱為內(nèi)部視圖。

6.2.2 數(shù)據(jù)模型_模型分類

數(shù)據(jù)模型,現(xiàn)實(shí)世界的模擬,對(duì)現(xiàn)實(shí)世界中的概念進(jìn)行抽象、表示和處理(對(duì)數(shù)據(jù)進(jìn)行描述、組織和操作)的工具。數(shù)據(jù)模型是數(shù)據(jù)庫(kù)系統(tǒng)的核心和基礎(chǔ)。●?概念模型(信息模型):按用戶的觀點(diǎn)來(lái)對(duì)數(shù)據(jù)和信息建模,通常用ER圖進(jìn)行描述,用于數(shù)據(jù)庫(kù)設(shè)計(jì)。與計(jì)算機(jī)無(wú)關(guān)。●?邏輯模型:按計(jì)算機(jī)系統(tǒng)的觀點(diǎn)對(duì)數(shù)據(jù)建模,用于DBMS實(shí)現(xiàn)。主要包括:網(wǎng)狀模型、層次模型、關(guān)系模型、面向?qū)ο竽P偷?。與計(jì)算機(jī)有關(guān)●?物理模型:是對(duì)數(shù)據(jù)最底層的抽象,描述數(shù)據(jù)在系統(tǒng)內(nèi)部的表示方式和存取方法。與計(jì)算機(jī)有關(guān)。

6.2.3?數(shù)據(jù)模型_組成要素

實(shí)體完整性:實(shí)體完整性是指實(shí)體的主屬性不能取空值。實(shí)體完整性規(guī)則規(guī)定實(shí)體的所有主屬性都不能為空。參照完整性:在關(guān)系數(shù)據(jù)庫(kù)中主要是外鍵參照的完整性。用戶定義完整性:用戶定義完整性是針對(duì)某一個(gè)具體關(guān)系的約束條件。

6.2.4?概念模型中的基本概念

實(shí)體型之間的聯(lián)系:E-R圖(實(shí)體-關(guān)系圖) 概念模型用于信息世界的建模是數(shù)據(jù)庫(kù)設(shè)計(jì)的有力工具,也是數(shù)據(jù)庫(kù)設(shè)計(jì)人員和用戶之間進(jìn)行交流的語(yǔ)言,主要通過(guò)E-R圖進(jìn)行描述。

(1)實(shí)體(Entity):客觀存在并可相互區(qū)別的事物稱為實(shí)體??梢允蔷唧w的人、事、物或抽象的概念客觀實(shí)體:人、課桌、書(shū)本...... 抽象實(shí)體:賬戶、貸款...... (2)屬性(Attribute):實(shí)體所具有的某一特性稱為屬性。一個(gè)實(shí)體可以由若干個(gè)屬性來(lái)刻畫(huà)如員工實(shí)體由員工編號(hào)、姓名、年齡、職務(wù)、部門(mén)...... (3)碼(Key):標(biāo)識(shí)實(shí)體的屬性集稱為碼。 (4)域(Domain):屬性的取值范圍稱為該屬性的域 (5)實(shí)體型(Entity Type):用實(shí)體名及其屬性名集合來(lái)抽象和刻畫(huà)同類實(shí)體稱為實(shí)體型

屬性的分類:●?簡(jiǎn)單屬性:原子的、不可再分的。●?復(fù)合屬性:可細(xì)分為多個(gè)屬性部分,如name有first name和last name。或者家庭地址:北京市朝陽(yáng)區(qū)望京街道●?單值屬性:定義的屬性對(duì)于一個(gè)特定的實(shí)體都只有單獨(dú)的一個(gè)值。●?多值屬性:一個(gè)屬性可能對(duì)應(yīng)一組值。如員工的電話號(hào)碼:每個(gè)員工就可能有0、1或多個(gè)與之相對(duì)應(yīng)?!?NULL屬性:當(dāng)實(shí)體在某個(gè)屬性上沒(méi)有值或?qū)傩灾滴粗獣r(shí),使用NULL值?!?派生屬性:這類屬性的值可以從別的相關(guān)屬性或?qū)嶓w中派生(計(jì)算出來(lái))

【概念模型-E-R圖-聯(lián)系(2個(gè)實(shí)體)】

一對(duì)一聯(lián)系(1:1)定義:如果對(duì)于實(shí)體集A中的每一個(gè)實(shí)體,實(shí)體集B中至多有一個(gè)(也可以沒(méi)有)實(shí)體與之聯(lián)系,反之亦然,則稱實(shí)體集A與實(shí)體集B具有一對(duì)一聯(lián)系,記為1:1。一對(duì)多聯(lián)系(1:n)定義:如果對(duì)于實(shí)體集A中的每一個(gè)實(shí)體,實(shí)體集B中有n個(gè)實(shí)體(n20)與之聯(lián)系,反之,對(duì)于實(shí)體集B中的每一個(gè)實(shí)體,實(shí)體集A中至多只有一個(gè)實(shí)體與之聯(lián)系,則稱實(shí)體集A與實(shí)體集B有一對(duì)多聯(lián)系,記為1:n。多對(duì)多聯(lián)系(m:n)定義:如果對(duì)于實(shí)體集A中的每一個(gè)實(shí)體,實(shí)體集B中有n個(gè)實(shí)體(n20)與之聯(lián)系,反之,對(duì)于實(shí)體集B中的每一個(gè)實(shí)體,實(shí)體集A中也有m個(gè)實(shí)體(m20)與之聯(lián)系,則稱實(shí)體集A與實(shí)體B具有多對(duì)多聯(lián)系,記為m:n。

6.2.5 數(shù)據(jù)模型

層次模型(Hierarchical Model)網(wǎng)狀模型(Network Model)關(guān)系模型(Relational Model)面向?qū)ο竽P?Object Oriented Model)對(duì)象關(guān)系模型(Object Relational Model)

層次模型用樹(shù)形結(jié)構(gòu)來(lái)表示各類實(shí)體以及實(shí)體間的聯(lián)系層次模型只能表示1:n聯(lián)系,不能表示mn聯(lián)系。層次模型中的術(shù)語(yǔ):根結(jié)點(diǎn),雙親結(jié)點(diǎn),兄弟結(jié)點(diǎn),葉結(jié)點(diǎn)。層次模型兩個(gè)基本條件:有且只有一個(gè)結(jié)點(diǎn)沒(méi)有雙親結(jié)點(diǎn),這個(gè)結(jié)點(diǎn)稱為根結(jié)點(diǎn);根以外的其它結(jié)點(diǎn)有且只有一個(gè)雙親結(jié)點(diǎn)。

關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)采用關(guān)系模型作為數(shù)據(jù)的組織方式,以關(guān)系代數(shù)為數(shù)據(jù)基礎(chǔ),數(shù)據(jù)用二維表表示。大多數(shù)數(shù)據(jù)庫(kù)均為關(guān)系數(shù)據(jù)模型。優(yōu)點(diǎn):建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上;概念單一、結(jié)構(gòu)簡(jiǎn)單、清晰,用戶易懂易用,存取路徑對(duì)用戶透明從而數(shù)據(jù)獨(dú)立性、安全性好,簡(jiǎn)化數(shù)據(jù)庫(kù)開(kāi)發(fā)工作。缺點(diǎn):由于存取路徑透明,查詢效率往往不如非關(guān)系數(shù)據(jù)模型。?●?關(guān)系:一個(gè)關(guān)系對(duì)應(yīng)一張表(Relation);●?元組(Tuple):表中的一行即為一個(gè)元組;●?屬性(Attribute):表中的一列即為一個(gè)屬性;●?主碼(Key):唯一確定一個(gè)元組屬性集合;●?域(Domain):屬性的取值范圍;●?分量:元組中的一個(gè)屬性值;●?關(guān)系模式:對(duì)關(guān)系的描述基本形式,關(guān)系名 (屬性1,屬性2,...,屬性n)示例:學(xué)生(學(xué)號(hào),姓名,年齡,性別,系,年級(jí));●?關(guān)系的規(guī)范化理論-屬性的原子性,即屬性是不可再分,表中不再包含表同一關(guān)系中屬性唯一性;●?關(guān)系中元組唯一性關(guān)系中元組的有限性;●?關(guān)系中元組次序無(wú)關(guān)緊要;●?關(guān)系中屬性次序無(wú)關(guān)緊要

6.3 數(shù)據(jù)存儲(chǔ)與查詢

存儲(chǔ)管理器在數(shù)據(jù)庫(kù)系統(tǒng)中負(fù)責(zé)在數(shù)據(jù)庫(kù)中存儲(chǔ)的低層數(shù)據(jù)與應(yīng)用程序以及向系統(tǒng)提交的查詢之間提供接口的部件,負(fù)責(zé)數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)、檢索和更新。存儲(chǔ)管理器部件包括以下四個(gè): (1)權(quán)限及完整性管理器:檢查訪問(wèn)數(shù)據(jù)庫(kù)的用戶權(quán)限,檢測(cè)數(shù)據(jù)是否滿足完整性約束; (2)事務(wù)管理器:保證一旦發(fā)生故障,數(shù)據(jù)庫(kù)的一致性狀態(tài),以及并發(fā)事務(wù)執(zhí)行時(shí)不發(fā)生沖突(3)文件管理器:管理磁盤(pán)存儲(chǔ)空間的分配。 (4)緩沖區(qū)管理器:負(fù)責(zé)將數(shù)據(jù)從硬盤(pán)放入內(nèi)存,并決定哪些數(shù)據(jù)應(yīng)被緩沖區(qū)放入內(nèi)存查詢處理器其組件包括: DDL解釋器:解釋DDL語(yǔ)句并將其放入數(shù)據(jù)字典中; DML編譯器:將查詢語(yǔ)言中的DML語(yǔ)句翻譯為一個(gè)計(jì)算方案,包括一系列查詢計(jì)算引擎能理解的命令。

6.4 數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘基礎(chǔ)知識(shí)?

6.4.1 數(shù)據(jù)倉(cāng)庫(kù)

數(shù)據(jù)倉(cāng)庫(kù)四大特點(diǎn): (1)面向主題:按照一定的主題域進(jìn)行組織的; (2)集成的:數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)是在對(duì)原有分散的數(shù)據(jù)庫(kù)數(shù)據(jù)抽取、清理的基礎(chǔ)上經(jīng)過(guò)系統(tǒng)加工、匯總和整理得到的,必須消除源數(shù)據(jù)中的不一致性,以保證數(shù)據(jù)倉(cāng)庫(kù)內(nèi)的信息是關(guān)于整個(gè)企業(yè)的一致的全局信息。 (3)相對(duì)穩(wěn)定的:數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)主要供企業(yè)決策分析之用所涉及的數(shù)據(jù)操作主要是數(shù)據(jù)查詢,一旦某個(gè)數(shù)據(jù)進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)以后,一般情況下將被長(zhǎng)期保留,也就是數(shù)據(jù)倉(cāng)庫(kù)中一般有大量的查詢操作,但修改和刪除操作很少通常只需要定期的加載、刷新。 (4)反映歷史變化:數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)通常包含歷史信息系統(tǒng)記錄了企業(yè)從過(guò)去某一時(shí)點(diǎn)(如開(kāi)始應(yīng)用數(shù)據(jù)倉(cāng)庫(kù)的時(shí)點(diǎn))到目前的各個(gè)階段的信息,通過(guò)這些信息,可以對(duì)企業(yè)的發(fā)展歷程和未來(lái)趨勢(shì)做出定量分析和預(yù)測(cè)。

6.4.2 數(shù)據(jù)挖掘?

概念:是從大量數(shù)據(jù)中發(fā)現(xiàn)并提取隱藏在內(nèi)的,人們事先不知道的但可能有用的信息和知識(shí)的一種新技術(shù)。目的:幫助決策者尋找數(shù)據(jù)間潛在的關(guān)聯(lián),發(fā)現(xiàn)經(jīng)營(yíng)者被忽略的要素。數(shù)據(jù)挖掘技術(shù)涉及數(shù)據(jù)庫(kù)技術(shù)、人工智能技術(shù)、機(jī)器學(xué)習(xí)、統(tǒng)計(jì)分析等多種技術(shù)。數(shù)據(jù)挖掘和傳統(tǒng)分析方法的區(qū)別:數(shù)據(jù)挖掘是在沒(méi)有明確假設(shè)的前提下去挖掘信息,發(fā)現(xiàn)知識(shí)。其得到的信息應(yīng)具有事先未知、有效和可實(shí)用3個(gè)特征。數(shù)據(jù)挖掘的應(yīng)用過(guò)程:確定挖掘?qū)ο?準(zhǔn)備數(shù)據(jù)-建立模型-數(shù)據(jù)挖掘-結(jié)果分析-知識(shí)應(yīng)用。

數(shù)據(jù)挖掘分析方法: (1)關(guān)聯(lián)分析:關(guān)聯(lián)分析主要用于發(fā)現(xiàn)不同事件之間的關(guān)聯(lián)性,即一個(gè)事件發(fā)生的同時(shí),另一個(gè)事件也經(jīng)常發(fā)牛。 (2)序列分析:序列分析主要用于發(fā)現(xiàn)一定時(shí)間間隔內(nèi)接連發(fā)生的事件,這些事件構(gòu)成一個(gè)序列,發(fā)現(xiàn)的序列應(yīng)該具有普遍意義。 (3)分類分析:分類分析通過(guò)分析具有類別的樣本特點(diǎn),得到?jīng)Q定樣本屬于各種類別的規(guī)則或方法。分類分析時(shí)首先為每個(gè)記錄賦予一個(gè)標(biāo)記(一組具有不同特征的類別),即按標(biāo)記分類記錄,然后檢查這些標(biāo)定的記錄,描述出這些記錄的特征。 (4)聚類分析:聚類分析是根據(jù)“物以類聚”的原理,將本身沒(méi)有類別的樣本聚集成不同的組,并且對(duì)每個(gè)這樣的組進(jìn)行描述的過(guò)程。

數(shù)據(jù)挖掘算法(了解分類即可) :●?EM:在概率模型中尋找參數(shù)最大似然估計(jì)的算法;●?Apriori:先驗(yàn)算法是關(guān)聯(lián)規(guī)則學(xué)習(xí)的經(jīng)典算法之一;●?K-means:是非監(jiān)督學(xué)習(xí)中的聚類算法;●?SVM:中文名為支持向量機(jī),是常見(jiàn)的一種判別方法。在機(jī)器學(xué)習(xí)領(lǐng)域,是一個(gè)有監(jiān)督的學(xué)習(xí)模型,通常用來(lái)進(jìn)行模式識(shí)別、分類以及回歸分析;●?決策樹(shù):典型的分類算法。?

6.4.3?商業(yè)智能BI

BI系統(tǒng)主要包括數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析和數(shù)據(jù)展現(xiàn)四個(gè)主要階段建立數(shù)據(jù)倉(cāng)庫(kù)。

數(shù)據(jù)預(yù)處理是整合企業(yè)原始數(shù)據(jù)的第一步,它包括數(shù)據(jù)的抽取(Extraction)、轉(zhuǎn)換(Transformation)和加載(Load)三個(gè)過(guò)程(ETL過(guò)程);建立數(shù)據(jù)倉(cāng)庫(kù)則是處理海量數(shù)據(jù)的基礎(chǔ);數(shù)據(jù)分析是體現(xiàn)系統(tǒng)智能的關(guān)鍵,一般采用聯(lián)機(jī)分析處理(OLAP)和數(shù)據(jù)挖掘兩大技術(shù)。聯(lián)機(jī)分析理不僅進(jìn)行數(shù)據(jù)匯總/聚集,同時(shí)還提供切片、切塊、下鉆、上卷和旋轉(zhuǎn)等數(shù)據(jù)分析功能,用戶可以便地對(duì)海量數(shù)據(jù)進(jìn)行多維分析。數(shù)據(jù)挖掘的目標(biāo)則是挖掘數(shù)據(jù)背后隱藏的知識(shí),通過(guò)關(guān)聯(lián)分析、聚和分類等方法建立分析模型,預(yù)測(cè)企業(yè)未來(lái)發(fā)展趨勢(shì)和將要面臨的問(wèn)題;數(shù)據(jù)據(jù)展現(xiàn):在海量數(shù)據(jù)和分析手段增多的情況下,數(shù)據(jù)展現(xiàn)則主要保障系統(tǒng)分析結(jié)果的可視化。

第七章 關(guān)系數(shù)據(jù)庫(kù)

7.1 關(guān)系數(shù)據(jù)庫(kù)概述

關(guān)系模型采用單一的數(shù)據(jù)結(jié)構(gòu)一關(guān)系,來(lái)表示現(xiàn)實(shí)世界的實(shí)體以及實(shí)體間的聯(lián)系,對(duì)應(yīng)的邏輯結(jié)構(gòu)為二維表。候選碼(Candidate Key):若關(guān)系中的某一屬性或?qū)傩越M的值能唯一標(biāo)識(shí)一個(gè)元組,則稱該屬性或?qū)傩越M為候選碼。主碼(Primary Key):或稱主鍵,若一個(gè)關(guān)系有多個(gè)候選碼,則選定其中一個(gè)為主碼。主屬性(Primeattribute):包含在任何候選碼中的屬性稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性(NonPrime attribute)外碼(Foreignkey):如果關(guān)系模式R中的屬性或?qū)傩越M非該關(guān)系的碼,但它是其他關(guān)系的碼,那么該屬性集對(duì)關(guān)系模式R而言是外碼。全碼(AIl-key):關(guān)系模型的所有屬性組是這個(gè)關(guān)系模式的候選碼,稱為全碼。

7.2 關(guān)系代數(shù)

并:結(jié)果是兩張表中所有記錄數(shù)合并,相同記錄只顯示一次;交:結(jié)果是對(duì)長(zhǎng)表中相同的過(guò)錄;差:S1- S2 結(jié)果是S1表中有,而S2表中沒(méi)有的那些記錄。

笛卡爾積:S1*S2,產(chǎn)生的結(jié)果包括S1和S2的所有屬性列,并且S1中每條記錄依次和S2中所有記錄組合成一條記錄,最終屬性列為S1+S2屬性列,記錄數(shù)為S1*S2記錄數(shù);投影:實(shí)際是按條件選擇某關(guān)系模式中的某列,列也可以用數(shù)字表示;選擇:實(shí)際是按條件選擇某關(guān)系模式中的某條記錄。

自然連接的結(jié)果顯示全部的屬性列,但是相同屬性列只顯示一次,顯示兩個(gè)關(guān)系模式中屬性相同且值相同的記錄設(shè)有關(guān)系R、S如下左圖所示,自然連接結(jié)果如下右圖所示:

一般連接(連接)和等值連接:先做笛卡爾積,在其基礎(chǔ)上滿足連接條件,如下圖分別是選取RS笛卡爾積后條件第C行小于第E的數(shù)據(jù),R的第B行等于S的第B行數(shù)據(jù)

全外連接(FULLOUTERJOIN):關(guān)系RS進(jìn)行自然連接時(shí),把舍棄的元組也保存在結(jié)果關(guān)系中,在其他表的屬性上填NULL。左外連接(LEFTOUTERJOIN):關(guān)系RS進(jìn)行自然連接時(shí),只把左邊關(guān)系R中要舍棄的元組保留。右外連接:關(guān)系RS進(jìn)行自然連接時(shí),只把右邊關(guān)系S中要舍棄的元組保留

7.3 元組演算與域演算

把數(shù)理邏輯的謂詞演算引入到關(guān)系運(yùn)算中,就可得到以關(guān)系演算為基礎(chǔ)的運(yùn)算關(guān)系演算又可分為:●?元組關(guān)系演算(元組演算):以元組為變量●?域關(guān)系演算(域演算):以屬性(域)為變量

7.4 查詢優(yōu)化

【選擇操作的實(shí)現(xiàn)】

查詢方法: 簡(jiǎn)單的全表掃描方法:對(duì)查詢的基本表順序掃描,逐一檢查每個(gè)元組是否滿足選擇條件,把滿足條件的元組作為結(jié)果輸出。 對(duì)于小表,這種方法簡(jiǎn)單有效;對(duì)于大表,順序掃描十分費(fèi)時(shí),效率低。優(yōu)化方法:索引(或散列)掃描方法:如果選擇條件中的屬性上有索引(如hash索引),用索引掃描法通過(guò)索引先找到滿足條件的元組主鍵或元組指針,再通過(guò)元組指針直接在查詢的基本表中找到元組。

【連接操作的實(shí)現(xiàn)】 連接操作是查詢處理中最耗時(shí)的操作之一。

查詢方法: 嵌套循環(huán)方法:對(duì)外層循環(huán)R的每一個(gè)元組,檢索內(nèi)層循環(huán)S中的每一個(gè)元組,并檢查這兩個(gè)元組在連接屬性sno上是否相等,如果滿足連接條件,則串接后作為結(jié)果輸出,直到雙重循環(huán)結(jié)束。優(yōu)化方法: 排序-合并方法:適合連接的各表已經(jīng)有序的情況,步驟為: (1)先給各表排序; (2)取R表中第一個(gè)sno,依次掃描S表中具有相同sno的元組把它們連接起來(lái); (3)當(dāng)掃描到sno不相同的第一個(gè)元組時(shí),返回到R表掃描其下一個(gè)元組,再用其下一個(gè)元組去S表中查找相同sno的元組,重復(fù)這個(gè)過(guò)程。查詢優(yōu)化的目標(biāo):選擇有效策略,求得給定關(guān)系表達(dá)式的值,使得查詢代價(jià)最小。優(yōu)化準(zhǔn)則: (1)提早執(zhí)行選擇運(yùn)算,目的是減少中間結(jié)果 (2)合并乘積與選擇運(yùn)算為連接運(yùn)算,目的是避免掃描大的關(guān)系 (3)將投影運(yùn)算與其他運(yùn)算同時(shí)進(jìn)行,目的是避免重復(fù)掃描關(guān)系 (4)將投影運(yùn)算與二目運(yùn)算結(jié)合起來(lái),目的是減少掃描關(guān)系的次數(shù) (5)在執(zhí)行連接前對(duì)關(guān)系適當(dāng)?shù)念A(yù)處理,如索引連接法、排序合并法存儲(chǔ)公共子表達(dá)式,目的是只需檢索中間結(jié)果,不需重復(fù)計(jì)算。效率問(wèn)題 關(guān)系代數(shù)運(yùn)算的效率,歸根結(jié)底是看參與運(yùn)算的兩張表格的屬性列數(shù)和記錄數(shù)屬性列和記錄數(shù)越少,參與運(yùn)算的次數(shù)自然越少,效率就越高。

7.5 關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)?

給定一個(gè)X,能唯一確定一個(gè)Y,就稱X確定Y,或者說(shuō)Y依賴于x,例如Y=X*X函數(shù)。函數(shù)依賴又可擴(kuò)展以下兩種規(guī)則:(1)部分函數(shù)依賴:A可確定C,(A,B)也可確定C,(A,B)中的一部分 (即A) 可以確定C,稱為部分函數(shù)依賴。(2)傳遞函數(shù)依賴:當(dāng)A和B不等價(jià)時(shí),A可確定B,B可確定C,則A可確定C,是傳遞函數(shù)依賴;若A和B等價(jià),則不存在傳遞,直接就可確定C。

函數(shù)依賴的公理系統(tǒng)(Armstrong)設(shè)關(guān)系模式RU是關(guān)系模式R的屬性全集,F(xiàn)是關(guān)系模式R的一個(gè)函數(shù)依賴集。對(duì)于R來(lái)說(shuō)有以下的:

?【幾個(gè)比較重要的概念】

超鍵:能唯一標(biāo)識(shí)此表的屬性的組合;侯選鍵:超鍵中去掉冗余的屬性,剩余的屬性就是候選鍵;主鍵:任選一個(gè)候選鍵,即可作為主鍵;外鍵:其他表中的主鍵;主屬性:候選鍵內(nèi)的屬性為主屬性,其他屬性為非主屬性;實(shí)體完整性約束:即主鍵約束,主鍵值不能為空,也不能重復(fù);參照完整性約束:即外鍵約束,外鍵必須是其他表中已經(jīng)存在的主鍵的值或者為空;用戶自定義完整性約束:自定義表達(dá)式約束,如設(shè)定年齡屬性的值必須在0到150之間。

【第一范式1NF】●?關(guān)系中的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng)。通俗地說(shuō),第一范式就是表中不允許有小表的存在。比如,對(duì)于如下的員工表,就不屬于第一范式:

實(shí)例:用一個(gè)單一的關(guān)系模式學(xué)生來(lái)描述學(xué)校的教務(wù)系統(tǒng)學(xué)生(學(xué)號(hào),學(xué)生姓名,系號(hào),系主任姓名課程號(hào),成績(jī))依賴關(guān)系(學(xué)號(hào)->學(xué)生姓名,學(xué)號(hào)->系號(hào),系號(hào)->系主任姓名,學(xué)號(hào)->課程號(hào),(學(xué)號(hào),課程號(hào)) ->成績(jī))

【第二范式】●?如果關(guān)系R屬于1NF,且每一個(gè)非主屬性完全函數(shù)依賴于任何一個(gè)候選碼,則R屬于2NF。通俗地說(shuō),2NF就是在1NF的基礎(chǔ)上,表中的每一個(gè)非主屬性不會(huì)依賴復(fù)合主鍵中的某一個(gè)列。按照定義,上面的學(xué)生表就不滿足2NF,因?yàn)閷W(xué)號(hào)不能完全確定課程號(hào)和成績(jī)(每個(gè)學(xué)生可以選多門(mén)課)。

將學(xué)生表分解為:●?學(xué)生(學(xué)號(hào),學(xué)生姓名,系編號(hào),系名,系主任)●?選課(學(xué)號(hào),課程號(hào),成績(jī))●?每張表均屬于2NF。?

第二范式消除了非主屬性對(duì)主屬性的部分函數(shù)依賴

【第三范式】

●?在滿足1NF的基礎(chǔ)上,表中不存在非主屬性對(duì)碼的傳遞依賴; 繼續(xù)上面的實(shí)例,學(xué)生關(guān)系模式就不屬于3NF,因?yàn)閷W(xué)生無(wú)法直接決定系主任和系名,是由學(xué)號(hào)->系編號(hào),再由系編號(hào)->系主任,系編號(hào)->系名,因此存在非主屬性對(duì)主屬性的傳遞依賴

將學(xué)生表進(jìn)一步分解為: 學(xué)生(學(xué)號(hào),學(xué)生姓名,系編號(hào)) 系(系編號(hào),系名,系主任) 選課(學(xué)號(hào),課程號(hào),成績(jī)) 每張表都屬于3NF。

【BC范式BCNF】 是指在第三范式的基礎(chǔ)上進(jìn)一步消除主屬性對(duì)于碼的部分函數(shù)依賴和傳遞依賴。通俗的來(lái)說(shuō),就是在每一種情況下,每一個(gè)依賴的左邊決定因素都必然包含候選律,如下:

上圖中,候選鍵有兩種情況:組合鍵(S,T)或者(S,J),依賴集為(SJ-T,T一可知,STJ三個(gè)屬性都是主屬性,因此其達(dá)到了3NF(無(wú)非主屬性),然而,第二種情況,即(SJ)為候選鍵的時(shí)候,對(duì)于依賴T->J,T在這種情況不是候選鍵,即T-J的決定因素不包含任意候選碼,因此上圖不是BCNF。要使上圖關(guān)系模式轉(zhuǎn)換為BCNF也很簡(jiǎn)單,只需要將依賴T->J變?yōu)門(mén)S->J即可這樣其左邊決定因素就包含了候選鍵之一S?

7.6 模式分解

范式之間的轉(zhuǎn)換一般都是通過(guò)拆分屬性,即模式分解,將具有部分函數(shù)依賴和傳遞依賴的屬性分離出來(lái),來(lái)達(dá)到一步步優(yōu)化,一般分為以下兩種: (1)保持函數(shù)依賴分解對(duì)于關(guān)系模式R,有依賴集F,若對(duì)R進(jìn)行分解,分解出來(lái)的多個(gè)關(guān)系模式,保持原來(lái)的依賴集不變,則為保持函數(shù)依賴的分解。另外,注意要消除掉冗余依賴(如傳遞依賴)●?實(shí)例:設(shè)原關(guān)系模式R(A,B,C),依賴集F(A->B,B-C,A-C),將其分解為兩個(gè)關(guān)系模式R1(A,B)和R2(B,C),此時(shí)R1中保持依賴A->B,R2保持依賴B->C,說(shuō)明分解后的R1和R2是保持函數(shù)依賴的分解,因?yàn)锳->C這個(gè)函數(shù)依賴實(shí)際是一個(gè)幾余依賴,可以由前兩個(gè)依賴傳遞得到,因此不需要管。 無(wú)損分解:分解后的關(guān)系模式能夠還原出原關(guān)系模式,就是無(wú)損分解,不能還原就是有損。 當(dāng)分解為兩個(gè)關(guān)系模式,可以通過(guò)以下定理判斷是否無(wú)損分解定理:如果R的分解為p=R1,R2),F(xiàn)為R所滿足的函數(shù)依賴集合,分解p具有無(wú)損連接性的充分必要條件是R1nR2->(R1-R2)或者R1nR2->(R2-R1)。 當(dāng)分解為三個(gè)及以上關(guān)系模式時(shí),可以通過(guò)表格法求解,如下

第八章 數(shù)據(jù)庫(kù)SQL語(yǔ)言

8.1 SQL語(yǔ)言概述

數(shù)據(jù)定義語(yǔ)言DDL:數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)庫(kù)對(duì)象定義的語(yǔ)言,由create、alter、drop三個(gè)語(yǔ)法組成。數(shù)據(jù)操縱語(yǔ)言DML: 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的基本操作,包含select、update、insert、delete等語(yǔ)法。數(shù)據(jù)庫(kù)語(yǔ)言的分類●?作為獨(dú)立語(yǔ)言使用;●?嵌入到高級(jí)語(yǔ)言中使用:嵌入式SQL、宿主語(yǔ)言。SQL由以下幾個(gè)部分組成: (1)數(shù)據(jù)定義語(yǔ)言。SQL DDL提供定義關(guān)系模式和視圖、刪除關(guān)系和視圖修改關(guān)系模式的命令。 (2)交互式數(shù)據(jù)操縱語(yǔ)言。SQLDML 提供查詢、插入、刪除和修改的命令。 (3)事務(wù)控制。SQL 提供定義事務(wù)開(kāi)始和結(jié)束的命令。 (4)嵌入式SQL和動(dòng)態(tài)SQL。用于嵌入到某種通用的高級(jí)語(yǔ)言(C、C+ +、JavaPL/l、COBOL和VB等)中混合編程。其中,SQL負(fù)責(zé)操縱數(shù)據(jù)庫(kù),高級(jí)語(yǔ)言負(fù)責(zé)控制程序流程。 (5)完整性。SQLDDL 包括定義數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須滿足的完整性約束條件的命令,對(duì)于破壞完整性約束條件的更新將被禁止。 (6)權(quán)限管理。SQLDDL 中包括說(shuō)明對(duì)關(guān)系和視圖的訪問(wèn)權(quán)限。

8.2 數(shù)據(jù)庫(kù)定義

8.2.1 創(chuàng)建表(create table)

CREATE TABLE<表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件] ???????????????????????????????????[,<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]]... [,<表級(jí)完整性約束條件>]) ;

●?列級(jí)完整性約束條件有 NULL (空)和UNTQUE(取值唯一)。 ●?表級(jí)完整性約束條件有 primary key 和 foreign key 等。

create table stu(sno int not null unique,

sex char(6),

departnum int,

sname char(10),

primary key(sno),

foreign key(departnum) references depart (departnum));

8.2.2 修改表 (alter table)

ALTER TABLE<表名>[ADD<新列名<數(shù)據(jù)類型>[完整性約束條件]] [DROP<完整性約束名>] [MODIFY<列名><數(shù)據(jù)類型>];?

alter table stu add telephone char(11);

alter table stu modify sno char(6);

8.2.3 刪除表 (drop table)

DROP TABLE <表名>

drop table stu;

8.2.4 索引

【索引的作用】 (1)通過(guò)創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。 (2)可以大大加快數(shù)據(jù)檢索速度。 (3)可以加速表與表之間的連接,這一點(diǎn)在實(shí)現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。 (4)在使用ORDERBY和GROUP BY子句中進(jìn)行檢索數(shù)據(jù)時(shí),可以顯著減少查中分組和排序的時(shí)間。 (5)使用索引可以在檢索數(shù)據(jù)的過(guò)程中使用優(yōu)化隱藏器,提高系統(tǒng)性能。

索引分為聚集索引和非聚集索引。聚集索引是指索引表中索引項(xiàng)的順序與表中記錄的物理順序一致的索引。

創(chuàng)建索引 CREATE? [UNIQUE] [CLUSTER] INDEX <索引名>ON<表名>(<列名>[<次序>][,<列名>[次序>]]... ) ;

●?次序:可選ASC (升序) 或DSC (降序) ,默認(rèn)升序?!?UNIQUE:表明此索引的每一個(gè)索引值只對(duì)應(yīng)唯一的數(shù)據(jù)記錄?!?CLUSTER:表明要建立的索引是聚簇索引,索引項(xiàng)的順序是與表中記錄的物理順序一致的索引組織。

刪除索引 DROPINDEX<索引名>

8.2.5 視圖

視圖不是真實(shí)存在的基本表,而是一個(gè)虛擬表,視圖所對(duì)應(yīng)的數(shù)據(jù)并不實(shí)際地以視圖結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)庫(kù)中,而是存儲(chǔ)在視圖所引用的表中。使用視圖的優(yōu)點(diǎn)和作用如下: (1)可以使視圖集中數(shù)據(jù)、簡(jiǎn)化和定制不同用戶對(duì)數(shù)據(jù)庫(kù)的不同數(shù)據(jù)要求。 (2)使用視圖可以屏蔽數(shù)據(jù)的復(fù)雜性,用戶不必了解數(shù)據(jù)庫(kù)的結(jié)構(gòu),就可以方便地使用和管理數(shù)據(jù)簡(jiǎn)化數(shù)據(jù)權(quán)限管理和重新組織數(shù)據(jù)以便輸出到其他應(yīng)用程序中。 (3)視圖可以使用戶只關(guān)心他感興趣的某些特定數(shù)據(jù)和所負(fù)責(zé)的特定任務(wù),而那些不需要的或者無(wú)用的數(shù)據(jù)則不在視圖中顯示。 (4)視圖大大地簡(jiǎn)化了用戶對(duì)數(shù)據(jù)的操作 (5)視圖可以讓不同的用戶以不同的方式看到不同或者相同的數(shù)據(jù)集。 (6)在某些情況下,由于表中數(shù)據(jù)量太大因此在表的設(shè)計(jì)時(shí)常將表進(jìn)行水平或者垂直分割,但表的結(jié)構(gòu)的變化對(duì)應(yīng)用程序產(chǎn)生不良的影響。 (7)視圖提供了一個(gè)簡(jiǎn)單而有效的安全機(jī)制。

創(chuàng)建視圖

CREATE VIEW 視圖名(列表名) AS?SELECT 查詢子句[WITH CHECK OPTION];

子查詢可以是任意復(fù)雜的 select 語(yǔ)句,但通常不允許含有 order by 和distinct。ewith check option 表示執(zhí)行 update、insert、delete 操作時(shí)保證更新、插入、刪除的行滿足視圖定義中的條件?!敖M成視圖的屬性列名或者全部省略或者全部指定。如果省略屬性列名,則隱含該視圖由 select子查詢目標(biāo)列的主屬性組成。

create view cs-stu as select * from stu where depart='cs' with check option;

刪除視圖?

drop view 視圖名

drop view cs-stu;

8.3 數(shù)據(jù)操作

8.3.1 查詢語(yǔ)句格式

SELECT [ALL | DISTINCT] <目標(biāo)列表達(dá)式> [目標(biāo)列表達(dá)式>].. FROM <表名或視圖名> [,<表名或視圖名>] [WHERE<條件表達(dá)式>] [GROUPBY<列名1>[HAVING<條件表達(dá)式>]] [ORDER BY<列名2>[ASC|DESC]...]

SOL查詢中的子句順序?yàn)镾ELECT、FROM、WHERE、GROUP BY、HAVING 和ORDER BY其中,SELECT、FROM 是必須的,HAVING條件子只能與GROUP BY搭配起來(lái)使用。 (1)SELECT子句對(duì)應(yīng)的是關(guān)系代數(shù)中的投影運(yùn)算,用來(lái)列出查詢結(jié)果中的屬性。其輸出可以是列名表達(dá)式、集函數(shù)(AVG、COUNT、MAX、MIN、SUM),DISTINCT選項(xiàng)可以保證查詢的結(jié)果集中不存在重復(fù)元組。 (2)FROM子句對(duì)應(yīng)的是關(guān)系代數(shù)中的笛卡兒積,它列出的是表達(dá)式求值過(guò)程中需掃描的關(guān)系,即在FROM子句中出現(xiàn)多個(gè)基本表或視圖時(shí),系統(tǒng)首先執(zhí)行笛卡兒積操作。 (3)WHERE子句對(duì)應(yīng)的是關(guān)系代數(shù)中的選擇謂詞。WHERE 子句的條件表達(dá)式中可以使用的運(yùn)算符如表所示。簡(jiǎn)單查詢:只涉及一張表。查詢計(jì)算機(jī)系學(xué)生的學(xué)號(hào)和姓名。 select sno,sname from stu where depart='CS‘; 連接查詢:查詢涉及兩個(gè)以上的表。查詢選修了課程號(hào)為C1的學(xué)生號(hào)和學(xué)生姓名。 select sno,sname from SSC where S.sno=SCsno and SCcno='C1'; 子查詢:也稱為嵌套查詢,是指一個(gè)select-from-where查詢塊可以嵌入另一個(gè)查詢塊之中,SQL中允許多重嵌套。查詢選修了課程號(hào)為C1的學(xué)生號(hào)和學(xué)生姓名。? select sno,sname from S where sno in (select sno from SC where cno=’ C1');

聚集函數(shù):是以一個(gè)值的集合為輸入,返回單個(gè)值的函數(shù),SQL提供的聚集函數(shù)如下:

使用ANY和ALL謂詞必須同時(shí)使用比較運(yùn)算符用聚集函數(shù)實(shí)現(xiàn)子查詢通常比直接用ALL或ANY查詢效率更高,二者等價(jià)轉(zhuǎn)換如下:

8.3.2 分組查詢

●?group by<列名1>[having <條件表達(dá)式>];●?group by 按某一列分組,一般只能select分組的列以及使用聚集函數(shù)●?在group by子句后面加一個(gè)having子句,對(duì)分組設(shè)置過(guò)濾條件,可以使用聚集函數(shù),注意:●?空值在任何聚集操作中都會(huì)被忽視,如求和、求平均值和計(jì)數(shù)都沒(méi)有影響,如count(*)是某個(gè)關(guān)系中所有元組數(shù)組之和,但count(A)卻是A屬性非空的元組個(gè)數(shù)之和?!?NULL值可以看做分組屬性中的一個(gè)一般的值,例如,在select A,avg(B) from R中,當(dāng)A的屬性值為空時(shí),就會(huì)統(tǒng)計(jì)A=NULL的所有元組中B的均值?!?查找訂單總金額小于2000的客戶:

select customer, sum(orderPrice) from orders group by customer having sum(orderPrice) <2000;

8.3.3?其他操作

更名操作(as子句: ld name as new-name既可以出現(xiàn)在select子句中,也可以出現(xiàn)在from子句中select sname as 姓名, sage as 年 from S where SD=' CS';字符串操作作對(duì)于字符串進(jìn)行的最通用的操作時(shí)使用操作符like的模式匹配,使用兩個(gè)特殊的字符描述: %:匹配任意字符串 _:匹配任意一個(gè)字符模式是大小寫(xiě)敏感的,例如zhang%,mary_ 等。 select sname from S where saddress like '%張江%';集合操作:在關(guān)系代數(shù)中用集合的并、交、差來(lái)組合關(guān)系,SQL提供了對(duì)應(yīng)的操作,但是查詢的結(jié)果必須具有相同的屬性和類型列表。保留字union、intersect、 except分別對(duì)應(yīng)并、交、差;查詢選修了180101號(hào)或180102號(hào)課程或二者都選修了的學(xué)生學(xué)號(hào)、課程號(hào)和成績(jī)。 (SELECT學(xué)號(hào)課程號(hào),成績(jī) FROM學(xué)習(xí)WHERE 課程號(hào)=180101)UNION (SELECT學(xué)號(hào)課程號(hào)成績(jī) FROM學(xué)習(xí)WHERE 課程號(hào)=180102)●?UNION運(yùn)算自動(dòng)去除重復(fù)。如果想保留所有的重復(fù),則必須用UNION ALL代替UNION,目查詢結(jié)果中出現(xiàn)的重復(fù)元組數(shù)等于兩個(gè)集合中出現(xiàn)的重復(fù)元組數(shù)的和。查詢同時(shí)選修了180101和180102號(hào)課程的學(xué)生學(xué)號(hào)、課程號(hào)和成績(jī)。 (SELECT學(xué)號(hào),課程號(hào),成績(jī) FROM學(xué)習(xí) WHERE 課程號(hào)=180101) INTERSECT (SELECT學(xué)號(hào)課程號(hào),成績(jī) FROM學(xué)習(xí) WHERE 課程號(hào)=180102)●?INTERSECT運(yùn)算自動(dòng)去除重復(fù),如果想保留所有的重復(fù),必須用INTERSECT ALL代替●?INTERSECT結(jié)果中出現(xiàn)的重復(fù)元組數(shù)等于兩集合出現(xiàn)的重復(fù)元組數(shù)里較少的那個(gè)。查詢選修了180101號(hào)課程的學(xué)生中沒(méi)有選修180102號(hào)課程的學(xué)生學(xué)號(hào)、課程號(hào)和成績(jī)(SELECT學(xué)號(hào)課程號(hào),成績(jī)FROM學(xué)習(xí)WHERE課程號(hào)=180101)EXCEPT (SELECT學(xué)號(hào)課程號(hào),成績(jī) FROM學(xué)習(xí)WHERE 課程號(hào)=180102)●?EXCEPT運(yùn)算自動(dòng)去除重復(fù),如果想保留所有的重復(fù),必須用EXCEPT ALL代替EXCEPT,結(jié)果中出現(xiàn)的重復(fù)元組數(shù)等于兩集合出現(xiàn)的重復(fù)元組數(shù)之差(前提是差是正值)

SQL對(duì)視圖更新必須遵循以下規(guī)則: (1)從多個(gè)基本表通過(guò)連結(jié)操作導(dǎo)出的視圖不允許更新。 (2)對(duì)使用了分組、集函數(shù)操作的視圖則不允許進(jìn)行更新操作。 (3)如果視圖是從單個(gè)基本表通過(guò)投影、選取操作導(dǎo)出的則允許進(jìn)行更新操作,且語(yǔ)法同基本表?。

和過(guò)程定義不同的是Create view子句會(huì)在數(shù)據(jù)庫(kù)中建立視圖定義,該視圖定義會(huì)一直保存,直到執(zhí)行drop view 命令。但是,with子句提供了定義一個(gè)臨時(shí)視圖的方法,該定義只對(duì)with子句出現(xiàn)的那條查詢有效。插入insert INSERTINTO 表名稱 VALUES(值1值2,....)INSERTINTO table name(列1,列2...) VALUES (值1, 值2....)INSERT INTO Persons VALUES (GatesBill,Xuanwumen 10Beijing)INSERT INTO Persons (LastName, Address) VALUES (WilsonChamps-Elysees’)刪除delete DELETE FROM 表名稱WHERE 列名稱=值DELETE FROM Person WHERE LastName=Wilson'更新update UPDATE 表名稱SET 列名稱=新值WHERE列名稱=某值UPDATE Person SET FirstName =Fred' WHERE LastName = Wilson'

8.3.4?約束

主鍵約束primary key完整性約束條件作用的對(duì)象有關(guān)系、元組和列

完整性控制具有的功能:定義功能、檢測(cè)功能和處理功能。檢查是否違背完整性約束的時(shí)機(jī)有兩種: 在一條語(yǔ)句執(zhí)行完后立即檢查稱為立即執(zhí)行約束;需要延到整個(gè)事務(wù)執(zhí)行完后再檢查稱為延遲執(zhí)行約束。實(shí)體完整性:關(guān)系中只能由一個(gè)主鍵,聲明主鍵有兩種方法;屬性類型后加primary key 保留字;在屬性列表的最后增加一行primary key(屬性或?qū)傩越M)?

外鍵約束foreign key 參照完整性定義格式: foreign key(屬性名)references 表名(屬性)[on delete cascade set nullj; references指明外鍵對(duì)應(yīng)于哪個(gè)表的主鍵; on delete cascade指明刪除被參照關(guān)系的元組時(shí),同時(shí)刪除參照關(guān)系中的元組: set null表示空值。?

屬性值上的約束,屬性值上的約束通過(guò)下面關(guān)鍵字進(jìn)行 not null:不允許空值 unique:唯一值 check:屬性值要滿足指定條件?

create table students (sno char(8)not null unique,

sname char(10),

sage int,

sdept char(20),

primary key(sno),

foreign key(sdept) references D(dept),

check(sage >=15 and sage <= 22))

8.4 數(shù)據(jù)授權(quán)

8.4.1 授權(quán)grant

GRANT<權(quán)限>[<權(quán)限>]... [ON<對(duì)象類型><對(duì)象名>)TO<用戶>[,<用戶]>]...[WITH GRANT OPTION]

若指定了WITH GRANT OPTION子句,那么獲得了權(quán)限的用戶還可以將權(quán)限賦給其他用戶: 接受權(quán)限的用戶可以是單個(gè)或多個(gè)具體的用戶,PUBLIC參數(shù)可將權(quán)限賦給全體用戶。不同類型的操作對(duì)象有不同的操作權(quán)限,常見(jiàn)的操作權(quán)限如表所示。

grant all privileges on table S,PJ to user1, user2;

grant insert on table S to user1 with grant option;

8.4.2 收回權(quán)限r(nóng)evoke

REVOKE<權(quán)限>[,<權(quán)限>]... [ON<對(duì)象類型><對(duì)象名>]FROM<用戶>[,<用戶]>]... ;

revoke all privileges on table S,PJ from user1,user2;revoke select on table S from user1;

8.5 觸發(fā)器

觸發(fā)器和存儲(chǔ)過(guò)程●?觸發(fā)器trigger是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā)?!?觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等;●?觸發(fā)器與存儲(chǔ)過(guò)程的唯一區(qū)別是觸發(fā)器不能執(zhí)行execute語(yǔ)句調(diào)用,而是在用戶執(zhí)行transact-SQl語(yǔ)句時(shí)自動(dòng)觸發(fā)執(zhí)行?!?存儲(chǔ)過(guò)程:是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。觸發(fā)器為數(shù)據(jù)庫(kù)對(duì)象,當(dāng)創(chuàng)建一個(gè)觸發(fā)器時(shí)必須指定: (1)名稱; (2)在其上定義觸發(fā)器的表; (3)觸發(fā)器將何時(shí)激發(fā); (4)指明觸發(fā)器執(zhí)行時(shí)應(yīng)做的動(dòng)作。觸發(fā)動(dòng)作實(shí)際上是一系列SQL語(yǔ)句,可以有兩種方式: (1)對(duì)被事件影響的每一行(FOR EACH ROW)-每一元組執(zhí)行觸發(fā)過(guò)程,稱為行級(jí)觸發(fā)器。(2)對(duì)整個(gè)事件只執(zhí)行一次觸發(fā)過(guò)程(FOREACHSTATEMENT),稱為語(yǔ)級(jí)觸發(fā)器。該方式是觸發(fā)器的默認(rèn)方式。觸發(fā)器的定義包括兩個(gè)方面:指明觸發(fā)器的觸發(fā)事件,指明觸發(fā)器的執(zhí)行動(dòng)作。

創(chuàng)建觸發(fā)器: (1)BEFORE:指示DBMS在執(zhí)行觸發(fā)語(yǔ)之前激發(fā)觸發(fā)器 (2)AFTER:指示DBMS在執(zhí)行觸發(fā)語(yǔ)之后激發(fā)觸發(fā)器。 (3)DELETE:每當(dāng)一個(gè)DELETE語(yǔ)從表中刪除一行時(shí)激發(fā)觸發(fā)器。 (4)INSERT:每當(dāng)一個(gè)時(shí)SERT 語(yǔ)句向表中插入一行時(shí)激發(fā)觸發(fā)器 (5)UPDATE:每當(dāng)UPDATE 語(yǔ)修改由OF子指定的列值時(shí),激發(fā)觸發(fā)器。如果忽略O(shè)F子,每當(dāng)UDPATE 語(yǔ)修改表的任何列值時(shí)DBMS都將激發(fā)觸發(fā)器 (6)REFERENCING<臨時(shí)視圖名>:指定臨時(shí)視圖的別名。在觸發(fā)器運(yùn)行過(guò)程中,系統(tǒng)會(huì)生成兩個(gè)臨時(shí)視圖,分別存放被更新值 (舊值)和更新后的值(新值》。對(duì)于行級(jí)觸發(fā)器,默認(rèn)臨時(shí)視圖名分別是OLD 和NEW (oracle,在MS中,為Deleted,Inserted) ;對(duì)于語(yǔ)句級(jí)觸發(fā)器,默認(rèn)臨時(shí)視圖名分別是OLD-TABLE和NEW-TABLE。一旦觸發(fā)器運(yùn)行結(jié)束,臨時(shí)視圖就不在。 (7)WHEN<觸發(fā)條件>:指定觸發(fā)器的觸發(fā)條件。當(dāng)滿足觸發(fā)條件時(shí),DBMS才激發(fā)觸發(fā)器。觸發(fā)條件中必須包含臨時(shí)視圖名,不包含查詢。

CREATE TRIGGER<觸發(fā)器名>LBEFORE |?AFTER)([DELETE |?INSERT | UPDATEOF [列名清單]])ON表名 [REFERENCING<臨時(shí)視圖名>][WHEN<觸發(fā)條件>] BEGIN <觸發(fā)動(dòng)作> END[觸發(fā)器名]

【修改觸發(fā)器】 ALTER TRIGGER<觸發(fā)器名> [(BEFORE | AFTER]([DELETE | INSERTIUPDATEOF[列名清單]]) ON表名 | 視圖名 AS BEGIN ????????要執(zhí)行的SQL語(yǔ)句 END

【刪除觸發(fā)器】 drop trigger trigger name

8.6 嵌入式SQL?

將SQL語(yǔ)言嵌入到高級(jí)程序設(shè)計(jì)語(yǔ)言中使用 1.區(qū)分主語(yǔ)言語(yǔ)句與SQL 語(yǔ)句:●?為了區(qū)分主語(yǔ)言語(yǔ)句與SQL 語(yǔ)句,需要在所有的SQl語(yǔ)句前加前綴EXEC SQL,而SQL的結(jié)束標(biāo)志隨主語(yǔ)言的不同而不同●?例如,PL/1和C語(yǔ)言的引用格式為: EXEC SQLSQL 語(yǔ)句>;●?又如,COBOL語(yǔ)言的引用格式為: EXEC SQLEND-EXEC。 2.主語(yǔ)言工作單元與數(shù)據(jù)庫(kù)工作單元通信: 1)SQL 通信區(qū)SQL通信區(qū)向主語(yǔ)言傳遞SQL 語(yǔ)句執(zhí)行的狀態(tài)信息使主語(yǔ)言能夠根據(jù)此信息控制程序流程。 2)主變量主變量也稱共享變量。主語(yǔ)言向SQL語(yǔ)句提供參數(shù)主要通過(guò)主變量,主變量由主語(yǔ)言的程序定義,并用SQL的DECLARE語(yǔ)句說(shuō)明。例如在C語(yǔ)言中可用如下形式說(shuō)明主變量【游標(biāo)】 一條SQL 語(yǔ)句可產(chǎn)生或處理多條記錄。而主語(yǔ)言是面向記錄的,一組主變SQL 語(yǔ)言是面向集合的量一次只能放一條記錄,所以,引入游標(biāo),i通過(guò)移動(dòng)游標(biāo)指針來(lái)決定獲取哪一條記錄。與游標(biāo)相關(guān)的SQL語(yǔ)句有四條: (1)定義游標(biāo),格式如下 EXEC SOL DECLARE <游標(biāo)名> CURSOR FOR ? ? ? ? ? END EXEC 這是一條說(shuō)明性語(yǔ)句,定義中的 SELECT 語(yǔ)句并不立即執(zhí)行。 (2) 打開(kāi)游標(biāo),格式如下: EXEC SQL OPEN <游標(biāo)名> END EXEC 該語(yǔ)句執(zhí)行游標(biāo)定義中的 SELECT 語(yǔ)句,同時(shí)游標(biāo)處于活動(dòng)狀況。游標(biāo)是一個(gè)指針,此時(shí)指向查詢結(jié)里的第一行之前。 (3)推進(jìn)游標(biāo),格式如下 EXEC SQLFETCH FROM<游標(biāo)名>INTO<變量表>ENDEXEC該語(yǔ)句使用時(shí),游標(biāo)推進(jìn)一行,并把游標(biāo)指向的行(稱為當(dāng)前行)中的值取出,送到共享變量中。變量表由用逗號(hào)分開(kāi)的共享變量組成。該語(yǔ)句常置于宿主語(yǔ)言程序的循環(huán)結(jié)構(gòu)中。 (4)關(guān)閉游標(biāo),格式如下:EXEC SQLCLOSE<游標(biāo)名>END EXEC該語(yǔ)句關(guān)閉游標(biāo),使它不再和查詢結(jié)果相聯(lián)系。關(guān)閉了的游標(biāo),可以再次打開(kāi),與新的查詢結(jié)果相聯(lián)系。

第九章 非關(guān)系型數(shù)據(jù)庫(kù)NOSQL

9.1 概述

傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付Web 2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的Web2.0純動(dòng)態(tài)網(wǎng)站方面已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,主要包括以下幾個(gè)方面。 1)對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫(xiě)的需求; 2)對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求; 3)對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求。

9.2 理論基礎(chǔ)

?CAP原則又稱CAP定理,指的是在一個(gè)分布式系統(tǒng)中,Consistency(一致性)、Availability (可用性)、Partition tolerance (分區(qū)容錯(cuò)性),三者最多只能得其二。一致性(C): 在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時(shí)刻是否同樣的值。 (等同于所有節(jié)點(diǎn)訪問(wèn)同一份最新的數(shù)據(jù)副本)可用性 (A): 在集群中一部分節(jié)點(diǎn)故障后,集群整體是否還能響應(yīng)客戶端的讀寫(xiě)請(qǐng)求。(對(duì)數(shù)據(jù)更新具備高可用性)分區(qū)容忍性(P):以實(shí)際效果而言,分區(qū)相當(dāng)于對(duì)通信的時(shí)限要求。系統(tǒng)如果不能在時(shí)限內(nèi)達(dá)成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況,必須就當(dāng)前操作在C和A之間做出選擇。由于CAP 理論的存在,為了提高性能,出現(xiàn)了ACID 的一種變種BASE: Basically Available(基本可用),Soft state (軟狀態(tài)) 和 Eventually consistent (最終一致性)。Base理論核心思想是:既然無(wú)法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性。基本可用:系統(tǒng)出現(xiàn)了不可預(yù)知的故障,但相比較于正常系統(tǒng)還是能用的。軟狀態(tài):允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該狀態(tài)不影響系統(tǒng)的整體可用性,即允許系統(tǒng)在多個(gè)不同節(jié)點(diǎn)的數(shù)據(jù)副本存在數(shù)據(jù)延時(shí)。最終一致性:系統(tǒng)能夠保證在沒(méi)有其他新的更新操作的情況下,數(shù)據(jù)最終一定能夠達(dá)到一致的狀態(tài),因此所有客戶端對(duì)系統(tǒng)的數(shù)據(jù)訪問(wèn)最終都能夠獲取到最新的值。具體地說(shuō),如果選擇了CP (一致性和分區(qū)容忍性),那么就要考慮ACID 理論如果選擇了AP (可用性和分區(qū)容忍性)那么就要考慮BASE 系統(tǒng)。如果選擇了CA(一致性和可用性),那么在網(wǎng)絡(luò)發(fā)生分區(qū)的時(shí)候,將不能進(jìn)行完整的操作。

9.3 分區(qū)方法

(1)內(nèi)存緩存:緩存技術(shù)可以看成一種分區(qū)。內(nèi)存中的數(shù)據(jù)庫(kù)系統(tǒng)將使用頻率最高的數(shù)據(jù)復(fù)制到緩存中,加快了數(shù)據(jù)給用戶傳遞的速度,同時(shí)也大大減輕了數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān)。 (2)集群:數(shù)據(jù)庫(kù)服務(wù)器集群在為用戶提供服務(wù)時(shí)的透明性(用戶感覺(jué)數(shù)據(jù)像是在同一個(gè)地2是另外一個(gè)對(duì)數(shù)據(jù)進(jìn)行分區(qū)的方法。 (3)讀寫(xiě)分離: 指定一臺(tái)或多臺(tái)主服務(wù)器,所有或部分的寫(xiě)操作被送至此,同時(shí)再設(shè)一定數(shù)量的副本服務(wù)器用以滿足讀請(qǐng)求。 (4)范圍分割技術(shù)/分片(sharding): 指對(duì)數(shù)據(jù)按照如下方式進(jìn)行分區(qū)操作,即對(duì)數(shù)據(jù)的請(qǐng)求和更新在同一個(gè)結(jié)點(diǎn)上,并且對(duì)于分布在不同服務(wù)器上的數(shù)據(jù)存儲(chǔ)和下載的量大致相同。

9.4 存儲(chǔ)分布

行存儲(chǔ)和列存儲(chǔ):兩者之間的主要區(qū)別在于,行存儲(chǔ)將每條記錄的所有字段的數(shù)據(jù)聚合存儲(chǔ)而列存儲(chǔ)將所有記錄中相同字段的數(shù)據(jù)聚合存儲(chǔ)。行存儲(chǔ)主要適用于OLTP,或者更新操作,尤其是插入、刪除操作頻繁的場(chǎng)合: 而列存儲(chǔ)主要適用于OLAP,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘等查詢密集型應(yīng)用。帶有局部性群組的列存儲(chǔ):是指根據(jù)需要將原來(lái)不存儲(chǔ)在一起的數(shù)據(jù),以列族為單位存儲(chǔ)至單獨(dú)的字表中。如用戶對(duì)網(wǎng)站排名、語(yǔ)言等分析信息感興趣,那么可以將這些列族放在單獨(dú)的子表減少無(wú)用信息讀取,改善存取效率。LSM-Tree:日志結(jié)構(gòu)合并樹(shù),與前面介紹的存儲(chǔ)結(jié)構(gòu)有所不同,前面的存儲(chǔ)結(jié)構(gòu)在描述如何序列化邏輯數(shù)據(jù)結(jié)構(gòu),而LSM-Tree 描述的則是為了滿足高效、高性能、安全地讀寫(xiě)的要求,如何有效地利用內(nèi)存和磁盤(pán)存儲(chǔ)。主要用于解決日志記錄索引的問(wèn)題

9.5?查詢模型

結(jié)合SQL 數(shù)據(jù)庫(kù):一個(gè)最直接的方式是通過(guò)將NOSQL 數(shù)據(jù)庫(kù)拷貝到關(guān)系數(shù)據(jù)庫(kù)或者文本數(shù)據(jù)庫(kù)來(lái)提供查詢能方。分散/集合本地搜索:一些NOSQL數(shù)據(jù)庫(kù)提供本地?cái)?shù)據(jù)庫(kù)內(nèi)的索引和查詢處理機(jī)制。在這種情況下,我們可以讓查詢處理器將查詢廣播到DHT(分散哈希表)中的所有節(jié)點(diǎn),在每個(gè)節(jié)點(diǎn)上將會(huì)執(zhí)行查詢,并將結(jié)果送回到查詢處理器,然后查詢處理器將結(jié)果聚集成一個(gè)單一響應(yīng)。分布式B十樹(shù):其基本思路是為了定位B+樹(shù)的根節(jié)點(diǎn)哈希要搜索的屬性。根節(jié)點(diǎn)的“值”包含其孩子節(jié)點(diǎn)的ID。前綴哈希表/分布式Trie:前綴哈希表 (Prefix Hash Table, PHT,又名分布式Trie) 目的是一個(gè)樹(shù)形數(shù)據(jù)結(jié)構(gòu)。在這個(gè)樹(shù)形結(jié)構(gòu)中,從根節(jié)點(diǎn)到葉子的每一條路徑上均包含了鍵值的前綴,并且每個(gè)Trie中的節(jié)點(diǎn)都包含了它是誰(shuí)的前綴的所有數(shù)據(jù)。

9.6 存儲(chǔ)模式

其他存儲(chǔ)模式: (1)多值數(shù)據(jù)庫(kù):是分布式數(shù)據(jù)庫(kù)系統(tǒng)的重要分支。它速度快,體積小,比關(guān)系數(shù)據(jù)庫(kù)便宜,很快得到了認(rèn)可。它提供了一個(gè)通用的數(shù)據(jù)集成與訪問(wèn)平臺(tái),屏蔽了現(xiàn)有各數(shù)據(jù)庫(kù)系統(tǒng)不同的訪問(wèn)方法和用戶界面,給用戶呈現(xiàn)出一個(gè)訪問(wèn)多種數(shù)據(jù)庫(kù)的公共接口。多值數(shù)據(jù)庫(kù)系統(tǒng)使用的多個(gè)異構(gòu)的數(shù)據(jù)源之間可以共享它們相互依賴的數(shù)據(jù),并具有相互操作的能力。常見(jiàn)的多值數(shù)據(jù)庫(kù)有Rocket U2, Extensible Storage Engin (ESE/NT)、OpenInsight 和OpenQM等。 (2)時(shí)間序列與流數(shù)據(jù)庫(kù):時(shí)間序列數(shù)據(jù)庫(kù)是指具有處理時(shí)間序列數(shù)據(jù),能對(duì)時(shí)間數(shù)據(jù)數(shù)組建立索引的優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)。流數(shù)據(jù)庫(kù)又被稱為實(shí)時(shí)數(shù)據(jù)庫(kù),這是一種使用實(shí)時(shí)處理數(shù)據(jù)的方式來(lái)處理狀態(tài)不斷變化的數(shù)據(jù)庫(kù)系統(tǒng)。對(duì)時(shí)間序列的數(shù)據(jù)庫(kù)提出實(shí)時(shí)的處理要求,那么時(shí)間數(shù)據(jù)庫(kù)就是流數(shù)據(jù)庫(kù)。常見(jiàn)的時(shí)間序列數(shù)據(jù)庫(kù)InfluxDB、OpenTSDBo。 (3)網(wǎng)格和云數(shù)據(jù)庫(kù):是基于網(wǎng)格計(jì)算或者云計(jì)算的數(shù)據(jù)庫(kù)。

第十章 系統(tǒng)開(kāi)發(fā)與運(yùn)行

10.1 系統(tǒng)實(shí)施

10.1.1 信息系統(tǒng)生命周期

軟件工程基本原理:用分階段的生命周期計(jì)劃嚴(yán)格管理、堅(jiān)持進(jìn)行階段評(píng)審、實(shí)現(xiàn)嚴(yán)格的產(chǎn)品控制采用現(xiàn)代程序設(shè)計(jì)技術(shù)、結(jié)果應(yīng)能清楚的審查、開(kāi)發(fā)小組的人員應(yīng)少而精、承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性。軟件工程的基本要素:方法、工具、過(guò)程。軟件生存周期:可行性分析與項(xiàng)目開(kāi)發(fā)計(jì)劃、需求分析、概要設(shè)計(jì)(選擇系統(tǒng)解決方案,規(guī)劃子系統(tǒng))、詳細(xì)設(shè)計(jì)(設(shè)計(jì)子系統(tǒng)內(nèi)部具體實(shí)現(xiàn))、編碼、測(cè)試、維護(hù)。

系統(tǒng)規(guī)劃階段:任務(wù)是對(duì)組織的環(huán)境、目標(biāo)及現(xiàn)行系統(tǒng)的狀況進(jìn)行初步調(diào)查,根據(jù)組織目標(biāo)和發(fā)展戰(zhàn)略確定信息系統(tǒng)的發(fā)展戰(zhàn)略,對(duì)建設(shè)新系統(tǒng)的需求做出分析和預(yù)測(cè),同時(shí)考慮建設(shè)新系統(tǒng)所受的各種約束,研究建設(shè)新系統(tǒng)的必要性和可能性。根據(jù)需要與可能,給出制建系統(tǒng)的備選方案輸出:可行性研究報(bào)告、系統(tǒng)設(shè)計(jì)任務(wù)書(shū)。系統(tǒng)分析階段:任務(wù)是根據(jù)系統(tǒng)設(shè)計(jì)任務(wù)書(shū)所確定的范圍,對(duì)現(xiàn)行系統(tǒng)進(jìn)行詳細(xì)調(diào)查,描述現(xiàn)行系統(tǒng)的業(yè)務(wù)流程,指出現(xiàn)行系統(tǒng)的局限性和不足之處,確定新系統(tǒng)的基本目標(biāo)和邏輯功能要求,即提出新系統(tǒng)的邏輯模型。系統(tǒng)分析階段又稱為邏輯設(shè)計(jì)階段。這個(gè)階段是整個(gè)系統(tǒng)建設(shè)的關(guān)鍵階段,也是信息系統(tǒng)建設(shè)與一般工程項(xiàng)目的重要區(qū)別所在。輸出:系統(tǒng)說(shuō)明書(shū)系統(tǒng)設(shè)計(jì)階段:系統(tǒng)分析階段的任務(wù)是回答系統(tǒng)“做什么”的問(wèn)題,而系統(tǒng)設(shè)計(jì)階段要回答的問(wèn)題是“怎么做”。該階段的任務(wù)是根據(jù)系統(tǒng)說(shuō)明書(shū)中規(guī)定的功能要求,具體設(shè)計(jì)實(shí)現(xiàn)邏輯模型的技術(shù)方案,也就是設(shè)計(jì)新系統(tǒng)的物理模型。這個(gè)階段又稱為物理設(shè)計(jì)階段,可分為總體設(shè)計(jì)(概要設(shè)計(jì))和詳細(xì)設(shè)計(jì)兩個(gè)子階段。輸出:系統(tǒng)設(shè)計(jì)說(shuō)明書(shū) (概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)說(shuō)明書(shū))系統(tǒng)實(shí)施階段:是將設(shè)計(jì)的系統(tǒng)付諸實(shí)施的階段。這一階段的任務(wù)包括計(jì)算機(jī)等設(shè)備的購(gòu)置、安裝和調(diào)試程序的編寫(xiě)和調(diào)試、人員培訓(xùn)、數(shù)據(jù)文件轉(zhuǎn)換、系統(tǒng)調(diào)試與轉(zhuǎn)換等。這個(gè)階段的特點(diǎn)是幾個(gè)互相聯(lián)系、互相制約的任務(wù)同時(shí)展開(kāi),!必須精心安排、合理組織。系統(tǒng)實(shí)施是按實(shí)施計(jì)劃分階段完成的,每個(gè)階段應(yīng)寫(xiě)出實(shí)施進(jìn)展報(bào)告。系統(tǒng)測(cè)試之后寫(xiě)出系統(tǒng)測(cè)試分析報(bào)告輸出:實(shí)施進(jìn)展報(bào)告、系統(tǒng)測(cè)試分析報(bào)告。系統(tǒng)運(yùn)行和維護(hù)階段:系統(tǒng)投入運(yùn)行后,需要經(jīng)常進(jìn)行維護(hù)和評(píng)價(jià),記錄系統(tǒng)運(yùn)行的情況,根據(jù)一定的規(guī)則對(duì)系統(tǒng)進(jìn)行必要的修改,評(píng)價(jià)系統(tǒng)的工作質(zhì)量和經(jīng)濟(jì)效益。

10.1.2 能力成熟度模型

【能力成熟度模型集成CMMI】 是若干過(guò)程模型的綜合和改進(jìn)不僅僅軟件,而是支持多個(gè)工程學(xué)科和領(lǐng)域的系統(tǒng)的、致的過(guò)程改進(jìn)框架能適應(yīng)現(xiàn)代工程的特點(diǎn)和需要,能提高過(guò)程的質(zhì)量和工作效率。 CMMI兩種表示方法: (1)階段式模型:類似于CMM,它關(guān)注組織的成熟度,五個(gè)成熟度模型如下:

10.1.3 軟件過(guò)程開(kāi)發(fā)模型

【瀑布模型】 瀑布模型(SDLC):瀑布模型是一個(gè)經(jīng)典的軟件生命周期模型一般將軟件開(kāi)發(fā)分為:可行性分析 (計(jì)劃)、需求分析、軟件設(shè)計(jì) (概要設(shè)計(jì)、詳細(xì)設(shè)計(jì))、編碼 (含單元測(cè)試)、測(cè)試、運(yùn)行維護(hù)等幾個(gè)階段。 瀑布模型特點(diǎn): (1)從上一項(xiàng)開(kāi)發(fā)活動(dòng)接受該項(xiàng)活動(dòng)的工作對(duì)象作為輸入; (2)利用這一輸入,實(shí)施該項(xiàng)活動(dòng)應(yīng)完成的工作內(nèi)容; (3)給出該項(xiàng)活動(dòng)的工作成果,作為輸出傳給下一項(xiàng)開(kāi)發(fā)活動(dòng)。 (4)對(duì)該項(xiàng)活動(dòng)的實(shí)施工作成果進(jìn)行評(píng)審。若其工作成果得到確認(rèn),則繼續(xù)進(jìn)行下一項(xiàng)開(kāi)發(fā)活動(dòng);否則返回前一項(xiàng),甚至更前項(xiàng)的活動(dòng)。盡量減少多個(gè)階段間的反復(fù)。以相對(duì)來(lái)說(shuō)較小的費(fèi)用來(lái)開(kāi)發(fā)軟件。

【螺旋模型】

螺旋模型是一個(gè)演化軟件過(guò)程模型,將原型實(shí)現(xiàn)的迭代特征與線性順序(瀑布)模型中控制的和系統(tǒng)化的方面結(jié)合起來(lái)。在螺旋模型中,軟件開(kāi)發(fā)是一系列的增量發(fā)布。開(kāi)發(fā)過(guò)程具有周期性重復(fù)的螺旋線狀。四個(gè)象限分別標(biāo)志每個(gè)周期所劃分的四階段:制訂計(jì)劃、風(fēng)險(xiǎn)分析、實(shí)施工程和客戶評(píng)估。螺旋模型強(qiáng)調(diào)了風(fēng)險(xiǎn)分析,特別適用于龐大而復(fù)雜的、高風(fēng)險(xiǎn)的系統(tǒng)。

【V模型】

V模型從整體上看起來(lái),就是一個(gè)V字型的結(jié)構(gòu),由左右兩邊組成。左邊的下畫(huà)線分別代表了需求分析、概要設(shè)計(jì)、詳編碼。右邊的上畫(huà)線代表了單元測(cè)試、集成測(cè)試細(xì)設(shè)計(jì)、系統(tǒng)測(cè)試與驗(yàn)收測(cè)試。v模型的特點(diǎn)如下: (1)單元測(cè)試的主要目的是針對(duì)編碼過(guò)程中可能存在的各種錯(cuò)誤; (2)集成測(cè)試的主要目的是針對(duì)詳細(xì)設(shè)計(jì)中可能存在的問(wèn)題; (3)系統(tǒng)測(cè)試主要針對(duì)概要設(shè)計(jì),檢查系統(tǒng)作為一個(gè)整體是否有效地得到運(yùn)行; (4)驗(yàn)收測(cè)試通常由業(yè)務(wù)專家或者用戶進(jìn)行,以確認(rèn)產(chǎn)品能真正符合用戶業(yè)務(wù)上的需要; (5)V模型用于需求明確和需求變更不頻繁的情形。

【原型化模型】

原型化模型第一步就是創(chuàng)建一個(gè)快速原型能夠滿足項(xiàng)目千系人與未來(lái)的用戶可以與原型進(jìn)行交互,再通過(guò)與相關(guān)干系人進(jìn)行充分的討論和分析,最終弄清楚當(dāng)前系統(tǒng)的需求,進(jìn)行了充分的了解之后,在原型的基礎(chǔ)上開(kāi)發(fā)出用戶滿意的產(chǎn)品。原型法認(rèn)為在很難一下子全面準(zhǔn)確地提出用戶需求的情況下,原型應(yīng)當(dāng)具備的特點(diǎn)如下: (1)實(shí)際可行; (2)具有最終系統(tǒng)的基本特征; (3)構(gòu)造方便、快速,造價(jià)低。原型法的特點(diǎn)在于原型法對(duì)用戶的需求是動(dòng)態(tài)響應(yīng)、逐步納入的。

【增量模型】

增量模型:首先開(kāi)發(fā)核心模塊功能,而后與用戶確認(rèn),之后再開(kāi)發(fā)次核心模塊的功能,即每次開(kāi)發(fā)一部分功能并與用戶需求確認(rèn),最終完成項(xiàng)目開(kāi)發(fā)優(yōu)先級(jí)最高的服務(wù)最先交付。特點(diǎn):但由于并不是從系統(tǒng)整體角度規(guī)劃各個(gè)模塊,因此不利于模塊劃分難點(diǎn)在于如何將客戶需求劃分為多個(gè)增量。與原型不用的是增量模型的每一次增量版本都可作為獨(dú)立可操作的作品,而原型的構(gòu)造一般是為了演示。

【其他模型】

噴泉模型:是一種以用戶需求為動(dòng)力,以對(duì)象作為驅(qū)動(dòng)的模型,適合于面向?qū)ο蟮拈_(kāi)發(fā)方法。使開(kāi)發(fā)過(guò)程具有迭代性和無(wú)間隙性?;跇?gòu)件的開(kāi)發(fā)模型CBSD:利用預(yù)先包裝的構(gòu)件來(lái)構(gòu)造應(yīng)用系統(tǒng)。構(gòu)件可以是組織內(nèi)部開(kāi)發(fā)的構(gòu)件,也可以是商品化成品軟件構(gòu)件。特點(diǎn)是增強(qiáng)了復(fù)用性,在系統(tǒng)開(kāi)發(fā)過(guò)程中,會(huì)構(gòu)建一個(gè)構(gòu)件庫(kù),供其他系統(tǒng)復(fù)用,因此可以提高可靠性,節(jié)省時(shí)間和成本形式化方法模型:建立在嚴(yán)格數(shù)學(xué)基礎(chǔ)上的一種軟件開(kāi)發(fā)方法,主要活動(dòng)是生成計(jì)算機(jī)軟件形式化的數(shù)學(xué)規(guī)格說(shuō)明。

10.1.4 信息系統(tǒng)開(kāi)發(fā)方法

【結(jié)構(gòu)化方法】

結(jié)構(gòu)是指系統(tǒng)內(nèi)各個(gè)組成要素之間的相互聯(lián)系、相互作用的框架。結(jié)構(gòu)化方法也稱為生命周期法,是一種傳統(tǒng)的信息系統(tǒng)開(kāi)發(fā)方法,由結(jié)構(gòu)化分析 (Structured Analysis,SA) 、結(jié)構(gòu)化設(shè)計(jì) (Structured Design, SD) 和結(jié)構(gòu)化程序設(shè)計(jì) (Structured Programming,SP)三部分有機(jī)組合而成,其精髓是自頂向下、逐步求精和模塊化設(shè)計(jì)。結(jié)構(gòu)化方法的主要特點(diǎn): (1)開(kāi)發(fā)目標(biāo)清晰化。結(jié)構(gòu)化方法的系統(tǒng)開(kāi)發(fā)遵循“用戶第一”的原則; (2)開(kāi)發(fā)工作階段化。每個(gè)階段工作完成后,要根據(jù)階段工作目標(biāo)和要求進(jìn)行審查,這使各階段工作有條不紊地進(jìn)行,便于項(xiàng)目管理與控制; (3)開(kāi)發(fā)文檔規(guī)范化。結(jié)構(gòu)化方法每個(gè)階段工作完成后,要按照要求完成相應(yīng)的文檔,以保證各個(gè)工作階段的銜接與系統(tǒng)維護(hù)工作的遍歷; (4)?設(shè)計(jì)方法結(jié)構(gòu)化。在系統(tǒng)分析與設(shè)計(jì)時(shí),從整體和全局考慮,自頂向下地分解,在系統(tǒng)實(shí)現(xiàn)時(shí),根據(jù)設(shè)計(jì)的要求,先編寫(xiě)各個(gè)具體的功能模塊,然后自底向上逐步實(shí)現(xiàn)整個(gè)系統(tǒng)。結(jié)構(gòu)化方法的不足和局限: (1)開(kāi)發(fā)周期長(zhǎng):按順序經(jīng)歷各個(gè)階段,直到實(shí)施階段結(jié)束后,用戶才能使用系統(tǒng); (2) 難以適應(yīng)需求變化:不適用于需求不明確或經(jīng)常變更的項(xiàng)目; (3)很少考慮數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)化方法是一種面向過(guò)程,面向數(shù)據(jù)流的開(kāi)發(fā)方法,很少考慮數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)化方法常用工具:結(jié)構(gòu)化方法一般利用圖形表達(dá)用戶需求,常用工具有數(shù)據(jù)流圖、數(shù)據(jù)字典、結(jié)構(gòu)化語(yǔ)言、判定表以及判定樹(shù)等.。

【面向?qū)ο蠓椒ā?/p>

面向?qū)ο?(Object-Oriented,OO)方法認(rèn)為,客觀世界是由各種對(duì)象組成的,任何事物都是對(duì)象,每一個(gè)對(duì)象都有自己的運(yùn)動(dòng)規(guī)律和內(nèi)部狀態(tài),都屬于某個(gè)對(duì)象類,是該對(duì)象類的一個(gè)元素。復(fù)雜的對(duì)象可由相對(duì)簡(jiǎn)單的各種對(duì)象以某種方式而構(gòu)成,不同對(duì)象的組合及相互作用就構(gòu)成了系統(tǒng)。面向?qū)ο蠓椒ǖ奶攸c(diǎn): (1)使用OO方法構(gòu)造的系統(tǒng)具有更好的復(fù)用性,其關(guān)鍵在于建立一個(gè)全面合理、統(tǒng)一的模型(用例模型和分析模型)。 (2)OO方法也劃分階段,但其中的系統(tǒng)分析、系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)三個(gè)階段之間已經(jīng)沒(méi)有“縫隙”。也就是說(shuō),這三個(gè)階段的界限變得不明確,某項(xiàng)工作既可以在前一個(gè)階段完成,也可以在后一個(gè)階段完成;前一個(gè)階段工作做得不夠細(xì),在后一個(gè)階段可以補(bǔ)充。 (3)面向?qū)ο蠓椒梢云毡檫m用于各類信息系統(tǒng)的開(kāi)發(fā)。面向?qū)ο蠓椒ǖ牟蛔阒幈仨氁揽恳欢ǖ拿嫦驅(qū)ο蠹夹g(shù)支持在大型項(xiàng)目的開(kāi)發(fā)上具有一定的局限性不能涉足系統(tǒng)分析以前的開(kāi)發(fā)環(huán)節(jié)。當(dāng)前,一些大型信息系統(tǒng)的開(kāi)發(fā),通常是將結(jié)構(gòu)化方法和OO方法結(jié)合起來(lái)首先,使用結(jié)構(gòu)化方法進(jìn)行自頂向下的整體劃分;然后,自底向上地采用OO方法進(jìn)行開(kāi)發(fā)。因此,結(jié)構(gòu)化方法和OO方法仍是兩種在系統(tǒng)開(kāi)發(fā)領(lǐng)域中相互依存的、不可替代的方法。

【原型化方法】

原型化方法也稱為快速原型法,或者簡(jiǎn)稱為原型法。它是一種根據(jù)用戶初步需求,利用系統(tǒng)開(kāi)發(fā)工具,快速地建立一個(gè)系統(tǒng)模型展示給用戶,在此基礎(chǔ)上與用戶交流,最終實(shí)現(xiàn)用戶需求的信息系統(tǒng)快速開(kāi)發(fā)的方法。按是否實(shí)現(xiàn)功能分類:分為水平原型(行為原型,功能的導(dǎo)航)、垂直原型(結(jié)構(gòu)化原型,實(shí)現(xiàn)了部分功能)。按最終結(jié)果分類:分為拋棄式原型、演化式原型?。

原型法的特點(diǎn): 原型法可以使系統(tǒng)開(kāi)發(fā)的周期縮短成本和風(fēng)險(xiǎn)降低、速度加快,獲得較高的綜合開(kāi)發(fā)效益。 原型法是以用戶為中心來(lái)開(kāi)發(fā)系統(tǒng)的,用戶參與的程度大大提高,開(kāi)發(fā)的系統(tǒng)符合用戶的需求,因而增加了用戶的滿意度,提高了系統(tǒng)開(kāi)發(fā)的成功率。由于用戶參與了系統(tǒng)開(kāi)發(fā)的全過(guò)程,對(duì)系統(tǒng)的功能和結(jié)構(gòu)容易理解和接受,有利于系統(tǒng)的移交,有利于系統(tǒng)的運(yùn)行與維護(hù)。原型法的不足之處:開(kāi)發(fā)的環(huán)境要求高。管理水平要求高。由以上的分析可以看出,原型法的優(yōu)點(diǎn)主要在于能更有效地確認(rèn)用戶需求。從直觀上來(lái)看,原型法適用于那些需求不明確的系統(tǒng)開(kāi)發(fā)。事實(shí)上,對(duì)于分析層面難度大、技術(shù)層面難度不大的系統(tǒng),適合于原型法開(kāi)發(fā)。從嚴(yán)格意義上來(lái)說(shuō),目前的原型法不是一種獨(dú)立的系統(tǒng)開(kāi)發(fā)方法,而只是一種開(kāi)發(fā)思想,它只支持在系統(tǒng)開(kāi)發(fā)早期階段快速生成系統(tǒng)的原型,沒(méi)有規(guī)定在原型構(gòu)建過(guò)程中必須使用哪種方法。因此,它不是完整意義上的方法論體系。這就注定了原型法必須與其他信息系統(tǒng)開(kāi)發(fā)方法結(jié)合使用。

【敏捷開(kāi)發(fā)】

敏捷開(kāi)發(fā)是一種以人為核心、迭代、循序漸進(jìn)的開(kāi)發(fā)方法,相對(duì)于傳統(tǒng)軟件開(kāi)發(fā)方法的“非敏捷”,更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作、面對(duì)面的溝通 (認(rèn)為比書(shū)面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團(tuán)隊(duì)、能夠很好地適應(yīng)需求變化的代碼編寫(xiě)和團(tuán)隊(duì)組織方法,也更注重軟件開(kāi)發(fā)中人的作用敏捷軟件開(kāi)發(fā)宣言: (1)個(gè)體和交互勝過(guò)過(guò)程和工具; (2)可以工作的軟件勝過(guò)面面俱到的文檔; (3)客戶合作勝過(guò)合同談判; (4)響應(yīng)變化勝過(guò)遵循計(jì)劃?。

結(jié)對(duì)編程:個(gè)程序員開(kāi)發(fā),另一個(gè)程序在一旁觀察審查代碼,能夠有效的提高代碼質(zhì)量在開(kāi)發(fā)同時(shí)對(duì)代碼進(jìn)行初步審查,共同對(duì)代碼負(fù)責(zé)。自適應(yīng)開(kāi)發(fā):強(qiáng)調(diào)開(kāi)發(fā)方法的適應(yīng)性 (Adaptive)。不象其他方法那樣有很多具體的實(shí)踐做法,它更側(cè)重為軟件的重要性提供最根本的基礎(chǔ),并從更高的組織和管理層次來(lái)闡述開(kāi)發(fā)方法為什么要具備適應(yīng)性。水晶方法:每一個(gè)不同的項(xiàng)目都需要一套不同的策略、約定和方法論。特性驅(qū)動(dòng)開(kāi)發(fā):是一套針對(duì)中小型軟件開(kāi)發(fā)項(xiàng)目的開(kāi)發(fā)模式。是一個(gè)模型驅(qū)動(dòng)的快速迭代開(kāi)發(fā)過(guò)程,它強(qiáng)調(diào)的是簡(jiǎn)化、實(shí)用、易于被開(kāi)發(fā)團(tuán)隊(duì)接受,適用于需求經(jīng)常變動(dòng)的項(xiàng)目。極限編程XP:核心是溝通、簡(jiǎn)明、反饋和勇氣。因?yàn)橹烙?jì)劃永遠(yuǎn)趕不上變化,XP無(wú)需開(kāi)發(fā)人員在軟件開(kāi)始初期做出很多的文檔。XP提倡測(cè)試先行,為了將以后出現(xiàn)bug的幾率降到最低。并列爭(zhēng)球法SCRUM:是一種迭代的增量化過(guò)程,把每段時(shí)間 (30天) 一次的,并按需求的優(yōu)先級(jí)別來(lái)實(shí)現(xiàn)產(chǎn)品,多個(gè)自組織和自治迭代稱為一個(gè)“沖刺”的小組并行地遞增實(shí)現(xiàn)產(chǎn)品。統(tǒng)一過(guò)程(RUP)提供了在開(kāi)發(fā)組織中分派任務(wù)和責(zé)任的紀(jì)律化方法。它的目標(biāo)是在可預(yù)見(jiàn)的日程和預(yù)算前提下,確保滿足最終用戶需求的高質(zhì)量產(chǎn)品。

3個(gè)顯著特點(diǎn):用例驅(qū)動(dòng)、以架構(gòu)為中心、迭代和增量。4個(gè)流程:初始階段、細(xì)化階段、構(gòu)建階段和交付階段。每個(gè)階段結(jié)束時(shí)都要安排一次技術(shù)評(píng)審,以確定這個(gè)階段的目標(biāo)是否已經(jīng)達(dá)到。適用:一個(gè)通用過(guò)程框架,可以用于種類廣泛的軟件系統(tǒng)、不同的應(yīng)用領(lǐng)域不同的組織類型、不同性能水平和不同的項(xiàng)目規(guī)模。

10.1.5 系統(tǒng)分析與設(shè)計(jì)

系統(tǒng)分析過(guò)程一般按如圖所示的邏輯進(jìn)行: (1)認(rèn)識(shí)、理解當(dāng)前的現(xiàn)實(shí)環(huán)境,獲得當(dāng)前系統(tǒng)的“物理模型”; (2)從當(dāng)前系統(tǒng)的“物理模型”抽象出當(dāng)前系統(tǒng)的“邏輯模型”; (3)對(duì)當(dāng)前系統(tǒng)的“邏輯模型”進(jìn)行分析和優(yōu)化,建立目標(biāo)系統(tǒng)的“邏輯模型”; (4)對(duì)目標(biāo)系統(tǒng)的邏輯模型具體化(物理化),建立目標(biāo)系統(tǒng)的物理模型。系統(tǒng)開(kāi)發(fā)的目的是把現(xiàn)有系統(tǒng)的物理模型轉(zhuǎn)化為目標(biāo)系統(tǒng)的物理模型,即圖中所描述的路徑,而系統(tǒng)分析階段的結(jié)果是得到目標(biāo)系統(tǒng)的邏輯模型。邏輯模型反映了系統(tǒng)的功能和性質(zhì),而物理模型反映的是系統(tǒng)的某一種具體實(shí)現(xiàn)方案。

系統(tǒng)設(shè)計(jì)基本原理:抽象(模塊化信息隱蔽、模塊獨(dú)立。衡量模塊獨(dú)立程度的標(biāo)準(zhǔn)有兩個(gè):耦合性和內(nèi)聚性。內(nèi)聚程度從低到高如下表:

耦合程度從低到高如下表所示:

系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)是要根據(jù)系統(tǒng)分析的要求和組織的實(shí)際情況對(duì)新系統(tǒng)的總體結(jié)構(gòu)形式和可利用的資源進(jìn)行大致設(shè)計(jì),這是一種宏觀、總體上的設(shè)計(jì)和規(guī)劃。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)原則 (1)分解-協(xié)調(diào)原則。 (2)自頂向下的原則。 (3)信息隱蔽、抽象的原則。 (4)一致性原則。 (5)明確性原則。 (6)模塊之間的耦合盡可能小,模塊的內(nèi)聚度盡可能高。 (7)模塊的扇入系數(shù)和扇出系數(shù)要合理。 (8)模塊的規(guī)模適當(dāng)?子系統(tǒng)劃分的原則: (1)子系統(tǒng)要具有相對(duì)獨(dú)立性。 (2)子系統(tǒng)之間數(shù)據(jù)的依賴性盡量小。 (3)子系統(tǒng)劃分的結(jié)果應(yīng)使數(shù)據(jù)冗余較小。 (4)子系統(tǒng)的設(shè)置應(yīng)考慮今后管理發(fā)展的需要。 (5)子系統(tǒng)的劃分應(yīng)便于系統(tǒng)分階段實(shí)現(xiàn)。 (6)子系統(tǒng)的劃分應(yīng)考慮到各類資源的充分利用。子系統(tǒng)結(jié)構(gòu)設(shè)計(jì)的任務(wù)是確定劃分后的子系統(tǒng)模塊結(jié)構(gòu),并畫(huà)出模塊結(jié)構(gòu)圖王這個(gè)過(guò)程中必須考慮以下幾個(gè)問(wèn)題。 (1)每個(gè)子系統(tǒng)如何劃分成多個(gè)模塊。 (2)如何確定子系統(tǒng)之間、模塊之間傳送的數(shù)據(jù)及其調(diào)用關(guān)系。 (3)如何評(píng)價(jià)并改進(jìn)模塊結(jié)構(gòu)的質(zhì)量。 (4)如何從數(shù)據(jù)流圖導(dǎo)出模塊結(jié)構(gòu)圖。

【系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)】

模塊是組成系統(tǒng)的基本單位,它的特點(diǎn)是可以組合、分解和更換。系統(tǒng)中的任何一個(gè)處理根據(jù)功能都可以看成是一個(gè)模塊,具體化程度的不同,模塊可以分為邏輯模塊和物理功能。模塊。個(gè)模塊應(yīng)具備以下4 個(gè)要素: (1)輸入和輸出。 (2)處理功能。指模塊把輸入轉(zhuǎn)換成輸出所做的工作 (3)內(nèi)部數(shù)據(jù)。指僅供該模塊本身引用的數(shù)據(jù)。 (4)程序代碼。指用來(lái)實(shí)現(xiàn)模塊功能的程序。 前兩個(gè)要素是模塊外部特性,反映了模塊的外貌。后兩個(gè)要素是模塊的內(nèi)部特性模塊結(jié)構(gòu)圖為了保證系統(tǒng)設(shè)計(jì)工作的順利進(jìn)行,結(jié)構(gòu)設(shè)計(jì)應(yīng)遵循以下原則。 (1)所劃分的模塊其內(nèi)部的凝聚性要強(qiáng),模塊之間的聯(lián)系要少,即模塊具有較強(qiáng)的獨(dú)立性。 (2)模塊之間的連接只能存在上下級(jí)之間的調(diào)用關(guān)系,不能有同級(jí)之間的橫向聯(lián)系。 (3)整個(gè)系統(tǒng)呈樹(shù)狀結(jié)構(gòu),不允許網(wǎng)狀結(jié)構(gòu)或交叉調(diào)用關(guān)系出現(xiàn)。 (4)所有模塊(包括后繼IPO圖)都必須嚴(yán)格地分類編碼并建立歸檔文件模塊結(jié)構(gòu)圖主要關(guān)心的是模塊的外部屬性,即上下級(jí)模塊、同級(jí)模塊之間的數(shù)據(jù)傳遞和調(diào)并不關(guān)心模塊的內(nèi)部。

10.1.6 結(jié)構(gòu)化開(kāi)發(fā)?

結(jié)構(gòu)化分析與設(shè)計(jì)方法是一種面向數(shù)據(jù)流的傳統(tǒng)軟件開(kāi)發(fā)方法,它以數(shù)據(jù)流為中心構(gòu)建軟件的分析模型和設(shè)計(jì)模型。結(jié)構(gòu)化分析(Structured Analysis,SA)結(jié)構(gòu)化設(shè)計(jì) (Structured Design,SD)和結(jié)構(gòu)化程序設(shè)計(jì) (StructuredProgramming Design,SPD)構(gòu)成了完整的結(jié)構(gòu)化方法。 結(jié)構(gòu)化方法的分析結(jié)果由以下幾部分組成:一套分層的數(shù)據(jù)流圖、一本數(shù)據(jù)詞典、一組小說(shuō)明 (也稱加工邏輯說(shuō)明) 、補(bǔ)充材料。

數(shù)據(jù)流:由一組固定成分的數(shù)據(jù)組成,表示數(shù)據(jù)的流向。在DFD 中,數(shù)據(jù)流的流向必須經(jīng)過(guò)加工加工:描述了輸入數(shù)據(jù)流到輸出數(shù)據(jù)流之間的變換,數(shù)據(jù)流圖中常見(jiàn)的三種錯(cuò)誤如圖所示: 加工3.1.2有輸入但是沒(méi)有輸出,稱之為“黑洞”; 加工3.1.3有輸出但沒(méi)有輸入。稱之為“奇跡“; 加工3.1.1中輸入不足以產(chǎn)生輸出,我們稱之為“灰洞“。數(shù)據(jù)存儲(chǔ):用來(lái)存儲(chǔ)數(shù)據(jù)。外部實(shí)體(外部主體)是指存在于軟件系統(tǒng)之外的人員或組織,它指出系統(tǒng)所需數(shù)據(jù)的發(fā)源地(源)和系統(tǒng)所產(chǎn)生的數(shù)據(jù)的歸宿地(宿)。

?【分層數(shù)據(jù)流圖】

【數(shù)據(jù)字典DD】 數(shù)據(jù)流圖描述了系統(tǒng)的分解,但沒(méi)有對(duì)圖中各成分進(jìn)行說(shuō)明。數(shù)據(jù)字典就是為數(shù)據(jù)流圖中的每個(gè)數(shù)據(jù)流、文件、加工,以及組成數(shù)據(jù)流或文件的數(shù)據(jù)項(xiàng)做出說(shuō)明。 數(shù)據(jù)字典有以下4 類條目:數(shù)據(jù)流、數(shù)據(jù)項(xiàng)、數(shù)據(jù)存儲(chǔ)和基本加工。

加工邏輯也稱為“小說(shuō)明”。常用的加工邏輯描述方法有結(jié)構(gòu)化語(yǔ)言、判定表和判定樹(shù)3 種。?

結(jié)構(gòu)化設(shè)計(jì)(Structured Design,SD)方法是一種面向數(shù)據(jù)流的設(shè)計(jì)方法,它可以與SA方法銜接。結(jié)構(gòu)化設(shè)計(jì)方法的基本思想是將系統(tǒng)設(shè)計(jì)成由相對(duì)獨(dú)立功能單一的模塊組成的結(jié)構(gòu)。結(jié)構(gòu)化設(shè)計(jì)方法中用結(jié)構(gòu)圖 (structure chart)來(lái)描述軟件系統(tǒng)的體系結(jié)構(gòu)指出一個(gè)軟件系統(tǒng)由哪些模塊組成,以及模塊之間的調(diào)用關(guān)系。模塊結(jié)構(gòu)圖是結(jié)構(gòu)化設(shè)計(jì)的工具,由模塊、調(diào)用、數(shù)據(jù)、控制和轉(zhuǎn)接五種基本符號(hào)組成。結(jié)構(gòu)化設(shè)計(jì)主要包括: (1)體系結(jié)構(gòu)設(shè)計(jì):定義軟件的主要結(jié)構(gòu)元素及其關(guān)系; (2)數(shù)據(jù)設(shè)計(jì):基于實(shí)體聯(lián)系圖確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)及數(shù)據(jù)庫(kù)的表結(jié)構(gòu)描述用戶界面,軟件和其他硬件設(shè)備、其他軟件系統(tǒng)及使用人員; (3)接口設(shè)計(jì):的外部接口,以及各種構(gòu)件之間的內(nèi)部接口; (4)過(guò)程設(shè)計(jì):確定軟件各個(gè)組成部分內(nèi)的算法及內(nèi)部數(shù)據(jù)結(jié)構(gòu),并選定某種過(guò)程的表達(dá)形式來(lái)描述各種算法。?

10.2 系統(tǒng)測(cè)試

10.2.1 測(cè)試原則和方法

系統(tǒng)測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程,成功的測(cè)試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。測(cè)試原則:

應(yīng)盡早并不斷的進(jìn)行測(cè)試;測(cè)試工作應(yīng)該避免由原:軟件的人或小組承擔(dān);在設(shè)計(jì)測(cè)試方案時(shí),不僅要確定輸入數(shù)據(jù),而且要根據(jù)系統(tǒng)功能確定預(yù)期的輸出結(jié)果;既包含有效、合理的測(cè)試用例,也包含不合理、失效的用例;檢驗(yàn)程序是否做了該做的事,且是否做了不該做的事;嚴(yán)格按照測(cè)試計(jì)劃進(jìn)行;妥善保存測(cè)試計(jì)劃和測(cè)試用例:測(cè)試用例可以重復(fù)使用或追加測(cè)試。軟件測(cè)試方法可分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。

靜態(tài)測(cè)試:指被測(cè)試程序不在機(jī)器上運(yùn)行,而采用人工檢測(cè)和計(jì)算機(jī)輔助靜態(tài)分析的手段對(duì)程序進(jìn)行檢測(cè),包括對(duì)文檔的靜態(tài)測(cè)試和對(duì)代碼的靜態(tài)測(cè)試。對(duì)文檔的靜態(tài)測(cè)試主要以檢查單的形式進(jìn)行,而對(duì)代碼的靜態(tài)測(cè)試,包括桌前檢查、代碼審查、代碼走查大方式。使用這種方法能夠有效地發(fā)現(xiàn)30%-70%的邏輯設(shè)計(jì)和編碼錯(cuò)誤動(dòng)態(tài)測(cè)試:指在計(jì)算機(jī)上實(shí)際運(yùn)行程序進(jìn)行軟件測(cè)試,一般采用白盒測(cè)試和黑盒測(cè)試方法。 黑盒測(cè)試法:功能性測(cè)試,不了解軟件代碼結(jié)構(gòu),根據(jù)功能設(shè)計(jì)用例,測(cè)試軟件功能。 白盒測(cè)試法:結(jié)構(gòu)性測(cè)試,明確代碼流程,根據(jù)代碼邏輯設(shè)計(jì)用例,進(jìn)行用例覆蓋。?

10.2.2 測(cè)試階段

(1)單元測(cè)試:也稱為模塊測(cè)試,測(cè)試的對(duì)象是可獨(dú)立編譯或匯編的程序模塊軟件構(gòu)件或OO軟件中的類(統(tǒng)稱為模塊),測(cè)試依據(jù)是軟件詳細(xì)設(shè)計(jì)說(shuō)明書(shū) (2)集成測(cè)試:目的是檢查模塊之間,以及模塊和已集成的軟件之間的接口關(guān)系,并驗(yàn)證已集成的軟件是否符合設(shè)計(jì)要求。測(cè)試依據(jù)是軟件概要設(shè)計(jì)文檔。 (3)系統(tǒng)測(cè)試:測(cè)試對(duì)象是完整的、集成的計(jì)算機(jī)系統(tǒng);測(cè)試的目的是在真實(shí)系統(tǒng)工作環(huán)境下驗(yàn)證完成的軟件配置項(xiàng)能否和系統(tǒng)正確連接,并滿足系統(tǒng)/子系統(tǒng)設(shè)計(jì)文檔和軟件開(kāi)發(fā)合同規(guī)定的要求。測(cè)試依據(jù)是用戶需求或開(kāi)發(fā)合同。主要內(nèi)容包括功能測(cè)試、健壯性測(cè)試、性能測(cè)試、用戶界面測(cè)試、安全性測(cè)試安裝與反安裝測(cè)試等,其中,最重要的工作是進(jìn)行功能測(cè)試與性能測(cè)試。功能測(cè)試主要采用黑盒測(cè)試方法;性能測(cè)試主要指標(biāo)有響應(yīng)時(shí)間、吞吐量、并發(fā)用戶數(shù)和資源利用率等。 (4)確認(rèn)測(cè)試:主要用于馳證軟件的功能、性能和其他特性是否與用戶需求-致。根據(jù)用戶的參與程度,通常包括以下類型:●?內(nèi)部確認(rèn)測(cè)試:主要由軟件開(kāi)發(fā)組織內(nèi)部按照SRS進(jìn)行測(cè)試;●?Alpha測(cè)試:用戶在開(kāi)發(fā)環(huán)境下進(jìn)行測(cè)試。用戶在實(shí)際使用環(huán)境下進(jìn)行測(cè)試,通過(guò)改測(cè)試后,產(chǎn)品才能交付用戶;●?Beta測(cè)試:驗(yàn)收測(cè)試:針對(duì)SRS,在交付前以用戶為主進(jìn)行的測(cè)試。其測(cè)試對(duì)象為完整的、集成的計(jì)算機(jī)系統(tǒng)。驗(yàn)收測(cè)試的目的是,在真實(shí)的用戶工作環(huán)境下,檢驗(yàn)軟件系統(tǒng)是否滿足開(kāi)發(fā)技術(shù)合同或SRS。●?驗(yàn)收測(cè)試的結(jié)論是用戶確定是否接收該軟件的主要依據(jù)。除應(yīng)滿足一般測(cè)試的準(zhǔn)入條件外,在進(jìn)行驗(yàn)收測(cè)試之前,應(yīng)確認(rèn)被測(cè)軟件系統(tǒng)已通過(guò)系統(tǒng)測(cè)試。 (5)配置項(xiàng)測(cè)試:測(cè)試對(duì)象是軟件配置項(xiàng),測(cè)試目的是檢驗(yàn)軟件配置項(xiàng)與SRS的一致性。測(cè)試的依據(jù)是SRS。在此之間,應(yīng)確認(rèn)被測(cè)軟件配置項(xiàng)已通過(guò)單元測(cè)試和集成測(cè)試。 (6)回歸測(cè)試:測(cè)試目的是測(cè)試軟件變更之后,變更部分的正確性和對(duì)變更需求的符合性,以及軟件原有的、正確的功能、性能和其他規(guī)定的要求的不損害性。

測(cè)試策略●?自底向上:從最底層模塊開(kāi)始測(cè)試需要編寫(xiě)驅(qū)動(dòng)程序,而后開(kāi)始逐一合并模塊,最終完成整個(gè)系統(tǒng)的測(cè)試。優(yōu)點(diǎn)是較早的驗(yàn)證了底層模塊?!?自頂向下:先測(cè)試整個(gè)系統(tǒng),需要編寫(xiě)樁程序,而后逐步向下直至最后測(cè)試最底層模塊。優(yōu)點(diǎn)是較早的驗(yàn)證了系統(tǒng)的主要控制和判斷點(diǎn)●?三明治:既有自底向上也有自頂向下的測(cè)試方法,二者都包括。兼有二者的優(yōu)點(diǎn),缺點(diǎn)是測(cè)試工作量大。

10.2.3 測(cè)試用例設(shè)計(jì)

【黑盒測(cè)試用例】

黑盒測(cè)試用例:將程序看做一個(gè)黑盒子,只知道輸入輸出,不知道內(nèi)部代碼由此設(shè)計(jì)出測(cè)試用例,分為下面幾類:等價(jià)類劃分:把所有的數(shù)據(jù)按照某種特性進(jìn)行歸類,而后在每類的數(shù)據(jù)里選取一個(gè)即可。等價(jià)類測(cè)試用例的設(shè)計(jì)原則::設(shè)計(jì)一個(gè)新的測(cè)試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步,直到所有的有效等價(jià)類都被覆蓋為止;設(shè)計(jì)一個(gè)新的測(cè)試用例,使其僅覆蓋一個(gè)尚未被覆蓋的無(wú)效等價(jià)類,重復(fù)這一步,直到所有的無(wú)效等價(jià)類都被覆蓋為止。邊界值劃分:將每類的邊界值作為測(cè)試用例,邊界值一般為范圍的兩端值以及在此范圍之外的與此范圍間隔最小的兩個(gè)值,如年齡范圍為0-150,邊界值為0,150,-1,151四個(gè)。錯(cuò)誤推測(cè):沒(méi)有固定的方法,憑經(jīng)驗(yàn)而言,來(lái)推測(cè)有可能產(chǎn)生問(wèn)題的地方作為測(cè)試用例進(jìn)行測(cè)試。因果圖:由一個(gè)結(jié)果來(lái)反推原因的方法,具體結(jié)果具體分析,沒(méi)有固定方法

【白盒測(cè)試用例】

白盒測(cè)試用例:知道程序的代碼邏輯,按照程序的代碼語(yǔ)句,來(lái)設(shè)計(jì)覆蓋代碼分支的測(cè)試用例,覆蓋級(jí)別從低至高分為下面幾種: (1)語(yǔ)句覆蓋SC:邏輯代碼中的所有語(yǔ)句都要被執(zhí)行一遍,覆蓋層級(jí)最低,因?yàn)閳?zhí)行了所有的語(yǔ)句,不代表執(zhí)行了所有的條件判斷。 (2)判定覆蓋DC: 邏輯代碼中的所有判斷語(yǔ)句的條件的真假分支都要覆蓋一。

(3)條件覆蓋CC:針對(duì)每一個(gè)判斷條件內(nèi)的每一個(gè)獨(dú)立條件都要執(zhí)行一遍真和假。 (4)條件判定組合覆蓋CDC::同時(shí)滿足判定覆蓋和條件覆蓋。

(5)路徑覆蓋:邏輯代碼中的所有可行路徑都覆蓋了,覆蓋層級(jí)最高。

10.2.4 調(diào)試

測(cè)試是發(fā)現(xiàn)錯(cuò)誤,調(diào)試是找出錯(cuò)誤的代碼和原因。調(diào)試需要確定錯(cuò)誤的準(zhǔn)確位置;確定問(wèn)題的原因并設(shè)法改正;改正后要進(jìn)行回歸測(cè)試。調(diào)試的方法有:蠻力法、回溯法 (從出錯(cuò)的地方開(kāi)始,向回找)、原因排除法(找出所有可能的原因,逐一進(jìn)行排除,具體包括演繹法、歸納法、二分法)。

10.2.5 軟件度量

軟件的兩種屬性:外部屬性指面向管理者和用戶的屬性,可直接測(cè)量一般為性能指標(biāo)。內(nèi)部屬性指軟件產(chǎn)品本身的的屬性,如可靠性等,只能間接測(cè)量。McCabe度量法:又稱為環(huán)路復(fù)雜度,假設(shè)有向圖中有向邊數(shù)為m,節(jié)點(diǎn)數(shù)為n,則此有向圖的環(huán)路復(fù)雜度為m-n+2。注意m和n代表的含義不能混淆,可以用一個(gè)最簡(jiǎn)單的環(huán)路來(lái)做特殊值記憶此公式,另外,針對(duì)一個(gè)程序流程圖,每一個(gè)分支邊(連線)就是一條有向邊,每一條語(yǔ)句(語(yǔ)句框)就是一個(gè)頂點(diǎn)。

10.3 系統(tǒng)維護(hù)

10.3.1 系統(tǒng)轉(zhuǎn)換

遺留系統(tǒng)是指任何基本上不能進(jìn)行修改和演化以滿足新的變化了的業(yè)務(wù)需求的信息系統(tǒng),它通常具有以下特點(diǎn): (1)系統(tǒng)雖然完成企業(yè)中許多重要的業(yè)務(wù)管理工作,但仍然不能完全滿足要求。一般實(shí)現(xiàn)業(yè)務(wù)處理電子化及部分企業(yè)管理功能,很少涉及經(jīng)營(yíng)決策。 (2)系統(tǒng)在性能上已經(jīng)落后,采用的技術(shù)已經(jīng)過(guò)時(shí)。例如多采用主機(jī)/終端形式或小型機(jī)系統(tǒng),軟件使用匯編語(yǔ)言或第三代程序設(shè)計(jì)語(yǔ)言的早期版本開(kāi)發(fā),使用文件系統(tǒng)而不是數(shù)據(jù)庫(kù)。 (3)通常是大型的軟件系統(tǒng),已經(jīng)融入企業(yè)的業(yè)務(wù)運(yùn)作和決策管理機(jī)制之中,維護(hù)工作十分困難。 (4)沒(méi)有使用現(xiàn)代信息系統(tǒng)建設(shè)方法進(jìn)行管理和開(kāi)發(fā),現(xiàn)在基本上已經(jīng)沒(méi)有文檔,很難理解。

系統(tǒng)轉(zhuǎn)換是指新系統(tǒng)開(kāi)發(fā)完畢,投入運(yùn)行,取代現(xiàn)有系統(tǒng)的過(guò)程,,需要考慮多方面的問(wèn)題,以實(shí)現(xiàn)與老系統(tǒng)的交接,有以下三種轉(zhuǎn)換計(jì)劃: (1)直接轉(zhuǎn)換:現(xiàn)有系統(tǒng)被新系統(tǒng)直接取代了,風(fēng)險(xiǎn)很大,適用于新系統(tǒng)不復(fù)雜或者現(xiàn)有系統(tǒng)已經(jīng)不能使用的情況。優(yōu)點(diǎn)是節(jié)省成本。 (2)并行轉(zhuǎn)換:新系統(tǒng)和老系統(tǒng)并行工作一段時(shí)間,新系統(tǒng)經(jīng)過(guò)試運(yùn)行后再取代若新系統(tǒng)在試運(yùn)行過(guò)程中有問(wèn)題,也不影響現(xiàn)有系統(tǒng)的運(yùn)行,風(fēng)險(xiǎn)極小,在試運(yùn)行過(guò)程中還可以比較新老系統(tǒng)的性能,適用于大型系統(tǒng)。缺點(diǎn)是耗費(fèi)人力和時(shí)間資源,難以控制兩個(gè)系統(tǒng)間的數(shù)據(jù)轉(zhuǎn)換。 (3)分段轉(zhuǎn)換:分期分批逐步轉(zhuǎn)換,是直接和并行轉(zhuǎn)換的集合,將大型系統(tǒng)分為多個(gè)子系統(tǒng),依次試運(yùn)行每個(gè)子系統(tǒng),成熟一個(gè)子系統(tǒng),就轉(zhuǎn)換一個(gè)子系統(tǒng)。同樣適用于大型項(xiàng)目,只是更耗時(shí),而且現(xiàn)有系統(tǒng)和新系統(tǒng)間混合使用,需要協(xié)調(diào)好接口等問(wèn)題。數(shù)據(jù)轉(zhuǎn)換與遷移:將數(shù)據(jù)從舊數(shù)據(jù)庫(kù)遷移到新數(shù)據(jù)庫(kù)中。有三種方法:系統(tǒng)切換前通過(guò)工具遷移、系統(tǒng)切換前采用手工錄入、系統(tǒng)切換后通過(guò)新系統(tǒng)生成。

10.3.2?系統(tǒng)維護(hù)

系統(tǒng)的可維護(hù)性可以定義為維護(hù)人員理解、改正、改動(dòng)和改進(jìn)這個(gè)軟件的難易程度,其評(píng)價(jià)指標(biāo)如下: (1)易分析性。軟件產(chǎn)品診斷軟件中的缺陷或失效原因或識(shí)別待修改部分的能力。 (2)易改變性。軟件產(chǎn)品使指定的修改可以被實(shí)現(xiàn)的能力,實(shí)現(xiàn)包括編碼、設(shè)計(jì)和文檔的更改。 (3)穩(wěn)定性。軟件產(chǎn)品避免由于軟件修改而造成意外結(jié)果的能力。 (4)易測(cè)試性。軟件產(chǎn)品使已修改軟件能被確認(rèn)的能力。 (5)維護(hù)性的依從性。軟件產(chǎn)品遵循與維護(hù)性相關(guān)的標(biāo)準(zhǔn)或約的能力。系統(tǒng)維護(hù)包括硬件維護(hù)、軟件維護(hù)和數(shù)據(jù)維護(hù),其中軟件維護(hù)類型如下正確性維護(hù): 發(fā)現(xiàn)了bug而進(jìn)行的修改; ●?正確性維護(hù):發(fā)現(xiàn)了bug而進(jìn)行的修改?!?適應(yīng)性維護(hù):由于外部環(huán)境發(fā)生了改變,被動(dòng)進(jìn)行的對(duì)軟件的修改和升級(jí)?!?完善性維護(hù):基于用戶主動(dòng)對(duì)軟件提出更多的需求,修改軟件,增加更多的功能,使其比之前的軟件功能、性能更高,更加完善。●?預(yù)防性維護(hù):對(duì)未來(lái)可能發(fā)生的bug進(jìn)行預(yù)防性的修改。

10.3.3?系統(tǒng)評(píng)價(jià)

【系統(tǒng)評(píng)價(jià)分類】 立項(xiàng)評(píng)價(jià):系統(tǒng)開(kāi)發(fā)前的預(yù)評(píng)價(jià),分析是否立項(xiàng)開(kāi)發(fā),做可行性評(píng)價(jià)。 中期評(píng)價(jià):項(xiàng)目開(kāi)發(fā)中期每個(gè)階段的階段評(píng)審。或者項(xiàng)目在開(kāi)發(fā)中途遇到重大變故,評(píng)價(jià)是否還要繼續(xù)。

結(jié)項(xiàng)評(píng)價(jià):系統(tǒng)投入正式運(yùn)行后,了解系統(tǒng)是否達(dá)到預(yù)期的目的和要求而對(duì)系統(tǒng)進(jìn)行的綜合評(píng)價(jià)。系統(tǒng)評(píng)價(jià)的指標(biāo) (1)從信息系統(tǒng)的組成部分出發(fā),信息系統(tǒng)是一個(gè)由人機(jī)共同組成的系統(tǒng),所以可以按照運(yùn)行效果和用戶需求(人)、系統(tǒng)質(zhì)量和技術(shù)條件(機(jī))這兩條線索構(gòu)造指標(biāo)。 (2)從信息系統(tǒng)的評(píng)價(jià)對(duì)象出發(fā),對(duì)于開(kāi)發(fā)方來(lái)說(shuō),他們所關(guān)心的是系統(tǒng)質(zhì)量和技術(shù)水平:對(duì)于用戶方而言,關(guān)心的是用戶需求和運(yùn)行質(zhì)量:系統(tǒng)外部環(huán)境則主要通過(guò)社會(huì)效益指標(biāo)來(lái)反映。 (3)從經(jīng)濟(jì)學(xué)角度出發(fā),分別按系統(tǒng)成本、系統(tǒng)效益和財(cái)務(wù)指標(biāo)3 條線索建立指標(biāo)。

10.4?面向?qū)ο箝_(kāi)發(fā)

(1)對(duì)象:由數(shù)據(jù)及其操作所構(gòu)成的封裝體,是系統(tǒng)中用來(lái)描述客觀事務(wù)的-個(gè)實(shí)體,是構(gòu)成系統(tǒng)的一個(gè)基本單位。一個(gè)對(duì)象通??梢杂蓪?duì)象名、屬性和方法3個(gè)部分組成。(2)類:現(xiàn)實(shí)世界中實(shí)體的形式化描述類將該實(shí)體的屬性(數(shù)據(jù)) 和操作(函數(shù))封裝在一起。對(duì)象是類的實(shí)例,類是對(duì)象的模板類可以分為三種:實(shí)體類、接口類《邊界類) 和控制類實(shí)體類的對(duì)象表示現(xiàn)實(shí)世界中真實(shí)的實(shí)體,如人、物等。接口類(邊界類) 的對(duì)象為用戶提供一種與系統(tǒng)合作交互的方式,分為人和系統(tǒng)兩大類,其中人的接口可以是顯示屏窗口、Web 窗體、對(duì)話框、菜單、列表框、其他顯示控制、條形碼、二維碼或者用戶與系統(tǒng)交互的其他方法。系統(tǒng)接口涉及到把數(shù)據(jù)發(fā)送到其他系統(tǒng),或者從其他系統(tǒng)接收數(shù)據(jù)??刂祁惖膶?duì)象用來(lái)控制活動(dòng)流,充當(dāng)協(xié)調(diào)者。(3) 抽象:通過(guò)特定的實(shí)例抽取共同特征以后形成概念的過(guò)程。它強(qiáng)調(diào)主要特征,忽略次要特征。一個(gè)對(duì)象是現(xiàn)實(shí)世界中一個(gè)實(shí)體的抽象,一個(gè)類是一組對(duì)象的抽象,抽象是一種單一化的描述,它強(qiáng)調(diào)給出與應(yīng)用相關(guān)的特性,拋棄不相關(guān)的特性。(4)封裝:是一種信息隱蔽技術(shù),將相關(guān)的概念組成一個(gè)單元模塊,并通過(guò)-個(gè)名稱來(lái)引用。面向?qū)ο蠓庋b是將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝成一個(gè)整體對(duì)象對(duì)數(shù)據(jù)的訪問(wèn)或修改只能通過(guò)對(duì)象對(duì)外提供的接口進(jìn)行(5)繼承:表示類之間的層次關(guān)系 (父類與子類)這種關(guān)系使得某類對(duì)象可以繼承另外一類對(duì)象的特征,又可分為單繼承和多繼承。(6)多態(tài):不同的對(duì)象收到同一個(gè)消息時(shí)產(chǎn)生完全不同的結(jié)果。包括參數(shù)多態(tài)(不同類型參數(shù)多種結(jié)構(gòu)類型)包含多態(tài) (父子類型關(guān)系) 、過(guò)載多態(tài) (類強(qiáng)制多態(tài)(強(qiáng)制類型轉(zhuǎn)換) 四種類型。多態(tài)以于重載,一個(gè)名字不同含義)由繼承機(jī)制支持,將通用消息放在抽象層,具體不同的功能實(shí)現(xiàn)放在低層。(7)接口: 描述對(duì)操作規(guī)范的說(shuō)明,其只說(shuō)明操作應(yīng)該做什么,并沒(méi)有定義操作如何做。(8)消息:體現(xiàn)對(duì)象間的交互,通過(guò)它向目標(biāo)對(duì)象發(fā)送操作請(qǐng)求(9)覆蓋:子類在原有父類接口的基礎(chǔ)上,用適合于自己要求的實(shí)現(xiàn)去置換父類中的相應(yīng)實(shí)現(xiàn)。即在子類中重定義一個(gè)與父類同名同參的方法(10)函數(shù)重載:與覆蓋要區(qū)分開(kāi),函數(shù)重載與子類父類無(wú)關(guān),且函數(shù)是同名不同參數(shù)。(11)綁定是一個(gè)把過(guò)程調(diào)用和響應(yīng)調(diào)用所需要執(zhí)行的代碼加以結(jié)合的過(guò)程在一般的程序設(shè)計(jì)語(yǔ)言中,綁定是在編譯時(shí)進(jìn)行的,叫作靜態(tài)綁定。動(dòng)態(tài)綁定則是在運(yùn)行時(shí)進(jìn)行的,因此,一個(gè)給定的過(guò)程調(diào)用和代碼的結(jié)合直到調(diào)用發(fā)生時(shí)才進(jìn)行。?

第十一章 數(shù)據(jù)庫(kù)設(shè)計(jì)

11.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述

數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的生命周期: (1)數(shù)據(jù)庫(kù)規(guī)劃:起點(diǎn),數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的任務(wù)陳述和任務(wù)目標(biāo)制定階段; (2)需求描述與分析:從用戶的角度,收集和整理用戶需求; (3)數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用程序設(shè)計(jì):?針對(duì)用戶數(shù)據(jù)的組織和存儲(chǔ)設(shè)計(jì),在此基礎(chǔ)上對(duì)數(shù)據(jù)操作及業(yè)務(wù)實(shí)現(xiàn)的設(shè)計(jì),包括事務(wù)設(shè)計(jì)和用戶界面設(shè)計(jì); (4)實(shí)現(xiàn):依據(jù)設(shè)計(jì),使用DBMS支持的DDL實(shí)現(xiàn)數(shù)據(jù)庫(kù)的建立,用高級(jí)語(yǔ)言編寫(xiě)應(yīng)用程序; (5)測(cè)試:對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行測(cè)試; (6)運(yùn)行維護(hù):不斷的對(duì)DBS進(jìn)行評(píng)價(jià)、調(diào)整與修改,直至系統(tǒng)消亡。

數(shù)據(jù)庫(kù)設(shè)計(jì)的一般策略:自頂向下,自底向上。數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟 (1)用戶需求分析·即分析數(shù)據(jù)存儲(chǔ)的要求和邊界,產(chǎn)出物有數(shù)據(jù)流圖、數(shù)據(jù)字典、需求說(shuō)明書(shū)。 (2)概念結(jié)構(gòu)設(shè)計(jì),設(shè)計(jì)用戶的數(shù)據(jù)模型,與具體DBMS無(wú)關(guān)的概念模型,一般般是設(shè)計(jì)E-R圖,也即實(shí)體-屬性圖,與物理實(shí)現(xiàn)無(wú)關(guān),就是說(shuō)明有哪些實(shí)體,實(shí)體有哪些屬性。(3)邏輯結(jié)構(gòu)設(shè)計(jì):(將抽象的概念模型轉(zhuǎn)化為與選用的DBMS 產(chǎn)品所支持的數(shù)據(jù)模型相符合的邏輯模型,它是物理結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ)。包括模式初始設(shè)計(jì)、子模式設(shè)計(jì)、應(yīng)用程序設(shè)計(jì)、模式評(píng)價(jià)以及模式求精。 (4)物理結(jié)構(gòu)設(shè)計(jì): 邏輯模型在計(jì)算機(jī)中的具體實(shí)現(xiàn)方案。 (5)數(shù)據(jù)庫(kù)實(shí)施階段。數(shù)據(jù)庫(kù)設(shè)計(jì)人員根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)階段的結(jié)果建立數(shù)據(jù)庫(kù),編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫(kù),并進(jìn)行試運(yùn)行。 (6)數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)階段。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)經(jīng)過(guò)試運(yùn)行即可投入運(yùn)行,但該階段需要不斷地對(duì)系統(tǒng)進(jìn)行評(píng)價(jià)、調(diào)整與修改。數(shù)據(jù)庫(kù)設(shè)計(jì)一般應(yīng)包括數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)和行為設(shè)計(jì)兩部分內(nèi)容。數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)是指系統(tǒng)整體邏輯模式與子模式的設(shè)計(jì),是對(duì)數(shù)據(jù)的分析設(shè)計(jì):數(shù)據(jù)庫(kù)的行為設(shè)計(jì)是指施加在數(shù)據(jù)庫(kù)上的動(dòng)態(tài)操作 (應(yīng)用程序集)的設(shè)計(jì),是對(duì)應(yīng)用系統(tǒng)功能的分析設(shè)計(jì)。

11.2 系統(tǒng)需求分析

在整個(gè)設(shè)計(jì)開(kāi)發(fā)過(guò)程中是最困難、最耗時(shí)的一步。需求分析的任務(wù):對(duì)現(xiàn)實(shí)世界中要處理的對(duì)象進(jìn)行詳細(xì)調(diào)查,確定新系統(tǒng)功能,收集支持系統(tǒng)目標(biāo)的基礎(chǔ)數(shù)據(jù)及處理方法。分析和表達(dá)用戶需求的方法主要包括自頂向下和自底向上兩類方法。需求分析的重點(diǎn)是調(diào)查組織機(jī)構(gòu)情況、調(diào)查各部門(mén)的業(yè)務(wù)活動(dòng)情況、協(xié)助用戶明確對(duì)新系統(tǒng)的各種要求、確定新系統(tǒng)的邊界,以此獲得用戶對(duì)系統(tǒng)的如下要求: (1)信息要求。用戶需要在系統(tǒng)中保存哪些信息,由這些保存的信息要得到什么樣的信息,這些信息以及信息間應(yīng)當(dāng)滿足的完整性要求。 (2)處理要求。用戶在系統(tǒng)中要實(shí)現(xiàn)什么樣的操作功能,對(duì)保存信息的處理過(guò)程和方式,各種操作處理的頻度、響應(yīng)時(shí)間要求、處理方式等以及處理過(guò)程中的安全性要求和完整性要求。 (3)系統(tǒng)要求。包括安全性要求、使用方式要求和可擴(kuò)充性要求。安全性要求:系統(tǒng)有幾種用戶使用,每一種用戶的使用權(quán)限如何。使用方式要求:用戶的使用環(huán)境是什么,平均有多少用戶同時(shí)使用,最高峰時(shí)有多少用戶同時(shí)使用,有無(wú)查詢相應(yīng)的時(shí)間要求等??蓴U(kuò)充性要求:對(duì)未來(lái)功能、性能和應(yīng)用訪問(wèn)的可擴(kuò)充性的要求。需求分析階段的文檔: 需求說(shuō)明文檔、數(shù)據(jù)流圖DFD、數(shù)據(jù)字典DD

11.3 概念結(jié)構(gòu)設(shè)計(jì)

概念結(jié)構(gòu)設(shè)計(jì)的目標(biāo)是產(chǎn)生反映系統(tǒng)信息需求的數(shù)據(jù)庫(kù)概念結(jié)構(gòu),即概念模式。概念結(jié)構(gòu)是獨(dú)立于支持?jǐn)?shù)據(jù)庫(kù)的DBMS 和使用的硬件環(huán)境的。此時(shí),i設(shè)計(jì)人員從用戶的角度看待數(shù)據(jù)以及數(shù)據(jù)處理的要求和約束,產(chǎn)生一個(gè)反映用戶觀點(diǎn)的概念模式,然后再把概念模式轉(zhuǎn)換為邏輯模式。概念結(jié)構(gòu)設(shè)計(jì)策略與方法: 自頂向上、自底向上、逐步擴(kuò)張、混合策略。使用E-R 方法,無(wú)論是哪種策略,都要對(duì)現(xiàn)實(shí)事物加以抽象認(rèn)識(shí),以E-R 圖的形式描述出來(lái)對(duì)現(xiàn)實(shí)事物抽象認(rèn)識(shí)的三種方法分別是分類、聚集和概括。 (1)分類:對(duì)現(xiàn)實(shí)世界的事物,按照其具有的共同特征和行為,定義一種類型。這在現(xiàn)實(shí)生活中很常見(jiàn),如學(xué)校中的學(xué)生和教師就屬于不同的類型。在某一類型中,個(gè)體是類型的一個(gè)成員或?qū)嵗础癷s member of”,如李娜是學(xué)生類型中的一個(gè)成員。 (2)聚集:定義某一類型所具有的屬性。如學(xué)生類型具有學(xué)號(hào)、姓名、性別、班級(jí)等共同屬性每一個(gè)學(xué)生都是這一類型中的個(gè)體,通過(guò)在這些屬性上的不同取值來(lái)區(qū)分。各個(gè)屬性是所屬類型的一個(gè)成份,即“is part of”,如姓名是學(xué)生類型的一個(gè)成份。 (3)概括:由一種己知類型定義新的類型。如由學(xué)生類型定義研究生類型,在學(xué)生類型的屬性上增加導(dǎo)師等其他屬性就構(gòu)成研究生類型。通常把己知類型稱為超類,新定義的類型稱為子類。子類是超類的一個(gè)子集,即“is subset of”,如研究生是學(xué)生的一個(gè)子集。用E-R方法建立概念模型: (1)選擇局部應(yīng)用:依據(jù)數(shù)據(jù)流圖,將龐大的數(shù)據(jù)劃分成一個(gè)個(gè)局部應(yīng)用場(chǎng)景。 (2)逐一設(shè)計(jì)分E-R圖:依據(jù)局部應(yīng)用,設(shè)計(jì)分E-R圖?,F(xiàn)實(shí)生活中許多事物,作為實(shí)體還是屬性沒(méi)有明確的界定,這需要根據(jù)具體情況而定,一般遵循以下兩條準(zhǔn)則:屬性不可再分,即屬性不再具有需要描述的性質(zhì),不能有屬性的屬性屬性不能與其他實(shí)體發(fā)生聯(lián)系,聯(lián)系是實(shí)體與實(shí)體間的聯(lián)系。 (3)E-R圖合并: 多個(gè)分E-R圖合并 合并的目的是為了消除分E-R圖之間存在的沖突和信息幾余,會(huì)產(chǎn)生如下沖突:屬性沖突:同一屬性可能會(huì)存在不同的分E-R圖,由于設(shè)計(jì)人員不同或是出發(fā)點(diǎn)不同,屬性的類型、取值范圍及數(shù)據(jù)單位可能會(huì)不一致。命名沖突:相同意義的屬性,在不同分E-R圖上有著不同的命名,或者是不同意義的屬性有著相同的名稱。同一實(shí)體在不同的分E-R圖中有不同的屬性,同一個(gè)對(duì)象在分E-R圖中被抽象為實(shí)體結(jié)構(gòu)沖突:或?qū)傩?。E-R圖合并時(shí)的優(yōu)化: (1)實(shí)體類型的合并:兩個(gè)具有1:1 聯(lián)系或1:聯(lián)系的實(shí)體,可以予以合并,使實(shí)體個(gè)數(shù)減少有利于減少將來(lái)數(shù)據(jù)庫(kù)操作過(guò)程中的連接開(kāi)銷 (2)幾余屬性的消除:一般在各分E-R 圖中的屬性是不存在余的,但合并后就可能出現(xiàn)幾余因?yàn)楹喜⒑蟮腅-R 圖中的實(shí)體繼承了合并前該實(shí)體在分E-R 圖中的全部屬性,屬性間就可能存在幾余,即某一屬性可以由其他屬性確定。 (3)幾余聯(lián)系的消除:在分E-R 圖合并過(guò)程中,可能會(huì)出現(xiàn)實(shí)體聯(lián)系的環(huán)狀結(jié)構(gòu),即某一實(shí)體A另一實(shí)體B 間有直接聯(lián)系,同時(shí)A 又通過(guò)其他實(shí)體與實(shí)體B 發(fā)生間接聯(lián)系,通常直接聯(lián)系可以通過(guò)間接聯(lián)系所表達(dá),可消除直接聯(lián)系。

11.4 邏輯結(jié)構(gòu)設(shè)計(jì)

邏輯結(jié)構(gòu)設(shè)計(jì)的主要任務(wù):確定數(shù)據(jù)模型、將E-R圖轉(zhuǎn)換為指定的數(shù)據(jù)模型、確定完整性約束、確定用戶視圖。E-R圖轉(zhuǎn)換為關(guān)系模式: 1.實(shí)體向關(guān)系模式的轉(zhuǎn)換:將E-R 圖中的實(shí)體逐一轉(zhuǎn)換成為一個(gè)關(guān)系模式實(shí)體名對(duì)應(yīng)關(guān)系模式的名稱,實(shí)體的屬性轉(zhuǎn)換為關(guān)系模式的屬性,實(shí)體標(biāo)識(shí)符就是關(guān)系的碼。 2.聯(lián)系向關(guān)系模式的轉(zhuǎn)換: (1)一對(duì)一聯(lián)系的轉(zhuǎn)換。通常一對(duì)一聯(lián)系不需要將其轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,只需要將聯(lián)系歸并到關(guān)聯(lián)的兩個(gè)實(shí)體的任一方,給待歸并的一方實(shí)體屬性集中增加另一方實(shí)體的碼和該聯(lián)系的屬性即可,歸并后的實(shí)體碼保持不變。 (2)一對(duì)多聯(lián)系的轉(zhuǎn)換。通常一對(duì)多聯(lián)系也不需要將其轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,只需要將聯(lián)系歸并到關(guān)聯(lián)的兩個(gè)實(shí)體的多方,給待歸并的多方實(shí)體屬性集中增加一方實(shí)體的碼和該聯(lián)系的屬性即可,歸并后的多方實(shí)體碼保持不變。 (3)多對(duì)多聯(lián)系的轉(zhuǎn)換。多對(duì)多聯(lián)系只能轉(zhuǎn)換成一個(gè)獨(dú)立的關(guān)系模式,關(guān)系模式的名稱取聯(lián)系的名稱,關(guān)系模式的屬性取該聯(lián)系所關(guān)聯(lián)的兩個(gè)多方實(shí)體的碼及聯(lián)系的屬性,關(guān)系的碼是多方實(shí)體的碼構(gòu)成的屬性組。由E-R圖轉(zhuǎn)換得來(lái)的初始關(guān)系模式并不完全符合要求,還會(huì)有數(shù)據(jù)幾余或更新異常存在,需要經(jīng)過(guò)進(jìn)一步的規(guī)范化處理,步驟如下: (1)根據(jù)語(yǔ)義確定各關(guān)系模式的數(shù)據(jù)依賴 (2)根據(jù)數(shù)據(jù)依賴確定關(guān)系模式的范式 (3)如果關(guān)系模式不符合要求,要根據(jù)關(guān)系模式的分解算法進(jìn)行分解,達(dá)到規(guī)定范式級(jí)別(4)關(guān)系模式的評(píng)價(jià)及修正。根據(jù)處理要求,可能還需要增加部分幾余以滿足處理要求,這就需要做部分關(guān)系模式的處理,分解、合并或增加幾余屬性,提高存儲(chǔ)效率和處理效率。確定完整性約束:根據(jù)規(guī)范化理論確定了關(guān)系模式之后,還要對(duì)關(guān)系模式加以約束包括數(shù)據(jù)項(xiàng)的約束、表級(jí)約束及表間約束等確定用戶視圖:確定了整個(gè)系統(tǒng)的關(guān)系模式之后,還要根據(jù)數(shù)據(jù)流圖及用戶信息建立視圖模式提高數(shù)據(jù)的安全性和獨(dú)立性: (1)根據(jù)數(shù)據(jù)流圖確定處理過(guò)程使用的視圖。 (2)根據(jù)用戶類型確定不同用戶使用的視圖。

11.5 物理結(jié)構(gòu)設(shè)計(jì)

數(shù)據(jù)庫(kù)在物理設(shè)備上的存儲(chǔ)結(jié)構(gòu)與存取方法稱為數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),它依賴于給定的計(jì)算機(jī)系統(tǒng)。為一個(gè)給定的邏輯數(shù)據(jù)模型設(shè)計(jì)個(gè)最適合應(yīng)用要求的物理結(jié)構(gòu)的過(guò)程,就是數(shù)據(jù)庫(kù)的物理設(shè)計(jì)。數(shù)據(jù)庫(kù)物理設(shè)計(jì)的目標(biāo): (1)使設(shè)計(jì)出的物理數(shù)據(jù)庫(kù)占用較少的存儲(chǔ)空間。 (2)對(duì)數(shù)據(jù)庫(kù)的操作具有盡可能高的速度。物理設(shè)計(jì)的步驟: 1.確定數(shù)據(jù)分布:從企業(yè)計(jì)算機(jī)應(yīng)用環(huán)境出發(fā),需要確定數(shù)據(jù)是集中管理還是分布式管理,但目前企業(yè)內(nèi)部網(wǎng)及因特網(wǎng)的應(yīng)用越來(lái)越廣泛,大都采用分布式管理。對(duì)于數(shù)據(jù)如何分布需要從以下幾個(gè)方面考慮: ? (1)根據(jù)不同應(yīng)用分布數(shù)據(jù)。 ??(2)根據(jù)處理要求確定數(shù)據(jù)的分布。 ??(3)對(duì)數(shù)據(jù)的分布存儲(chǔ)必然會(huì)導(dǎo)致數(shù)據(jù)的邏輯結(jié)構(gòu)的變化,要對(duì)關(guān)系模式做新的調(diào)整,回到數(shù)? ? 據(jù)庫(kù)邏輯設(shè)計(jì)階段做必要的修改。 2.確定數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu):存儲(chǔ)結(jié)構(gòu)具體指數(shù)據(jù)文件中記錄之間的物理結(jié)構(gòu)。在文件中,數(shù)據(jù)是以記錄為單位存儲(chǔ)的,可以采用順序存儲(chǔ)、哈希存儲(chǔ)、堆存儲(chǔ)和B + 樹(shù)存儲(chǔ)等方式。為提高數(shù)據(jù)的訪問(wèn)速度,通常會(huì)采用索引技術(shù)。 3.確定數(shù)據(jù)的訪問(wèn)方式:數(shù)據(jù)的訪問(wèn)方式是由其存儲(chǔ)結(jié)構(gòu)所決定的,采用什么樣的存儲(chǔ)結(jié)構(gòu),就使用什么樣的訪問(wèn)方式。數(shù)據(jù)庫(kù)物理結(jié)構(gòu)主要由存儲(chǔ)記錄格式、記錄在物理設(shè)備上的安排及訪問(wèn)路徑(存取方法)等構(gòu)成包括記錄的組成、數(shù)據(jù)項(xiàng)的類型、長(zhǎng)度和數(shù)據(jù)項(xiàng)間的聯(lián)系,以及邏輯記錄: 1)存儲(chǔ)記錄結(jié)構(gòu)設(shè)計(jì):到存儲(chǔ)記錄的映射。 2)存儲(chǔ)記錄布局:就是確定數(shù)據(jù)的存放位置。存儲(chǔ)記錄作為一個(gè)整體,如何分布在物理區(qū)域上是數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)的重要環(huán)節(jié)。采用聚簇功能可以大大提高按聚簇碼進(jìn)行查詢的效率。建立聚簇索引的原則如下: ? ? (1)聚簇碼的值相對(duì)穩(wěn)定,沒(méi)有或很少需要進(jìn)行修改。 ? ? (2)表主要用于查詢,并且通過(guò)聚簇碼進(jìn)行訪問(wèn)或連接是該表的主要應(yīng)用。 ? ? (3)對(duì)應(yīng)每個(gè)聚簇碼值的平均元組數(shù)既不太多,也不太少。 3)存取方法的設(shè)計(jì):是為存儲(chǔ)在物理設(shè)備 (通常是外存儲(chǔ)器)上的數(shù)據(jù)提供存儲(chǔ)和檢索的能力是快速存取數(shù)據(jù)庫(kù)中數(shù)據(jù)的技術(shù)。存取方法包括存儲(chǔ)結(jié)構(gòu)和檢索機(jī)制兩部分。其中:存儲(chǔ)結(jié)構(gòu)限定了可能訪問(wèn)的路徑和存儲(chǔ)記錄:檢索機(jī)制定義每個(gè)應(yīng)用的訪問(wèn)路徑。在數(shù)據(jù)庫(kù)中建立存取路徑最普遍的方法是建立索引。確定索引的一般順序如下: (1)首先可確定關(guān)系的存儲(chǔ)結(jié)構(gòu),即記錄的存放是無(wú)序的,還是按某屬性(或?qū)傩越M)聚簇存放。 (2)確定不宜建立索引的屬性或表。 (3)確定宜建立索引的屬性。

11.6 實(shí)施階段

根據(jù)邏輯和物理設(shè)計(jì)的結(jié)果,在計(jì)算機(jī)上建立起實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu),數(shù)據(jù)加載(或稱裝入)進(jìn)行試運(yùn)行和評(píng)價(jià)的過(guò)程,叫作數(shù)據(jù)庫(kù)的實(shí)施(或稱實(shí)現(xiàn))。1)建立實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu): 用DBMS 提供的數(shù)據(jù)定義語(yǔ)言(DDL)編寫(xiě)描述邏輯設(shè)計(jì)和物理設(shè)計(jì)結(jié)果的程序(一般稱為數(shù)據(jù)庫(kù)腳本程序),經(jīng)計(jì)算機(jī)編譯處理和執(zhí)行后,就生成了實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu)。應(yīng)包含以下內(nèi)容: (1)數(shù)據(jù)庫(kù)模式與子模式以及數(shù)據(jù)庫(kù)空間等的描述; (2)數(shù)據(jù)庫(kù)完整性描述; (3)數(shù)據(jù)庫(kù)安全性描述; (4)數(shù)據(jù)庫(kù)物理存儲(chǔ)參數(shù)描述。2)數(shù)據(jù)加載:數(shù)據(jù)庫(kù)應(yīng)用程序的設(shè)計(jì)應(yīng)該與數(shù)據(jù)庫(kù)設(shè)計(jì)同時(shí)進(jìn)行。一般地,應(yīng)用程序的設(shè)計(jì)應(yīng)該包括數(shù)據(jù)庫(kù)加載程序的設(shè)計(jì)。3)數(shù)據(jù)庫(kù)試運(yùn)行和評(píng)價(jià):一般將數(shù)據(jù)庫(kù)的試運(yùn)行和評(píng)價(jià)結(jié)合起來(lái)的目的是測(cè)試應(yīng)用程序的功能測(cè)試數(shù)據(jù)庫(kù)的運(yùn)行效率是否達(dá)到設(shè)計(jì)目標(biāo),是否為用戶所容忍。

11.7 運(yùn)行與維護(hù)?

11.7.1 數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行

數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行計(jì)劃主要包括三個(gè)方面: 數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行策略、數(shù)據(jù)庫(kù)系統(tǒng)監(jiān)控對(duì)象和監(jiān)控方式以及數(shù)據(jù)庫(kù)系統(tǒng)管理計(jì)劃。

制定運(yùn)行策略:要考慮正常運(yùn)行策略和非正常運(yùn)行策略兩個(gè)方面。 (1)正常運(yùn)行策略是指在正常運(yùn)行狀態(tài)下的數(shù)據(jù)庫(kù)執(zhí)行策略,包括: 系統(tǒng)運(yùn)行對(duì)物理環(huán)境的要求; 系統(tǒng)運(yùn)行對(duì)人員的要求; 數(shù)據(jù)庫(kù)的安全性策略; 數(shù)據(jù)庫(kù)備份和恢復(fù)策略 (2)非正常運(yùn)行策略是指在特殊時(shí)期的數(shù)據(jù)庫(kù)運(yùn)行策略,包括: 突發(fā)事件的應(yīng)對(duì)策略; 高負(fù)載狀態(tài)的應(yīng)對(duì)策略確定數(shù)據(jù)庫(kù)系統(tǒng)監(jiān)控對(duì)象和監(jiān)控方式 (1)依照監(jiān)控對(duì)象的不同,系數(shù)據(jù)庫(kù)系統(tǒng)監(jiān)控的對(duì)象分別是系統(tǒng)性能系統(tǒng)故障和系統(tǒng)安全00統(tǒng)監(jiān)控分為性能監(jiān)控、故障監(jiān)控、安全監(jiān)控。 ●?性能監(jiān)控是掌握系統(tǒng)運(yùn)行性能的手段。 ●?性能監(jiān)控應(yīng)當(dāng)從資源占用率、事務(wù)響應(yīng)時(shí)間、事務(wù)量死鎖、用戶量等方面實(shí)現(xiàn)。 ●?故障監(jiān)控是保障數(shù)據(jù)庫(kù)系統(tǒng)正常運(yùn)行的手段。從數(shù)據(jù)庫(kù)系統(tǒng)故障的類型入手,監(jiān)控事務(wù)故障系統(tǒng)故障和介質(zhì)故障,出現(xiàn)需要管理員干預(yù)的故障時(shí)及時(shí)恢復(fù)。 ●?安全監(jiān)控是對(duì)破壞數(shù)據(jù)庫(kù)安全事件的監(jiān)控,包括入侵監(jiān)控、用戶訪問(wèn)監(jiān)控、病毒監(jiān)控等。 (2)數(shù)據(jù)庫(kù)系統(tǒng)的監(jiān)控方式分為系統(tǒng)監(jiān)控和應(yīng)用程序監(jiān)控系統(tǒng)。 ●?監(jiān)控是通過(guò)DBMS 提供的監(jiān)控功能,進(jìn)行參數(shù)設(shè)定后,由系統(tǒng)自動(dòng)監(jiān)控。 ●?應(yīng)用程序監(jiān)控需要管理人員根據(jù)具體情況編制應(yīng)用程序進(jìn)行系統(tǒng)監(jiān)控,是對(duì)DBMS監(jiān)控功能的補(bǔ)充。需要注意的是,系統(tǒng)日志是監(jiān)控中的主要依據(jù)。日志文件詳細(xì)記錄了系統(tǒng)運(yùn)行中的各種信息管理員可以從日志文件中了解系統(tǒng)運(yùn)行狀態(tài)和事件,以此為據(jù)發(fā)現(xiàn)系統(tǒng)運(yùn)行中的問(wèn)題。

1.監(jiān)控?cái)?shù)據(jù)的收集與分析:系統(tǒng)監(jiān)控能夠動(dòng)態(tài)地掌握數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài),監(jiān)控就是對(duì)系統(tǒng)運(yùn)行信息的記錄,稱為監(jiān)控?cái)?shù)據(jù),監(jiān)控?cái)?shù)據(jù)是發(fā)現(xiàn)系統(tǒng)問(wèn)題和改進(jìn)系統(tǒng)性能的依據(jù)。依照監(jiān)控的類型,監(jiān)控?cái)?shù)據(jù)分為性能監(jiān)控?cái)?shù)據(jù)、故障監(jiān)控?cái)?shù)據(jù)和安全監(jiān)控?cái)?shù)據(jù)2.穩(wěn)定運(yùn)行中的業(yè)務(wù)持續(xù)性:業(yè)務(wù)持續(xù)性是指一個(gè)組織的主要業(yè)務(wù)流程、營(yíng)運(yùn)服務(wù),以及IT 服務(wù)能夠得到連續(xù)性處理。業(yè)務(wù)持續(xù)性需要從以下方面考慮: (1)界定哪些是不允許停工的持續(xù)性業(yè)務(wù),哪些是允許有一定時(shí)間的停工期的彈性業(yè)務(wù); (2)要有業(yè)務(wù)持續(xù)性的技術(shù)體系,如高效率服務(wù)器、存儲(chǔ)系統(tǒng)、網(wǎng)絡(luò)、DBMS; (3)檢測(cè)和響應(yīng)管理,包括緊急決策制定、準(zhǔn)備工作、最初的緊急響應(yīng)和系統(tǒng)恢復(fù)等所有詳細(xì)程序; (4)要有保障業(yè)務(wù)持續(xù)性的設(shè)備 (5)界定相關(guān)人員的職務(wù)和權(quán)責(zé)包括各類技術(shù)人員(程序員、管理員和操作員》,執(zhí)行經(jīng)理(緊急事件決策者),設(shè)備管理人員(電力、供冷、電纜),人力資源 (人事問(wèn)題和需求),業(yè)務(wù)實(shí)體(業(yè)務(wù)流程),以及外部組織(外包機(jī)構(gòu)、電信、供應(yīng)商等》。

11.7.2 數(shù)據(jù)庫(kù)系統(tǒng)的維護(hù)?

數(shù)據(jù)庫(kù)維護(hù):在數(shù)據(jù)庫(kù)運(yùn)行階段,對(duì)數(shù)據(jù)庫(kù)的維護(hù)主要由DBA 完成: 1)對(duì)數(shù)據(jù)庫(kù)性能的監(jiān)測(cè)和改善; 2)數(shù)據(jù)庫(kù)的備份及故障恢復(fù); 3)數(shù)據(jù)庫(kù)重組和重構(gòu):數(shù)據(jù)庫(kù)的重組是指在不改變數(shù)據(jù)庫(kù)邏輯和物理結(jié)構(gòu)的情況下,去除數(shù)據(jù)庫(kù)存儲(chǔ)文件中的廢棄空間以及碎片空間中的指針鏈,使數(shù)據(jù)庫(kù)記錄在物理上緊連。在數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行過(guò)程中,可能會(huì)由于某些原因需要修改數(shù)據(jù)庫(kù)的結(jié)構(gòu),稱為數(shù)據(jù)庫(kù)重構(gòu).對(duì)于如下情況,數(shù)據(jù)庫(kù)重組和重構(gòu)的處理方法為: (1)修改屬性列名或數(shù)據(jù)類型:由于修改表中的屬性列名或數(shù)據(jù)類型,必須修改使用該表的應(yīng)用程序,所以應(yīng)盡量減少這樣的修改。 (2)增加和刪除屬性:只修改使用該列的應(yīng)用程序。 (3)約束的修改:如果是DBMS 支持的約束,如主碼約束、參照完整性約束和檢查約束,一般不需要修改應(yīng)用程序,復(fù)雜的約束可以通過(guò)修改觸發(fā)器程序?qū)崿F(xiàn)。 (4)表的分解:可以通過(guò)建立與分解前表同名的視圖來(lái)避免修改應(yīng)用程序。但這樣會(huì)相應(yīng)引起性能的下降,如果分解是為了提高性能,則需要修改應(yīng)用程序,只訪問(wèn)分解后的一個(gè)表。 (5)表的合并:通常也是為了提高系統(tǒng)性能,可以通過(guò)建立兩個(gè)與原表同名的視圖來(lái)避免應(yīng)用程序的修改。在數(shù)據(jù)庫(kù)重構(gòu)過(guò)程中引入或修改視圖,可能會(huì)影響數(shù)據(jù)的安全性,因此必須對(duì)視圖進(jìn)行評(píng)價(jià)和驗(yàn)證,保證不會(huì)因?yàn)閿?shù)據(jù)庫(kù)的重構(gòu)而引起數(shù)據(jù)的泄密。文檔必須與系統(tǒng)保持一致性,否則會(huì)造成人為的困難和錯(cuò)誤。修改歷史必須在文檔中體現(xiàn)。

11.7.3 數(shù)據(jù)庫(kù)系統(tǒng)的管理

數(shù)據(jù)字典的管理:當(dāng)用戶使用DDL 語(yǔ)言定義數(shù)據(jù)庫(kù)對(duì)象或某些DML語(yǔ)言進(jìn)行表擴(kuò)展等操作時(shí)系統(tǒng)會(huì)自動(dòng)修改數(shù)據(jù)字典中的元數(shù)據(jù)。數(shù)據(jù)字典是只讀的,可以利用DBMS 提供相應(yīng)的數(shù)據(jù)字典訪問(wèn)命令,訪問(wèn)數(shù)據(jù)字典的內(nèi)容。數(shù)據(jù)完整性維護(hù)和管理: 是通過(guò)DBMS 系統(tǒng)提供的完整性約束機(jī)制和應(yīng)用程序來(lái)實(shí)現(xiàn),以保證運(yùn)行過(guò)程中數(shù)據(jù)的正確性。在系統(tǒng)運(yùn)行過(guò)程中對(duì)數(shù)據(jù)完整性的維護(hù)和管理采用兩種方式: (1)對(duì)于DBMS 管理的約束,通過(guò)修改數(shù)據(jù)庫(kù)的定義,如增加或刪除實(shí)體完整性約束、參照完整性約束、檢查約束來(lái)實(shí)現(xiàn)。 (2)對(duì)于應(yīng)用程序?qū)崿F(xiàn)的復(fù)雜的完整性約束,通過(guò)分析和修改應(yīng)用程序,通常是采用觸發(fā)器程序來(lái)實(shí)現(xiàn)。數(shù)據(jù)庫(kù)的存儲(chǔ)管理:通過(guò)以下手段進(jìn)行存儲(chǔ)管理,可有效地提高系統(tǒng)性能: (1)索引文件和數(shù)據(jù)文件分開(kāi)存儲(chǔ),事務(wù)日志文件存儲(chǔ)在高速設(shè)備上。 (2)適時(shí)修改數(shù)據(jù)文件和索引文件的頁(yè)面大小。 (3)定期對(duì)數(shù)據(jù)進(jìn)行排序。 (4)增加必要的索引項(xiàng)。除進(jìn)行數(shù)據(jù)庫(kù)的存儲(chǔ)管理之外,也可以通過(guò)增加計(jì)算機(jī)內(nèi)存、引入高速存儲(chǔ)設(shè)備等方式來(lái)提高系統(tǒng)的訪問(wèn)效率。備份和恢復(fù):備份計(jì)劃的制訂和實(shí)施,有以下建議: (1)根據(jù)數(shù)據(jù)變更情況,設(shè)定合理的備份周期和備份時(shí)間,最好是在業(yè)務(wù)量最小的時(shí)段進(jìn)行備份。 (2)事務(wù)日志文件保存在最穩(wěn)定的存儲(chǔ)設(shè)備上。 (3)定期在事務(wù)日志文件中加入檢查點(diǎn)(Checkpoint)。并發(fā)控制與死鎖管理:管理員通過(guò)系統(tǒng)監(jiān)控了或系統(tǒng)日志,找出頻繁產(chǎn)生死鎖的事務(wù),分析死鎖的原因,修改事務(wù)程序來(lái)減少死鎖,提高系統(tǒng)的井發(fā)性。數(shù)據(jù)安全性管理:實(shí)際運(yùn)行中的數(shù)據(jù)庫(kù)系統(tǒng)可以從以下幾個(gè)方面實(shí)現(xiàn)安全性管理: (1)建立網(wǎng)絡(luò)級(jí)安全,主要是防火墻的設(shè)置。 (2)操作系統(tǒng)級(jí)安全,進(jìn)行登錄用戶的管理。 (3)DBMS級(jí)安全,對(duì)訪問(wèn)數(shù)據(jù)庫(kù)的用戶進(jìn)行密碼驗(yàn)證。 (4)角色和用戶的授權(quán)管理。 (5)建立視圖和存儲(chǔ)過(guò)程加強(qiáng)安全性。 (6)使用審計(jì)功能,為追糾非法入侵者法律責(zé)任提供證據(jù),發(fā)現(xiàn)安全漏洞。

11.7.4 性能調(diào)整

SQL語(yǔ)句的編碼校驗(yàn): ●?盡可能的減少多表查詢或建立物化視圖 ●?以不相關(guān)子查詢代替相關(guān)子查詢。 ●?只檢索需要的列。 ●?用帶IN的條件子句等價(jià)替換OR子句。 ●?經(jīng)常提交commit,以盡早釋放鎖。表設(shè)計(jì)的評(píng)價(jià): ●?如果頻繁的對(duì)兩個(gè)相關(guān)表進(jìn)行連接操作,考慮將其合并; ●?如果頻繁的訪問(wèn)表中的某一部分字段,考慮分解表,將該部分單獨(dú)作為一個(gè)表; ●?對(duì)于很少更新的表,引入物化視圖。索引維護(hù)和改進(jìn): ●?如果查詢時(shí)瓶頸則在關(guān)系上建立適當(dāng)?shù)乃饕?,通常,在作為查詢條件的屬性上建立索引可以提高查詢效率; ●?如果更新是瓶頸,考慮刪除某些索引; ●?選擇適當(dāng)?shù)乃饕愋?,如果?jīng)常使用范圍查詢,則B樹(shù)索引比散列索引更高效; ●?將有利于大多數(shù)數(shù)據(jù)查詢和更新的索引設(shè)為聚簇索引。設(shè)備增強(qiáng):在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行過(guò)程中,如果經(jīng)過(guò)各種調(diào)整之后,仍不能滿足性能要求,則應(yīng)當(dāng)考慮增強(qiáng)系統(tǒng)設(shè)備。例如,引入高速的計(jì)算機(jī)、增加系統(tǒng)內(nèi)存、使用高速的網(wǎng)絡(luò)設(shè)備和高速的存儲(chǔ)設(shè)備等方面。

第十二章 事務(wù)管理

12.1 事務(wù)的基本概念

DBMS運(yùn)行的基本工作單位是事務(wù)。事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作序列要么全做,要么全不做,是一個(gè)不可分割的工作單位,事務(wù)和程序是兩個(gè)不同的概念,一般一個(gè)程序可包含多個(gè)事務(wù)。一個(gè)事務(wù)由應(yīng)用程序的一組操作序列組成,事務(wù)定義的語(yǔ)句如下: (1)BEGIN TRANSACTION: 事務(wù)開(kāi)始; (2)END TRANSACTION: 事務(wù)結(jié)束; (3)COMMIT:事務(wù)提交。該操作表示事務(wù)成功地結(jié)束,它將通知事務(wù)管理器該事務(wù)的所有更新操作現(xiàn)在可以被提交或永久地保留; (4)ROLLBACK:事務(wù)回滾。該操作表示事務(wù)非成功地結(jié)束,它將通知事務(wù)管理器出故障了,數(shù)據(jù)庫(kù)可能處于不一致?tīng)顟B(tài),該事務(wù)的所有更新操作必須回滾或撤銷。事務(wù)狀態(tài): 如果不出現(xiàn)故障,那么所有事務(wù)都能執(zhí)行完成。一旦在執(zhí)行過(guò)程中發(fā)生故障,不能執(zhí)行完成的事務(wù)稱為中止事務(wù);將中止事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新撤銷稱為事務(wù)回滾;成功執(zhí)行完成的事務(wù)稱為己提交事務(wù)。中止的事務(wù)是可以回滾的,通過(guò)回滾恢復(fù)數(shù)據(jù)庫(kù),保持?jǐn)?shù)據(jù)庫(kù)的一致性,這是DBMS的責(zé)任。己提交的事務(wù)是不能回滾的,必須由程序員或DBA 手工執(zhí)行一個(gè)“補(bǔ)償事務(wù)”才能撤銷提交的事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響。為了更明確地描述事務(wù)的執(zhí)行過(guò)程,一般將事務(wù)的執(zhí)行狀態(tài)分為五種: (1)活動(dòng)狀態(tài):事務(wù)的初始狀態(tài),事務(wù)執(zhí)行時(shí)處于這個(gè)狀態(tài)。 (2)部分提交狀態(tài):當(dāng)操作序列的最后一條語(yǔ)句自動(dòng)執(zhí)行后,事務(wù)處于部分提交狀態(tài)。這時(shí)事務(wù)雖然己經(jīng)完全執(zhí)行,但由于實(shí)際輸出可能還臨時(shí)駐留在內(nèi)存中,在事務(wù)成功完成前仍有可能出現(xiàn)硬件故障,事務(wù)仍有可能不得不中止。因此,部分提交狀態(tài)并不等于事務(wù)成功執(zhí)行。 (3)失敗狀態(tài):由于硬件或邏輯等錯(cuò)誤,使得事務(wù)不能繼續(xù)正常執(zhí)行,事務(wù)就進(jìn)入了失敗狀態(tài)處于失敗狀態(tài)的事務(wù)必須進(jìn)行回滾 (ROLLBACK) 。這樣,事務(wù)就進(jìn)入了中止?fàn)顟B(tài)。 (4)中止?fàn)顟B(tài):事務(wù)回滾并且數(shù)據(jù)庫(kù)恢復(fù)到事務(wù)開(kāi)始執(zhí)行前的狀態(tài)??蛇x重啟事務(wù)或殺死事務(wù)。 (5)提交狀態(tài):當(dāng)事務(wù)成功完成后,稱事務(wù)處于提交狀態(tài)。只有事務(wù)處于提交狀態(tài)后,才能說(shuō)事務(wù)已經(jīng)提交。

12.2 數(shù)據(jù)庫(kù)的并發(fā)控制

事務(wù):由一系列操作組成,這些操作,要么全做,要么全不做,擁有四種特性,詳解如下:(操作)原子性:要么全做,要么全不做。(數(shù)據(jù))一致性:事務(wù)發(fā)生后數(shù)據(jù)是一致的,例如銀行轉(zhuǎn)賬,不會(huì)存在A賬戶轉(zhuǎn)出,但是B賬戶沒(méi)收到的情況。(執(zhí)行)隔離性:任一事務(wù)的更新操作直到其成功提交的整個(gè)過(guò)程對(duì)其他事務(wù)都是不可見(jiàn)的,不同事務(wù)之間是隔離的,互不干涉。(改變)持續(xù)性:事務(wù)操作的結(jié)果是持續(xù)性的。事務(wù)是并發(fā)控制的前提條件,并發(fā)控制就是控制不同的事務(wù)并發(fā)執(zhí)行,提高系統(tǒng)效率,但是并發(fā)控制中存在下面三個(gè)問(wèn)題:丟失更新:事務(wù)1對(duì)數(shù)據(jù)A進(jìn)行了修改并寫(xiě)回事務(wù)2也對(duì)A進(jìn)行了修改并寫(xiě)回此時(shí)事務(wù)2寫(xiě)回的數(shù)據(jù)會(huì)覆蓋事務(wù)1寫(xiě)回的數(shù)據(jù),就丟失了事務(wù)1對(duì)A的更新。即對(duì)數(shù)據(jù)A的更新會(huì)被覆蓋不可重復(fù)讀:事務(wù)2讀A,而后事務(wù)1對(duì)數(shù)據(jù)A進(jìn)行了修改并寫(xiě)回,此時(shí)若事務(wù)2再讀A,發(fā)現(xiàn)數(shù)據(jù)不對(duì)。即一個(gè)事務(wù)重復(fù)讀A兩次,會(huì)發(fā)現(xiàn)數(shù)據(jù)A有誤。讀臟數(shù)據(jù):事務(wù)1對(duì)數(shù)據(jù)A進(jìn)行了修改后,事務(wù)2讀數(shù)據(jù)A,而后事務(wù)1回滾,數(shù)據(jù)A恢復(fù)了原來(lái)的值,那么事務(wù)2對(duì)數(shù)據(jù)A做的事是無(wú)效的,讀到了臟數(shù)據(jù)。

X鎖是排它鎖(寫(xiě)鎖)。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改其他事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖。S鎖是共享鎖(讀鎖)。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則只允許T讀取A,但不能修改A,其他事務(wù)只能再對(duì)A加S鎖 (也即能讀不能修改),直到T釋放A上的S鎖。

共分為三級(jí)封鎖協(xié)議,如下: 一級(jí)封鎖協(xié)議:事務(wù)在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放??山鉀Q丟失更新問(wèn)題:

二級(jí)封鎖協(xié)議: 一級(jí)封鎖協(xié)議的基礎(chǔ)上加上事務(wù)T在讀數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。 可解決丟失更新、讀臟數(shù)據(jù)問(wèn)題: ?

三級(jí)封鎖協(xié)議: 級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放可解決丟失更新讀臟數(shù)據(jù)、數(shù)據(jù)重復(fù)讀問(wèn)題

串行調(diào)度(serial schedule) 是指多個(gè)事務(wù)依次串行執(zhí)行,且只有當(dāng)一個(gè)事務(wù)的所有操作都執(zhí)行完后才執(zhí)行另一個(gè)事務(wù)的所有操作。并發(fā)調(diào)度 (concurrent schedule): 利用分時(shí)的方法同時(shí)處理多事務(wù)”其執(zhí)行的結(jié)果與串行調(diào)度執(zhí)行的結(jié)果相同,則稱這個(gè)并發(fā)調(diào)度是正確的??苫謴?fù)調(diào)度:若事務(wù)Ti提交失敗,則應(yīng)當(dāng)撤銷Ti的影響以保證其原子性。在允許并發(fā)執(zhí)行的系統(tǒng)中,還必須確保依賴于Ti的任何事務(wù)也中止。例如,Ti要讀Ti寫(xiě)的數(shù)據(jù),則稱T 依賴于Ti??苫謴?fù)調(diào)度(recoverable schedule) 應(yīng)滿足: 當(dāng)事務(wù) 要讀事務(wù)Ti 寫(xiě)的數(shù)據(jù)時(shí),事務(wù)Ti必須要先于事務(wù)Ti 提交可串行化的調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的當(dāng)且僅當(dāng)其結(jié)果與某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同,稱這種調(diào)度策略是可串行化的調(diào)度(serializability schedule)。沖突可串行化 沖突 (conflict):當(dāng)li和li是不同事務(wù)在相同的數(shù)據(jù)項(xiàng)上操作的命令,月至少有一個(gè)是write 命令時(shí),則稱i與ii是沖突的。等價(jià)調(diào)度:設(shè)l與i是調(diào)度S 的兩條連續(xù)的命令,若與是不同事務(wù)的命令且不沖突,則可以交換li與ij的順序得到一個(gè)新的調(diào)度S*。我們稱S 與S*是等價(jià)的。

【兩段鎖協(xié)議】

兩段鎖協(xié)議:是指對(duì)任何數(shù)據(jù)進(jìn)行讀寫(xiě)之前必須對(duì)該數(shù)據(jù)加鎖在釋放一個(gè)封鎖之后,事務(wù)不生長(zhǎng)階段(加鎖、擴(kuò)展階段)再申請(qǐng)和獲得任何其他封鎖。每個(gè)事務(wù)的執(zhí)行可以分為兩個(gè)階段和衰退階段 (解鎖、收縮階段)。加鎖階段:在該階段可以進(jìn)行加鎖操作。在對(duì)任何數(shù)據(jù)進(jìn)行讀操作之前要申請(qǐng)并獲得S鎖,在進(jìn)行寫(xiě)操作之前要申請(qǐng)并獲得X鎖。加鎖不成功,則事務(wù)進(jìn)入等待狀態(tài),直到加鎖成功才繼續(xù)執(zhí)行。解鎖階段:當(dāng)事務(wù)釋放了一個(gè)封鎖以后,事務(wù)進(jìn)入解鎖階段,在該階段只能進(jìn)行解鎖操作不能再進(jìn)行加鎖操作如果事務(wù)部遵循兩段鎖協(xié)議,那么它們的并發(fā)調(diào)度是可串行化的。兩段鎖是可串行化的充分條件,但不是必要條件。需要注意的是采用兩段鎖協(xié)議也有可能產(chǎn)生死鎖,這是因?yàn)槊總€(gè)事務(wù)都不能及時(shí)解除被它封鎖的數(shù)據(jù),可能會(huì)導(dǎo)致多個(gè)事務(wù)互相都要求對(duì)方己封鎖的數(shù)據(jù)不能繼續(xù)運(yùn)行。封鎖的粒度封鎖的粒度是被封鎖數(shù)據(jù)目標(biāo)的大小,在關(guān)系數(shù)據(jù)庫(kù)中封鎖粒度有屬性值、屬性值集、元組關(guān)系、索引項(xiàng)、整個(gè)關(guān)系數(shù)據(jù)庫(kù)等幾種。封鎖粒度小則并發(fā)性高,但開(kāi)銷大,封鎖粒度大則并發(fā)性低,但開(kāi)銷小。

【數(shù)據(jù)庫(kù)事務(wù)的四種隔離級(jí)別】 數(shù)據(jù)庫(kù)事務(wù)的四種隔離級(jí)別數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別有4個(gè),由低到高依次為Readuncommitted、Read committed.Repeatable read、Serializable.

READ UNCOMMITTED:讀未提交,這是事務(wù)最低的隔離級(jí)別,它允許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)READ COMMITTED: 讀提交,保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。解決丟失更新、讀臟數(shù)據(jù)問(wèn)題。REPEATABLE READ:重復(fù)讀,在開(kāi)始讀事務(wù)時(shí),不允許修改操作。進(jìn)一步解決了不可重復(fù)讀問(wèn)題。SERIALIZABLE:這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別。事務(wù)被處理為串行化執(zhí)行。

12.3 數(shù)據(jù)庫(kù)的故障與恢復(fù)

12.3.1 事務(wù)故障

數(shù)據(jù)庫(kù)故障主要分:事務(wù)故障、系統(tǒng)故障和介質(zhì)故障。事務(wù)故障:是由于程序執(zhí)行錯(cuò)誤而引起事務(wù)非預(yù)期的、異常終止的故障。通常有如下兩類錯(cuò)誤引起事務(wù)執(zhí)行失敗。 (1)邏輯錯(cuò)誤。如非法輸入、找不到數(shù)據(jù)、溢出、超出資源限制等原因引起的事務(wù)執(zhí)行失?。?)系統(tǒng)錯(cuò)誤。系統(tǒng)進(jìn)入一種不良狀態(tài)(如死鎖),導(dǎo)致事務(wù)無(wú)法繼續(xù)執(zhí)行對(duì)于不可以預(yù)期的錯(cuò)誤應(yīng)用程序無(wú)法處理,是由DBMS 系統(tǒng)實(shí)現(xiàn)故障恢復(fù)的。如非法輸入、運(yùn)算溢出等。非預(yù)期的故障如非法輸入是由約束機(jī)制檢查并恢復(fù)的。事務(wù)故障通常指非預(yù)期的故障事務(wù)故障意味著事務(wù)沒(méi)有達(dá)到預(yù)期的終點(diǎn),因此數(shù)據(jù)庫(kù)可能處于不正確狀態(tài)?;謴?fù)程序要在不影響其他事務(wù)運(yùn)行的情況下,強(qiáng)行回滾該事務(wù),即撤銷該事務(wù)己經(jīng)做出的任何對(duì)數(shù)據(jù)庫(kù)的修改,這類恢復(fù)操作稱為事務(wù)撤銷 (UNDO)。 恢復(fù)過(guò)程: (1)反向 (從后向前)掃描日志文件查找該事務(wù)的更新操作; (2)對(duì)該事務(wù)的更新操作執(zhí)行逆操作,也就是將日志記錄更新前的值寫(xiě)入數(shù)據(jù)庫(kù); (3)繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并作同樣處理; (4)如此處理下去,直到讀到了此事務(wù)的開(kāi)始標(biāo)記,事務(wù)故障恢復(fù)就完成了。事務(wù)故障的恢復(fù)由系統(tǒng)自動(dòng)完成,對(duì)用戶是透明的。

12.3.2 系統(tǒng)故障

系統(tǒng)故障(通常稱為軟故障):是指硬件故障、軟件(如DBMS、OS 或應(yīng)用程》漏的影響,導(dǎo)致丟失了內(nèi)存中的信息,影響正在執(zhí)行的事務(wù),但未破壞存儲(chǔ)在外存上的信息。這種情況稱為故障 - 停止假設(shè)。

系統(tǒng)故障會(huì)使數(shù)據(jù)庫(kù)的數(shù)據(jù)不一致,原因有兩個(gè): (1)是未完成的事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新可能己寫(xiě)入數(shù)據(jù)庫(kù); (2)是己提交的事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新可能還在緩沖區(qū)中沒(méi)來(lái)得及寫(xiě)入數(shù)據(jù)庫(kù)。因此恢復(fù)操作就是要撤銷故障發(fā)生時(shí)未完成的事務(wù),重做 (REDO) 已提交的事務(wù)。恢復(fù)過(guò)程: (1)正向 (從頭到尾)掃描日志文件,找出故障發(fā)生前已經(jīng)提交的事務(wù) (這些事務(wù)既有BEGINTRANSACTION 記錄,也有COMMIT記錄),將其事務(wù)標(biāo)識(shí)記入重做 (REDO) 隊(duì)列。同時(shí)找出故障發(fā)生時(shí)尚未完成的事務(wù) (這些事務(wù)只有BEGIN TRANSACTION 記錄,無(wú)相應(yīng)的COMMIT記錄),將其事務(wù)標(biāo)識(shí)記入撤銷 (UNDO) 隊(duì)列; (2)反向掃描日志文件,對(duì)每個(gè)UNDO事務(wù)的更新操作執(zhí)行逆操作,也就是將日志記錄中更新前的值寫(xiě)入數(shù)據(jù)庫(kù)。對(duì)每個(gè)REDO事務(wù)重新執(zhí)行日志文件登記的操作,也就是將日志記錄中更; (3)正向掃描日志文件,新后的值寫(xiě)入數(shù)據(jù)庫(kù)。系統(tǒng)故障是在系統(tǒng)重啟之后自動(dòng)執(zhí)行的,對(duì)用戶是透明的?

12.3.3?介質(zhì)故障?

介質(zhì)故障(稱為硬件故障):是指外存故障,例如磁盤(pán)損壞、磁頭碰撞,瞬時(shí)強(qiáng)磁場(chǎng)干擾等。這類故障將破壞數(shù)據(jù)庫(kù)或部分?jǐn)?shù)據(jù)庫(kù),并影響正在存取這部分?jǐn)?shù)據(jù)的所有事務(wù),日志文件也被破壞。

恢復(fù)過(guò)程: (1)裝入最新的數(shù)據(jù)庫(kù)后備副本,使數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài); (2)轉(zhuǎn)入相應(yīng)的日志文件副本,重做已完成的事務(wù)。介質(zhì)故障的恢復(fù)需要DBA的介入,具體的恢復(fù)操作仍由DBMS完成。

12.3.4?數(shù)據(jù)庫(kù)備份

靜態(tài)轉(zhuǎn)儲(chǔ):即冷備份,指在轉(zhuǎn)儲(chǔ)期間不許對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何存取、修改操作;優(yōu)點(diǎn)是非??焖俚膫浞莘椒?、容易歸檔(直接物理復(fù)制操作);缺點(diǎn)是只能提供到某一時(shí)間點(diǎn)上的恢復(fù),不能做其他工作,不能按表或按用戶恢復(fù)。動(dòng)態(tài)轉(zhuǎn)儲(chǔ):即熱備份,在轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取、修改操作,因此,轉(zhuǎn)儲(chǔ)和用戶事務(wù)可并發(fā)執(zhí)行,優(yōu)點(diǎn)是可在表空間或數(shù)據(jù)庫(kù)文件級(jí)備份,數(shù)據(jù)庫(kù)仍可使用,可達(dá)到秒級(jí)恢復(fù);缺點(diǎn)是不能出錯(cuò),否則后果嚴(yán)重,若熱備份不成功,所得結(jié)果幾平全部無(wú)效。海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù),增量轉(zhuǎn)儲(chǔ)是指每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過(guò)的數(shù)據(jù)。 ●?完全備份:備份所有數(shù)據(jù)。 ●?差量備份:僅備份上一次完全備份之后變化的數(shù)據(jù)。 ●?增量備份:備份上一次備份之后變化的數(shù)據(jù)。日志文件 ●?在事務(wù)處理過(guò)程中,DBMS把事務(wù)開(kāi)始、事務(wù)結(jié)束以及對(duì)數(shù)據(jù)庫(kù)的插入、刪除和修改的每一次操作寫(xiě)入日志文件。一旦發(fā)生故障,DBMS的恢復(fù)子系統(tǒng)利用日志文件撤銷事務(wù)對(duì)數(shù)據(jù)庫(kù)的改變回退到事務(wù)的初始狀態(tài)。 ●?備份畢竟是有時(shí)間節(jié)點(diǎn)的,不是實(shí)時(shí)的,例如:上一次備份到這次備份之間數(shù)據(jù)庫(kù)出現(xiàn)了故障則這期間的數(shù)據(jù)無(wú)法恢復(fù),因此,引入日志文件,可以實(shí)時(shí)記錄針對(duì)數(shù)據(jù)庫(kù)的任何操作,保證數(shù)據(jù)庫(kù)可以實(shí)時(shí)恢復(fù)。數(shù)據(jù)庫(kù)鏡像: 根據(jù)DBA的要求,自動(dòng)把整個(gè)數(shù)據(jù)庫(kù)或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤(pán)上。DBMS自動(dòng)保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。 作用:用于數(shù)據(jù)庫(kù)的恢復(fù);用于并發(fā)操作。

12.4 數(shù)據(jù)庫(kù)的安全性與完整性?

惡意訪問(wèn)的形式主要包括: 未經(jīng)授權(quán)讀取數(shù)據(jù)(竊取信息);未經(jīng)授權(quán)修改數(shù)據(jù),未經(jīng)授權(quán)破壞數(shù)據(jù)。數(shù)據(jù)庫(kù)安全性(data base security) 指保護(hù)數(shù)據(jù)庫(kù)不受惡意訪問(wèn)。為了保護(hù)數(shù)據(jù)庫(kù)的安全可以在以下五個(gè)層次上采取安全性措施: (1)數(shù)據(jù)庫(kù)系統(tǒng)層次 (database system)。數(shù)據(jù)庫(kù)系統(tǒng)的某些用戶獲得的授權(quán)可能只允許他訪問(wèn)數(shù)據(jù)庫(kù)中有限的部分,而另外一些用戶獲得的授權(quán)可能允許他提出查詢,但不允許他修改數(shù)據(jù)保證這樣的授權(quán)限制不被違反是數(shù)據(jù)庫(kù)系統(tǒng)的責(zé)任。 (2)操作系統(tǒng)層次 (operating system)。不管數(shù)據(jù)庫(kù)系統(tǒng)多安全,操作系統(tǒng)安全性方面的弱點(diǎn)總是可能成為對(duì)數(shù)據(jù)庫(kù)進(jìn)行未授權(quán)訪問(wèn)的一種手段。 (3)網(wǎng)絡(luò)層次(network)。由于幾乎所有的數(shù)據(jù)庫(kù)系統(tǒng)都允許通過(guò)終端或網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程訪問(wèn)網(wǎng)絡(luò)軟件的軟件層安全性和物理安全性一樣重要,不管在因特網(wǎng)上還是在私有的網(wǎng)絡(luò)內(nèi)。 (4)物理層次(physical)。計(jì)算機(jī)系統(tǒng)所位于的結(jié)點(diǎn)(一個(gè)或多個(gè))必須在物理上受到保護(hù),以防止入侵者強(qiáng)行闖入或暗中潛入。 (5)人員層次(human)。對(duì)用戶的授權(quán)必須格外小心,以減少授權(quán)用戶接受賄賂或其他好處而給入侵者提供訪問(wèn)機(jī)會(huì)的可能性。為了保證數(shù)據(jù)庫(kù)安全,用戶必須在上述所有層次上進(jìn)行安全性維護(hù)。如果較低層次上(物理層次或人員層次)安全性存在缺陷,高層安全性措施即使很?chē)?yán)格也可能被繞過(guò)。下面主要在數(shù)據(jù)庫(kù)系統(tǒng)層次上討論安全性,主要包括: 權(quán)限機(jī)制、視圖機(jī)制和數(shù)據(jù)加密。授權(quán):通過(guò)DBMA提供的授權(quán)功能賦予用戶在數(shù)據(jù)庫(kù)各個(gè)部分上的幾種形式的授權(quán),其中包括read、insert、update、 delete。用戶還可以獲得修改數(shù)據(jù)庫(kù)模式的授權(quán): index 授權(quán)允許創(chuàng)建和刪除索引。resource 授權(quán)允許創(chuàng)建新關(guān)系。alteration 授權(quán)允許添加或刪除關(guān)系中的屬性。drop 授權(quán)允許刪除關(guān)系。用戶角色是具有相同操作權(quán)限的用戶集合,不同角色的用戶授予不同的數(shù)據(jù)管理和訪問(wèn)操作權(quán)限。一般可以將權(quán)限角色分為三類: 數(shù)據(jù)庫(kù)登錄權(quán)限類、資源管理權(quán)限類、DBA權(quán)限類。存取控制(數(shù)據(jù)授權(quán)):數(shù)據(jù)庫(kù)授權(quán)可以分為靜態(tài)授權(quán)和動(dòng)態(tài)授權(quán): ●?靜態(tài)授權(quán)是DBMS的隱性授權(quán),也即用戶對(duì)于本身所擁有的信息是不需要有指定的授權(quán)動(dòng)作就擁有管理和操作權(quán)限的。 ●?動(dòng)態(tài)授權(quán)指數(shù)據(jù)對(duì)象的所有者或者DBA默認(rèn)的擁有對(duì)數(shù)據(jù)的存取權(quán),允許他們把這些權(quán)利授子其他的用戶。訪問(wèn)控制可以對(duì)用戶訪問(wèn)的數(shù)據(jù)對(duì)象進(jìn)行控制,數(shù)據(jù)對(duì)象粒度從大到小分為如下四個(gè)級(jí)別:數(shù)●?據(jù)庫(kù)級(jí)別; ●?表級(jí),判斷用戶是否可以訪問(wèn)關(guān)系里面的內(nèi)容; ●?記錄級(jí),判斷用戶是否能訪問(wèn)關(guān)系中的一行記錄的內(nèi)容屬性級(jí),判斷用戶是否能訪問(wèn)某列的內(nèi)容。視圖控制:建立視圖,將表中的數(shù)據(jù)按應(yīng)用展現(xiàn)和隱藏,有助于隱藏表中的關(guān)鍵信息,增強(qiáng)安全性。審計(jì)功能:是一種事后監(jiān)督的手段。審計(jì)作為一種安全檢查的措施,會(huì)把系統(tǒng)的運(yùn)行狀況和用戶訪問(wèn)數(shù)據(jù)庫(kù)的行為記錄以日志保存下來(lái),該日志作為稽查用戶行為的一種證據(jù)。數(shù)據(jù)庫(kù)系統(tǒng)的審計(jì)工作包括: 設(shè)備安全審計(jì)、操作審計(jì)、應(yīng)用設(shè)計(jì)、攻擊審計(jì)數(shù)據(jù)加密:防止數(shù)據(jù)庫(kù)的敏感信息在存儲(chǔ)和傳輸過(guò)程中被竊取的有效手段。包括數(shù)據(jù)傳輸加密技術(shù)、數(shù)據(jù)存儲(chǔ)加密技術(shù)、數(shù)據(jù)完整性鑒別技術(shù)、密鑰管理技術(shù)。

第十三章 云計(jì)算與大數(shù)據(jù)處理

13.1 云計(jì)算

13.1.1 云計(jì)算的關(guān)鍵特征

云計(jì)算是與信息技術(shù)、軟件、互聯(lián)網(wǎng)相關(guān)的一種服務(wù),這種計(jì)算資源共享池叫作“云”,,云計(jì)算把許多計(jì)算資源集合起來(lái),通過(guò)軟件實(shí)現(xiàn)自動(dòng)化管理,只需要很少的人參與,就能讓資源被快速提供。云計(jì)算的關(guān)鍵特征: 1)廣泛的網(wǎng)絡(luò)接入:用戶可以通過(guò)網(wǎng)絡(luò),采用標(biāo)準(zhǔn)機(jī)制訪問(wèn)云中的物理和虛擬資源的特性。標(biāo)準(zhǔn)機(jī)制有助于用戶通過(guò)異構(gòu)平臺(tái)使用資源。 2)可測(cè)量的服務(wù):通過(guò)可計(jì)量的服務(wù)交付使得服務(wù)使用情況可監(jiān)控、控制和計(jì)費(fèi)的特性。這個(gè)特性強(qiáng)調(diào)用戶只為自己使用的服務(wù)付費(fèi),降低用戶成本,為用戶帶來(lái)價(jià)值。 3)多租戶:通過(guò)對(duì)物理或虛擬資源的分配保證多個(gè)租戶以及他們的計(jì)算和數(shù)據(jù)彼此隔離和不可訪問(wèn)的特性。在云中可以實(shí)現(xiàn)多種不同形式的租戶組織。 4)按需自服務(wù):客戶能夠根據(jù)自身的實(shí)際需求,自動(dòng)或在最少交互的情況下,配置計(jì)算能力的特性。 5)快速的彈性和可擴(kuò)展性:物理或虛擬資源能夠快速、彈性,有時(shí)是自動(dòng)化地供應(yīng),以達(dá)到快速增減資源目的的特性。 6)資源池化:將云服務(wù)提供者的物理或虛擬資源進(jìn)行集成,以便服務(wù)于一個(gè)或多個(gè)云服務(wù)客戶的特性。該特性通過(guò)抽象對(duì)用戶屏蔽了資源處理和分配的復(fù)雜性,用戶無(wú)需知道資源是如何分布,如何分配的。其他關(guān)鍵特征:. 1) 虛擬化技術(shù) 虛擬化突破了時(shí)間、空間的界限,是云計(jì)算最為顯著的特點(diǎn)。 2) 可靠性高:倘若服務(wù)器故障也不影響計(jì)算與應(yīng)用的正常運(yùn)行。 3)性價(jià)比高。

13.1.2 云計(jì)算分類

根據(jù)云部署模式和云應(yīng)用范圍分類 1)公有云:云的基礎(chǔ)設(shè)施一般是被一個(gè)云計(jì)算服務(wù)提供商所擁有,該組織將云計(jì)算服務(wù)銷售給 公眾。 2)社區(qū)云:云的基礎(chǔ)設(shè)施被一些組織共享,并為一個(gè)有共同關(guān)注點(diǎn)的社區(qū)服務(wù)(例如任務(wù)、安全要求、政策和遵守的考慮)。 3)私有云:云的基礎(chǔ)設(shè)施是為一個(gè)客戶單獨(dú)使用而構(gòu)建的。 4)混合云:云的基礎(chǔ)設(shè)施是由兩種或兩種以上的云(私有、社區(qū)或公有)組成,每種云仍然保持獨(dú)立,但用標(biāo)準(zhǔn)的或?qū)S械募夹g(shù)將它們組合起來(lái),具有數(shù)據(jù)和應(yīng)用程序的可移植性《例如,可以用來(lái)處理突發(fā)負(fù)載),混合云有助于提供按需和外部供應(yīng)方面的擴(kuò)展。根據(jù)云計(jì)算的服務(wù)層次和服務(wù)類型分類: 1)基礎(chǔ)設(shè)施即服務(wù)(aas): 基礎(chǔ)設(shè)施即服務(wù)是主要的服務(wù)類別之一,提供虛擬化計(jì)算資源,如虛擬機(jī)、存儲(chǔ)、網(wǎng)絡(luò)和操作系統(tǒng)。通過(guò)網(wǎng)絡(luò)作為標(biāo)準(zhǔn)化服務(wù)提供按需付費(fèi)的彈性基礎(chǔ)設(shè)施服務(wù)其核心技術(shù)是虛擬化。 2)平臺(tái)即服務(wù)(PaaS):平臺(tái)即服務(wù)是一種服務(wù)類別,為開(kāi)發(fā)人員提供通過(guò)全球互聯(lián)網(wǎng)構(gòu)建應(yīng)用程序和服務(wù)的平臺(tái)。Paas 為開(kāi)發(fā)、測(cè)試和管理軟件應(yīng)用程序提供按需開(kāi)發(fā)環(huán)境。其核心技術(shù)是分布式并行計(jì)算。 3)軟件即服務(wù)(Saas): 軟件即服務(wù)也是其服務(wù)的一類,通過(guò)互聯(lián)網(wǎng)提供按需軟件付費(fèi)應(yīng)用程序云計(jì)算提供商托管和管理軟件應(yīng)用程序,并允許其用戶連接到應(yīng)用程序井通過(guò)互聯(lián)網(wǎng)訪問(wèn)應(yīng)用程字。、

13.1.3 云關(guān)鍵技術(shù)

1.虛擬化技術(shù) 是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源(CPU、內(nèi)存、磁盤(pán)空間、網(wǎng)絡(luò)適配器等)予以抽象、轉(zhuǎn)換后呈現(xiàn)出來(lái),并可供分割、組合為一個(gè)或多個(gè)電腦配置環(huán)境。云計(jì)算中的虛擬化往往指的是系統(tǒng)虛擬化。系統(tǒng)虛擬化是指將一臺(tái)物理計(jì)算機(jī)系統(tǒng)虛擬化為一臺(tái)或多臺(tái)虛擬計(jì)算機(jī)系統(tǒng)。 2.分布式數(shù)據(jù)存儲(chǔ):包含非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。其中,非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)主要采用文件存儲(chǔ)和對(duì)象存技術(shù)62而結(jié)構(gòu)化數(shù)據(jù)薦儲(chǔ)生要采用分布式數(shù)據(jù)庫(kù)技術(shù),特別是NOSQL數(shù)據(jù)庫(kù)。 3.并行計(jì)算:云計(jì)算下把海量數(shù)據(jù)分布到多個(gè)結(jié)點(diǎn)上,將計(jì)算并行化,利用多機(jī)的計(jì)算資源,加快數(shù)據(jù)處理的速度。云計(jì)算下的并行處理需要考慮以下關(guān)鍵問(wèn)題,任務(wù)劃分、任務(wù)調(diào)度和自動(dòng)容錯(cuò)處理機(jī)制。 4.運(yùn)營(yíng)支撐管理:為了支持規(guī)模巨大的云計(jì)算環(huán)境,需要成千上萬(wàn)臺(tái)服務(wù)器來(lái)支撐。如何對(duì)數(shù)以萬(wàn)計(jì)的服務(wù)器進(jìn)行穩(wěn)定高效地運(yùn)營(yíng)管理,成為云服務(wù)被用戶認(rèn)可的關(guān)鍵因素之一。

13.1.4 云計(jì)算的安全

云計(jì)算面臨的主要數(shù)據(jù)安全問(wèn)題和風(fēng)險(xiǎn)包括: (1)數(shù)據(jù)存儲(chǔ)及訪問(wèn)控制:數(shù)據(jù)丟失或損壞,數(shù)據(jù)被非法訪問(wèn)和篡改,多租戶之間的數(shù)據(jù)干擾泄露,數(shù)據(jù)服務(wù)被阻塞,過(guò)期數(shù)據(jù)的妥善保管或銷毀等等。 (2)數(shù)據(jù)傳輸保護(hù):數(shù)據(jù)在分布式應(yīng)用中傳遞時(shí)被竊取或攻擊。 (3)數(shù)據(jù)隱私及敏感信息保護(hù):數(shù)據(jù)所有權(quán)問(wèn)題,非法授信,隱私泄露等。 (4)數(shù)據(jù)可用性:異常崩潰、業(yè)務(wù)中斷等。 (4)依從性管理:數(shù)據(jù)服務(wù)違反了法律及政策的要求等。

針對(duì)上述計(jì)算面臨的主要數(shù)據(jù)安全問(wèn)題和風(fēng)險(xiǎn),相應(yīng)可采取的數(shù)據(jù)安全管理技術(shù)列舉如下: (1)數(shù)據(jù)保護(hù)及隱私保護(hù):包括虛擬鏡像安全、數(shù)據(jù)加密及解密、數(shù)據(jù)驗(yàn)證、密鑰管理、數(shù)據(jù)恢復(fù)、云遷移的數(shù)據(jù)安全等。 (2)身份及訪問(wèn)管理: 包括身份驗(yàn)證、目錄服務(wù)、聯(lián)邦身份鑒別/單點(diǎn)登錄(Single Sign、個(gè)人身份信息保護(hù)、安全斷言置標(biāo)語(yǔ)言、虛擬資源訪問(wèn)、多租用數(shù)據(jù)授權(quán)、基于角色on,sso)的數(shù)據(jù)訪問(wèn)、云防火墻技術(shù)等。 (3)數(shù)據(jù)傳輸:包括傳輸加密及解密、密鑰管理、信任管理等。 (4)可用性管理:包括單點(diǎn)失敗 (SPOF)、主機(jī)防攻擊、容災(zāi)保護(hù)等。 (5)日志管理:包括日志系統(tǒng)、可用性監(jiān)控、流量監(jiān)控、數(shù)據(jù)完整性監(jiān)控、網(wǎng)絡(luò)入侵監(jiān)控等。 (6)審計(jì)管理:包括審計(jì)信任管理、審計(jì)數(shù)據(jù)加密等。 (7)依從性管理:包括確保數(shù)據(jù)存儲(chǔ)和使用等符合相關(guān)的風(fēng)險(xiǎn)管理和安全管理的規(guī)定要求。

13.1.5 云安全實(shí)施的步驟

(1)確保擁有有效的治理、風(fēng)險(xiǎn)及合規(guī)性流程; (2)審計(jì)運(yùn)維和業(yè)務(wù)流程報(bào)告; (3)管理人員、角色及身份; (4)的確保對(duì)數(shù)據(jù)和信息的合理保護(hù); (5)實(shí)行隱私策略; (6)評(píng)估云應(yīng)用程序的安全規(guī)定; (7)確保云網(wǎng)絡(luò)和連接的安全性; (8)的評(píng)估物理基礎(chǔ)設(shè)施和設(shè)備的安全管理; (9)管理云服務(wù)水平協(xié)議(SLA)的安全條款; (10)了解退出過(guò)程的安全需要。

13.2 大數(shù)據(jù)?

大數(shù)據(jù)是具有數(shù)量巨大、來(lái)源多樣、生成極快且多變等特征且難以使用傳統(tǒng)數(shù)據(jù)體系結(jié)構(gòu)有效處理的包含大量數(shù)據(jù)集的數(shù)據(jù)。大數(shù)據(jù)的5V特征: Variety (多樣性)、Velocity (速度) 、Volume (數(shù)量) 、Value (價(jià)值)Veracity (真實(shí)性)。從大數(shù)據(jù)生命周期的角度看,大數(shù)據(jù)處理的基本流程包括:數(shù)據(jù)采集、數(shù)據(jù)分析和數(shù)據(jù)解釋。

第十四章 數(shù)據(jù)庫(kù)主流應(yīng)用技術(shù)

14.1 分布式數(shù)據(jù)庫(kù)

分布式數(shù)據(jù)庫(kù)是一個(gè)物理上分布在計(jì)算機(jī)網(wǎng)絡(luò)的不同地點(diǎn),而邏輯上又屬于同一系統(tǒng)的數(shù)據(jù)集合。網(wǎng)絡(luò)的每個(gè)站點(diǎn)的數(shù)據(jù)庫(kù)都有自治能力,能夠完成局部應(yīng)用,同時(shí)每個(gè)站點(diǎn)的數(shù)據(jù)庫(kù)又屬于整個(gè)系統(tǒng),通過(guò)網(wǎng)絡(luò)也可以完成全局應(yīng)用。其組成如下圖:

滿足下面條件的數(shù)據(jù)庫(kù)系統(tǒng)被稱為完全分布式數(shù)據(jù)庫(kù)系統(tǒng): (1)分布性:即數(shù)據(jù)存儲(chǔ)在多個(gè)不同的節(jié)點(diǎn)上。 (2)邏輯相關(guān)性:即數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)的數(shù)據(jù)在邏輯上具有相互關(guān)聯(lián)的特性。 (3)場(chǎng)地透明性:即使用分布式數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí)不需指明數(shù)據(jù)所在的位置。 (4)場(chǎng)地自治性:即每一個(gè)單獨(dú)的節(jié)點(diǎn)能夠執(zhí)行局部的應(yīng)用請(qǐng)求。

分布式數(shù)據(jù)庫(kù)的特點(diǎn):數(shù)據(jù)的集中控制性數(shù)據(jù)獨(dú)立性;數(shù)據(jù)幾余可控性;場(chǎng)地自治性存取的有效性。局部數(shù)據(jù)庫(kù)位于不同的物理位置,使用一個(gè)全局DBMS將所有局部數(shù)據(jù)庫(kù)聯(lián)網(wǎng)管理。其四層體系結(jié)構(gòu)如下圖所示:

從分布透明特性來(lái)說(shuō),分布式數(shù)據(jù)庫(kù)的全局概念層應(yīng)具有三種模式描述信息: (1)全局概念模式: (2)分片模式:描述全局?jǐn)?shù)據(jù)邏輯劃分的視圖它是全局?jǐn)?shù)據(jù)的邏輯結(jié)構(gòu)根據(jù)某種條件的劃分每一個(gè)邏輯劃分即一個(gè)片段,或稱為分片。 (3)分配模式:描述局部邏輯的局部物理結(jié)構(gòu),是劃分后的片段(或分片)的物理分配視圖它與集中式數(shù)據(jù)庫(kù)物理存儲(chǔ)結(jié)構(gòu)的概念不同,是全局概念層的內(nèi)容。分片模式: 水平分片:將表中水平的記錄分別存放在不同的地方。 垂直分片:將表中的垂直的列值分別存放在不同的地方。 水平和垂直結(jié)合的分片:以上兩種的混合。分布透明性: 分片透明性:用戶或應(yīng)用程序不需要知道邏輯上訪問(wèn)的表具體是如何分塊存儲(chǔ)的。 位置透明性:應(yīng)用程序不關(guān)心數(shù)據(jù)存儲(chǔ)物理位置的改變。 邏輯透明性:用戶或應(yīng)用程序無(wú)需知道局部使用的是哪種數(shù)據(jù)模型。 復(fù)制透明性:用戶或應(yīng)用程序不關(guān)心復(fù)制的數(shù)據(jù)從何而來(lái)。?分布式數(shù)據(jù)庫(kù)的查詢和優(yōu)化與集中式數(shù)據(jù)庫(kù)相比,分布式數(shù)據(jù)庫(kù)查詢還要考慮以下兩方面: (1)數(shù)據(jù)和信息均要通過(guò)通信線路進(jìn)行傳輸,存在的延遲問(wèn)題將減慢整個(gè)查詢的執(zhí)行過(guò)程。(2)網(wǎng)絡(luò)中多處理器的存在提供了并行數(shù)據(jù)處理和傳輸?shù)臋C(jī)會(huì),應(yīng)充分利用以加快查詢速度.查詢優(yōu)化:查詢執(zhí)行代價(jià)的優(yōu)化、查詢響應(yīng)時(shí)間的優(yōu)化。分布式數(shù)據(jù)庫(kù)管理系統(tǒng)DDBMS包括綜合型和聯(lián)合型兩種體系結(jié)構(gòu): (1)綜合型體系結(jié)構(gòu):是指在分布式數(shù)據(jù)庫(kù)建立之前,還沒(méi)有建立獨(dú)立的集中式數(shù)據(jù)庫(kù)管理系統(tǒng),設(shè)計(jì)人員根據(jù)用戶的需求,設(shè)計(jì)出一個(gè)全新的完整的數(shù)據(jù)庫(kù)管理系統(tǒng)。 (2)聯(lián)合型體系結(jié)構(gòu):是指每個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)管理系統(tǒng)已經(jīng)存在,在此基礎(chǔ)上建立的分布式數(shù)據(jù)庫(kù)系統(tǒng)。同時(shí),聯(lián)合型體系結(jié)構(gòu)又分為同構(gòu)系統(tǒng)和異構(gòu)系統(tǒng)。分布式數(shù)據(jù)庫(kù)管理系統(tǒng)由四部分組成:LDBMS(局部數(shù)據(jù)庫(kù)管理系統(tǒng))、GDBMS(全局?jǐn)?shù)據(jù)).、庫(kù)管理系統(tǒng))、全局?jǐn)?shù)據(jù)字典 (GDD)、通信管理(CM)。分布式事務(wù)特性:原子性、可串行性或一致性、隔離性、持久性。與集中式數(shù)據(jù)庫(kù)事務(wù)區(qū)別: (1)執(zhí)行特性:創(chuàng)建一個(gè)控制進(jìn)程協(xié)調(diào)各子事務(wù)的操作。 (2)操作特性:需要加入大量通信原語(yǔ)負(fù)責(zé)協(xié)調(diào)進(jìn)程和代理進(jìn)程之間的數(shù)據(jù)傳送等。 (3)控制制板文“事務(wù)操作進(jìn)行協(xié)調(diào)。分布式數(shù)據(jù)庫(kù)故障:介質(zhì)故障、系統(tǒng)故障、事務(wù)故障、網(wǎng)絡(luò)分割故障、報(bào)文故障分布式數(shù)據(jù)庫(kù)的恢復(fù)原則: 1)孤立和逐步退出事務(wù)的原則: 對(duì)于不影響其他事務(wù)的可排除性局部故障,例如事務(wù)操作的刪除超時(shí)、違反完整性規(guī)則、資源、限制、死鎖等,應(yīng)令某個(gè)事務(wù)孤立地和逐步地退出,將其所做過(guò)的修改復(fù)原,即做UNDO。 2)成功結(jié)束事務(wù)原則:成功結(jié)束事務(wù)所做過(guò)的修改應(yīng)超越各種故障,當(dāng)故障發(fā)生時(shí),應(yīng)該重做(REDO) 事務(wù)的所有操作。 3)天折事務(wù)的原則:若發(fā)生了非局部性的不可排除的故障,例如系統(tǒng)崩憤,則撤銷全部事務(wù),恢復(fù)到初態(tài)。這有兩種做法:一種是利用數(shù)據(jù)庫(kù)的備份實(shí)現(xiàn):另一種是按反向順序操作,復(fù)原其啟動(dòng)以來(lái)所做過(guò)的一切修改。兩階段提交2PC:保證分布式事務(wù)的原子性。由于數(shù)據(jù)庫(kù)分布在不同的地址位置,其事務(wù)可能涉及到不同數(shù)據(jù)庫(kù)的操作,需要二階段提交來(lái)保證原子性。第一階段是表決階段,目的是形成一個(gè)共同的決定,由協(xié)調(diào)者發(fā)起開(kāi)始提交的記錄,所有參與者決定是否能提交本地事務(wù),只要有一個(gè)參與者做出建議撤銷的提議,為了保證原子性,協(xié)調(diào)者就必須整體上撤銷這個(gè)提交。第二階段是執(zhí)行階段,協(xié)調(diào)者依據(jù)第一階段的決定執(zhí)行撤銷或提交該事務(wù)。

14.2 Web與數(shù)據(jù)庫(kù)

數(shù)據(jù)與資源共享這兩種技術(shù)的結(jié)合即成為今天廣泛應(yīng)用的Web 數(shù)據(jù)庫(kù)(也叫網(wǎng)絡(luò)數(shù)據(jù)庫(kù))個(gè)Web 數(shù)據(jù)庫(kù)就是用戶利用瀏覽器作為輸入接口,輸入所需要的數(shù)據(jù),瀏覽器將這些數(shù)據(jù)傳送給網(wǎng)站,由網(wǎng)站對(duì)這些數(shù)據(jù)進(jìn)行處理。網(wǎng)站上的后臺(tái)數(shù)據(jù)庫(kù)就是Web 數(shù)據(jù)庫(kù)。連接數(shù)據(jù)庫(kù)的常用方法: ODBC、DAO、RDO、ADO。Web和數(shù)據(jù)庫(kù)的運(yùn)行模式:

14.3 XML與數(shù)據(jù)庫(kù)

XML,意為可擴(kuò)展的標(biāo)記語(yǔ)言。XML是一套定義語(yǔ)義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí)。采用文件存儲(chǔ)XML,那么會(huì)受到文件系統(tǒng)的限制,出現(xiàn)如下問(wèn)題: 大小、并發(fā)性、工具選擇.版本、安全、綜合性(集中和重復(fù))。XML文檔中的數(shù)據(jù)視圖模型: (1)表格模型:許多中間件軟件包都采用表格模型在XML和關(guān)系型數(shù)據(jù)庫(kù)之間進(jìn)行轉(zhuǎn)換。它把XML的模型看成是一個(gè)單獨(dú)的表格或者是一系列的表格。 (2)特定數(shù)據(jù)對(duì)象模型:在該模型中,元素類型通常對(duì)應(yīng)對(duì)象,而XML 中的內(nèi)容模型、屬性和PCDATA則對(duì)應(yīng)對(duì)象的屬性。這種模型直接映射成面向?qū)ο蟮臄?shù)據(jù)庫(kù)和層次型數(shù)據(jù)庫(kù),當(dāng)然借助于傳統(tǒng)的對(duì)象-關(guān)系映射技術(shù)和SOL對(duì)象視圖也可以映射成關(guān)系數(shù)據(jù)庫(kù)。

14.4 面向?qū)ο髷?shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)技術(shù)與面向?qū)ο蟪绦蛟O(shè)計(jì)方法相結(jié)合形成了面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)(OODBS),它是支持將數(shù)據(jù)當(dāng)作對(duì)象來(lái)模擬和創(chuàng)造的一種數(shù)據(jù)庫(kù)管理系統(tǒng)。通常認(rèn)為,對(duì)象數(shù)據(jù)庫(kù)必須滿足兩項(xiàng)標(biāo)準(zhǔn):它必須是一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng),并且必須是面向?qū)ο蟮南到y(tǒng)。面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)的特征: (1)面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)應(yīng)該具有表達(dá)和管理對(duì)象的能力。 (2)面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)中的對(duì)象可以具有任意復(fù)雜度的對(duì)象結(jié)構(gòu)。 (3)面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)必須具有與面向?qū)ο缶幊陶Z(yǔ)言交互的接口。 (4)面向?qū)ο髷?shù)據(jù)庫(kù)應(yīng)具有表達(dá)和管理數(shù)據(jù)庫(kù)變化的能力。面向?qū)ο髷?shù)據(jù)模型的基本概念有對(duì)象、類、繼承、對(duì)象標(biāo)識(shí)、對(duì)象嵌套等。 1.對(duì)象結(jié)構(gòu)我們可以認(rèn)為一個(gè)對(duì)象對(duì)應(yīng)著E-R 模型中的一個(gè)實(shí)體。對(duì)象中封裝的屬性和方法對(duì)外界是不可見(jiàn)的,對(duì)象之間的相互作用要通過(guò)消息來(lái)實(shí)現(xiàn)。一般來(lái)講,一個(gè)對(duì)象包括:屬性集合方法集合、消息集合。 2.對(duì)象類:在面向?qū)ο髷?shù)據(jù)庫(kù)中,類是一系列相似對(duì)象的集合,對(duì)應(yīng)于E-R 模型中的實(shí)體集概念3.繼承與多重繼承。 4.對(duì)象標(biāo)識(shí):每個(gè)對(duì)象有一個(gè)唯一的、由系統(tǒng)生成的對(duì)象標(biāo)識(shí)。 5.對(duì)象嵌套:對(duì)象的一個(gè)屬性可以是一個(gè)單一值,也可以是一個(gè)來(lái)自于值域的值集,即一個(gè)對(duì)象的屬性可以是一個(gè)對(duì)象,形成了嵌套關(guān)系。一個(gè)對(duì)象被稱為復(fù)雜對(duì)象,如果它的某個(gè)屬性的值是另一個(gè)對(duì)象。面向?qū)ο髷?shù)據(jù)庫(kù)語(yǔ)言主要包括對(duì)象定義語(yǔ)言和對(duì)象操縱語(yǔ)言。對(duì)象查詢語(yǔ)言是對(duì)象操縱語(yǔ)言的個(gè)重要子集。面向?qū)ο髷?shù)據(jù)庫(kù)語(yǔ)言一般應(yīng)具備功能:類的定義和操縱、操作/方法的定義、對(duì)象的操縱。對(duì)象關(guān)系數(shù)據(jù)模型擴(kuò)展關(guān)系數(shù)據(jù)模型的方式是通過(guò)提供一個(gè)包括復(fù)雜數(shù)據(jù)類型和面向?qū)ο蟮母S富的類型系統(tǒng)。有如下手段: (1)嵌套關(guān)系 (2)復(fù)雜類型 (3)繼承、引用類型 (4)與復(fù)雜類型有關(guān)的查詢 (5)函數(shù)與過(guò)程。 (6)面向?qū)ο笈c對(duì)象關(guān)系

14.5 大數(shù)據(jù)與數(shù)據(jù)庫(kù)

大數(shù)據(jù)是一種具有海量的數(shù)據(jù)規(guī)模,在獲取、存儲(chǔ)、管理和分析等方面都遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)數(shù)據(jù)庫(kù)處理范圍的數(shù)據(jù)集合。工業(yè)界便用三大特征作為大數(shù)據(jù)的分類標(biāo)準(zhǔn)。第一個(gè)維度是體量大,第二個(gè)維度是速度快,第個(gè)維度是多樣性。大數(shù)據(jù)之?dāng)?shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì):數(shù)據(jù)倉(cāng)庫(kù)相關(guān)內(nèi)容在數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)已經(jīng)闡述過(guò),這里不再整述。數(shù)據(jù)轉(zhuǎn)移,也稱為數(shù)據(jù)轉(zhuǎn)換或數(shù)據(jù)變換,就是把多種傳統(tǒng)資源或外部資源信息中不完善的數(shù)據(jù)自動(dòng)轉(zhuǎn)換為商務(wù)中準(zhǔn)確可靠的數(shù)據(jù)。在數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中進(jìn)行數(shù)據(jù)轉(zhuǎn)移的目的應(yīng)該有兩個(gè): 第一,改進(jìn)數(shù)據(jù)倉(cāng)庫(kù)中數(shù)據(jù)的質(zhì)量; 第二,提高數(shù)據(jù)倉(cāng)庫(kù)中數(shù)據(jù)的可用性。包括四種轉(zhuǎn)移類型: (1)簡(jiǎn)單轉(zhuǎn)移。簡(jiǎn)單轉(zhuǎn)移是所有數(shù)據(jù)轉(zhuǎn)移的基本構(gòu)成單元。 (2)清洗。清洗的目的是保證前后一致地格式化和使用某--字段或相關(guān)的字段群。 (3)集成。集成是指將業(yè)務(wù)數(shù)據(jù)從一個(gè)或幾個(gè)來(lái)源中取出,并逐字段地將數(shù)據(jù)映射到數(shù)據(jù)倉(cāng)庫(kù)的新數(shù)據(jù)結(jié)構(gòu)上。 (4)聚集和概括。聚集和概括是把業(yè)務(wù)環(huán)境中找到的零星數(shù)據(jù)壓縮成倉(cāng)庫(kù)環(huán)境中的較少數(shù)據(jù)塊.。?

14.6 NewSQL?

NewSQL 是一種新型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)是對(duì)各種新的可擴(kuò)展和高性能數(shù)據(jù)庫(kù)的簡(jiǎn)稱,這類數(shù)據(jù)庫(kù)不僅具有NoSQL 對(duì)海量數(shù)據(jù)的存儲(chǔ)管理力,試圖為聯(lián)機(jī)事務(wù)處理(OLTP)讀寫(xiě)工作負(fù)載提供與NOSQL系統(tǒng)相同的可伸縮性能,還保持了傳統(tǒng)數(shù)據(jù)庫(kù)支持ACID 和SQL等特性。NewSQL 系統(tǒng)雖然在的內(nèi)部結(jié)構(gòu)變化很大,但是它們有兩個(gè)顯著的共同特點(diǎn): 支持關(guān)系數(shù)據(jù)模型和使用SQL 作為其主要的接口。目前NewSQL 系統(tǒng)可通過(guò)架構(gòu)、SQL引擎和數(shù)據(jù)分片分成三類: (1)新架構(gòu):采用新架構(gòu)的NewSQL 系統(tǒng)是全新的數(shù)據(jù)庫(kù)平臺(tái),使用兩種不同的設(shè)計(jì)方法: 第一種設(shè)計(jì)的數(shù)據(jù)庫(kù)工作在一個(gè)分布式集群的節(jié)點(diǎn)上,其中每個(gè)節(jié)點(diǎn)擁有一個(gè)數(shù)據(jù)子集。SQI查詢被分成查詢片段發(fā)送給自己所在的數(shù)據(jù)的節(jié)點(diǎn)上執(zhí)行。 第二種設(shè)計(jì)的數(shù)據(jù)庫(kù)系統(tǒng)通常有一個(gè)單一的主節(jié)點(diǎn)的數(shù)據(jù)源。它們有一組節(jié)點(diǎn)用來(lái)做事務(wù)處理這些節(jié)點(diǎn)接到特定的SQL 查詢后,會(huì)把它所需的所有數(shù)據(jù)從主節(jié)點(diǎn)上取回來(lái)后執(zhí)行SQL查詢,再返回結(jié)果。 (2)SQL引擎:第二類是高度優(yōu)化的SQL 存儲(chǔ)引警。這些系統(tǒng)提供了MySQL 相同的編程接口,但擴(kuò)展性比MySQL內(nèi)置的引警更好。 (3)數(shù)據(jù)分片:關(guān)系型數(shù)據(jù)庫(kù)不能滿足每秒大量的數(shù)據(jù)操作和寫(xiě)入率。為了解決這個(gè)問(wèn)題,提供了分片的中間件層,數(shù)據(jù)庫(kù)自動(dòng)分割在多個(gè)節(jié)點(diǎn)運(yùn)行。

第十五章 知識(shí)產(chǎn)權(quán)和標(biāo)準(zhǔn)化

15.1 知識(shí)產(chǎn)權(quán)概述

知識(shí)產(chǎn)權(quán)是指公民、法人、非法人單位對(duì)自己的創(chuàng)造性智力成果和其他科技成果依法享有的民事權(quán)。是智力成果的創(chuàng)造人依法享有的權(quán)利和在生產(chǎn)經(jīng)營(yíng)活動(dòng)中標(biāo)記所有人依法所享有的權(quán)利的總稱。包含著作權(quán)、專利權(quán)、商標(biāo)權(quán)、商業(yè)秘密權(quán)、植物新品種權(quán)、集成電路布圖設(shè)計(jì)權(quán)和地理標(biāo)志權(quán)等無(wú)體性:知識(shí)產(chǎn)權(quán)的對(duì)象是沒(méi)有具體形體,是智力創(chuàng)造成果,是一種抽象的財(cái)富。專有性:指除權(quán)利人同意或法律規(guī)定外,權(quán)利人以外的任何人不得享有或使用該項(xiàng)權(quán)利。地域性:指知識(shí)產(chǎn)權(quán)只在授予其權(quán)利的國(guó)家或確認(rèn)其權(quán)利的國(guó)家產(chǎn)生,并且只能在該國(guó)范圍內(nèi)受法律保護(hù),而其他國(guó)家則不受保護(hù)。時(shí)間性:僅在法律規(guī)定的期限內(nèi)受到保護(hù),一旦超過(guò)期限,權(quán)利自行消滅相關(guān)知識(shí)產(chǎn)品即成為整個(gè)社會(huì)的共同財(cái)富,為全人類所共同使用。

15.2 保護(hù)期限

知識(shí)產(chǎn)權(quán)具有地域限制,保護(hù)期限各種情況如下表所示:

15.3 知識(shí)產(chǎn)權(quán)人的確定

知識(shí)產(chǎn)權(quán)人的確定: (1)職務(wù)作品

(2)委托作品 單位和委托的區(qū)別在于,當(dāng)合同中未規(guī)定著作權(quán)的歸屬時(shí),著作權(quán)默認(rèn)歸于單位,而委托創(chuàng)作中,著作權(quán)默認(rèn)歸屬于創(chuàng)作方個(gè)人,具體如下:

15.4 侵權(quán)判斷

中國(guó)公民、法人或者其他組織的作品,不論是否發(fā)表,都享有著作權(quán)開(kāi)發(fā)軟件所用的思想、處理過(guò)程、操作方法或者數(shù)學(xué)概念不受保護(hù)。著作權(quán)法不適用于下列情形法律、法規(guī)、國(guó)家機(jī)關(guān)的決議、決定、命令和其他具有立法、行政、司法性質(zhì)的文件,及其官方正式譯文;時(shí)事新聞;歷法、通用數(shù)表、通用表格和公式。

侵權(quán)判定:

15.5 標(biāo)準(zhǔn)劃分?

根據(jù)標(biāo)準(zhǔn)制定機(jī)構(gòu)和適用范圍的不同,可分為國(guó)際標(biāo)準(zhǔn)、國(guó)家標(biāo)準(zhǔn)、行業(yè)標(biāo)準(zhǔn)、區(qū)域/地方標(biāo)準(zhǔn)和企業(yè)標(biāo)準(zhǔn): (1)國(guó)際標(biāo)準(zhǔn)是指國(guó)際標(biāo)準(zhǔn)化組織 (IS0)、國(guó)際電工委員會(huì) (IEC) 和國(guó)際電信聯(lián)盟 (ITU)制定的標(biāo)準(zhǔn)以及國(guó)際標(biāo)準(zhǔn)化組織確認(rèn)并公布的其他國(guó)際組織制定的標(biāo)準(zhǔn)。國(guó)際標(biāo)準(zhǔn)在世界范圍內(nèi)統(tǒng)一使用,提供各國(guó)參考; (2)國(guó)家標(biāo)準(zhǔn):是指由國(guó)家標(biāo)準(zhǔn)化主管機(jī)構(gòu)制定或批準(zhǔn)發(fā)布,在全國(guó)范圍內(nèi)統(tǒng)一適用的標(biāo)準(zhǔn)。比如:GB-.中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn);強(qiáng)制性國(guó)家標(biāo)準(zhǔn)代號(hào)為GB,推薦性國(guó)家標(biāo)準(zhǔn)代號(hào)為GB/T,國(guó)家標(biāo)準(zhǔn)指導(dǎo)性文件代號(hào)為GBZ,國(guó)軍標(biāo)代號(hào)為GJB,ANSI(American National Standards nstitute) ---美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)標(biāo)準(zhǔn); (3)行業(yè)標(biāo)準(zhǔn):是由某個(gè)行業(yè)機(jī)構(gòu)、團(tuán)體等制定的,適用于某個(gè)特定行業(yè)業(yè)務(wù)領(lǐng)域的標(biāo)準(zhǔn)。比如:IEEE美國(guó)電氣電子工程師學(xué)會(huì)標(biāo)準(zhǔn);GA---公共安全標(biāo)準(zhǔn),YD---通信行業(yè)標(biāo)準(zhǔn)。 (4)區(qū)域/地方標(biāo)準(zhǔn):是由某一區(qū)域/地方內(nèi)的標(biāo)準(zhǔn)化主管機(jī)構(gòu)制定、批準(zhǔn)發(fā)布的,適用于某個(gè)特定區(qū)域/地方的標(biāo)準(zhǔn)。比如:EN---歐洲標(biāo)準(zhǔn); (5)企業(yè)標(biāo)準(zhǔn):是企業(yè)范圍內(nèi)根據(jù)需要協(xié)調(diào)、統(tǒng)一的技術(shù)要求、管理要求和工作要求所制定的標(biāo)準(zhǔn),適用于本企業(yè)內(nèi)部的標(biāo)準(zhǔn)。一般以Q字開(kāi)頭,比如Q/320101 RER 007--2012,其中320101代表地區(qū),RER代表企業(yè)名稱代號(hào),001代表該企業(yè)該標(biāo)準(zhǔn)的序號(hào),2012代表年號(hào)。

?相關(guān)章節(jié):

【軟考數(shù)據(jù)庫(kù)】第一章 計(jì)算機(jī)系統(tǒng)基礎(chǔ)知識(shí)?【軟考數(shù)據(jù)庫(kù)】第二章 程序語(yǔ)言基礎(chǔ)知識(shí)【軟考數(shù)據(jù)庫(kù)】第三章 數(shù)據(jù)結(jié)構(gòu)與算法【軟考數(shù)據(jù)庫(kù)】第四章 操作系統(tǒng)知識(shí)【軟考數(shù)據(jù)庫(kù)】第五章 計(jì)算機(jī)網(wǎng)絡(luò)【軟考數(shù)據(jù)庫(kù)】第六章 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)【軟考數(shù)據(jù)庫(kù)】第七章 關(guān)系數(shù)據(jù)庫(kù)【軟考數(shù)據(jù)庫(kù)】第八章 數(shù)據(jù)庫(kù)SQL語(yǔ)言【軟考數(shù)據(jù)庫(kù)】第九章 非關(guān)系型數(shù)據(jù)庫(kù)NOSQL【軟考數(shù)據(jù)庫(kù)】第十章 系統(tǒng)開(kāi)發(fā)與運(yùn)行【軟考數(shù)據(jù)庫(kù)】第十一章 數(shù)據(jù)庫(kù)設(shè)計(jì)【軟考數(shù)據(jù)庫(kù)】第十二章 事務(wù)管理【軟考數(shù)據(jù)庫(kù)】第十三章 云計(jì)算與大數(shù)據(jù)處理【軟考數(shù)據(jù)庫(kù)】第十四章 數(shù)據(jù)庫(kù)主流應(yīng)用技術(shù)【軟考數(shù)據(jù)庫(kù)】第十五章 知識(shí)產(chǎn)權(quán)和標(biāo)準(zhǔn)化

柚子快報(bào)邀請(qǐng)碼778899分享:軟考數(shù)據(jù)庫(kù)詳細(xì)知識(shí)點(diǎn)整理(全)

http://yzkb.51969.com/

參考閱讀

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18969063.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄