01 數(shù)據(jù)項標(biāo)準(zhǔn)化 大部分企業(yè)仍有一些系統(tǒng)是獨立建設(shè),獨立建模,,不能很好地復(fù)用模型,。模型不能復(fù)用的最大障礙是各系統(tǒng)對于同一業(yè)務(wù)概念,命名存在不相同的情況,,或者雖然命名相同但數(shù)據(jù)類型定義不相同的情況,。 例如對于一個實體中的“幣種”屬性,這個屬性存儲的是什么樣的數(shù)據(jù),?可能各系統(tǒng)不同,,有的系統(tǒng)存儲幣種是2位數(shù)字代碼,有的存儲國標(biāo)的3位數(shù)字代碼,,有的存儲國標(biāo)的3位字母代碼,,有的可能直接存儲幣種的中文名稱。這就是所謂“同義不同字,,同字不同義,,義同字不同,字同義不同”的狀況,。 這種狀況給各系統(tǒng)的開發(fā)人員理解模型和系統(tǒng)間數(shù)據(jù)消費帶來了困惑,,因此,減少開發(fā)人員之間的溝通成本,,提升模型復(fù)用的第一步就是進行數(shù)據(jù)項的標(biāo)準(zhǔn)化,,使之命名規(guī)范、定義精確,、業(yè)務(wù)含義明確,。 一個數(shù)據(jù)項通常由多個英文單詞組成,,因此需要將英文單詞的縮寫進行標(biāo)準(zhǔn)化,。英文縮寫的標(biāo)準(zhǔn)化是數(shù)據(jù)項標(biāo)準(zhǔn)化的基礎(chǔ)。 2,、數(shù)據(jù)項類別管理 目前,,各系統(tǒng)物理模型中各數(shù)據(jù)項的命名或者沒有規(guī)范,或者有規(guī)范也僅僅是在該系統(tǒng)內(nèi)使用,,從其名字上無法準(zhǔn)確判斷其存儲的數(shù)據(jù)的類型,,例如前文提到的幣種(CCY)這個數(shù)據(jù)項,從其名字難以看出存儲的是什么類型的數(shù)據(jù),,因此在標(biāo)準(zhǔn)化數(shù)據(jù)項的同時需要對數(shù)據(jù)項進行分類,。 在新建數(shù)據(jù)項時,,必須選擇其所屬的數(shù)據(jù)項類別,并且數(shù)據(jù)項類別是數(shù)據(jù)項名稱的前綴,。對于存量的各應(yīng)用的數(shù)據(jù)項,,應(yīng)指定這個數(shù)據(jù)項的數(shù)據(jù)項類別,但不強制數(shù)據(jù)項類別作為數(shù)據(jù)項的前綴,。 通過分析研究,數(shù)據(jù)項類別可分為如下的12類: 3,、敏感信息管理 在現(xiàn)有的數(shù)據(jù)模型設(shè)計過程中,,并不標(biāo)識一個字段是否保存敏感數(shù)據(jù),因此從物理模型中并不能識別該表是否保存有敏感數(shù)據(jù),,從而提前做好應(yīng)對措施,。 因此在數(shù)據(jù)項設(shè)計時,應(yīng)考慮敏感數(shù)據(jù)的管理,。數(shù)據(jù)項應(yīng)有三個跟敏感數(shù)據(jù)相關(guān)的屬性:脫敏標(biāo)識,、脫敏級別和脫敏函數(shù)。 在進行表設(shè)計時,,如果表關(guān)聯(lián)了有脫敏標(biāo)識的數(shù)據(jù)項,,則在物理模型中很容易識別,因此可以在設(shè)計階段考慮對存儲的敏感數(shù)據(jù)的處理方式,。 4,、數(shù)據(jù)項標(biāo)準(zhǔn)化 標(biāo)準(zhǔn)化的數(shù)據(jù)項與數(shù)據(jù)標(biāo)準(zhǔn)、數(shù)據(jù)項取值,、數(shù)據(jù)項類別,、英文縮寫并不是各自孤立的,而是相互有聯(lián)系的,。例如幣種代碼名稱為COD_ISO_CCY,,其中COD表明是編碼類的,后面的英文縮寫ISO表明是國際標(biāo)準(zhǔn),,CCY表示貨幣,,整個數(shù)據(jù)項的含義就是國際標(biāo)準(zhǔn)貨幣編碼。 標(biāo)準(zhǔn)化的數(shù)據(jù)項與數(shù)據(jù)標(biāo)準(zhǔn),、數(shù)據(jù)項取值,、數(shù)據(jù)項類別、英文縮寫的關(guān)系如下圖: 5,、數(shù)據(jù)項取值標(biāo)準(zhǔn)化 目前,,各系統(tǒng)對于同一業(yè)務(wù)含義的數(shù)據(jù)項的取值,并沒有進行統(tǒng)一,。同一業(yè)務(wù)含義的數(shù)據(jù)項,,取值范圍不同的話,,給后續(xù)系統(tǒng)間的數(shù)據(jù)交換帶來了困擾。因此數(shù)據(jù)項標(biāo)準(zhǔn)化的同時,,需要對其取值進行標(biāo)準(zhǔn)化,。 如果企業(yè)有已發(fā)布的企業(yè)數(shù)據(jù)標(biāo)準(zhǔn),在設(shè)計和標(biāo)準(zhǔn)化數(shù)據(jù)項時,,將這些企業(yè)數(shù)據(jù)標(biāo)準(zhǔn)以基礎(chǔ)數(shù)據(jù)項取值的方式進行管理,。若一個基礎(chǔ)數(shù)據(jù)項的取值范圍是某個數(shù)據(jù)標(biāo)準(zhǔn)所規(guī)定的取值范圍,則這個基礎(chǔ)數(shù)據(jù)項與承載這個數(shù)據(jù)標(biāo)準(zhǔn)的數(shù)據(jù)項取值進行關(guān)聯(lián),,通過這種方式實現(xiàn)企業(yè)數(shù)據(jù)標(biāo)準(zhǔn)的落地,。 應(yīng)用級的一般數(shù)據(jù)項并不能直接關(guān)聯(lián)基礎(chǔ)數(shù)據(jù)項取值。應(yīng)用的表中字段若想引用基礎(chǔ)數(shù)據(jù)項取值,,只有如下兩個方式:
02 數(shù)據(jù)模型管理與設(shè)計 應(yīng)用系統(tǒng)模型設(shè)計人員在構(gòu)建應(yīng)用級邏輯數(shù)據(jù)模型(C級)時,應(yīng)按如下流程進行設(shè)計:
物理模型必須源自一個本應(yīng)用的應(yīng)用級邏輯模型。在設(shè)計物理模型時需要對表的管理參數(shù)、表的屬性及存儲參數(shù)進行全面的考慮和設(shè)計,。若已有所需的物理模型,則可以在原有的基礎(chǔ)上進行修改。 在設(shè)計物理模型時,,需要輸入表使用方式、表的清理策略,、表的備份策略、表數(shù)據(jù)預(yù)期增長數(shù),、是否熱表等信息,滿足中心對表的管理需求,。同時還要輸入與表的性能密切相關(guān)的物理屬性信息和物理存儲信息,,例如是否VOLATILE表、APPEND標(biāo)識,、表組織方式等表屬性信息,,首次分配空間大小,、二次分配空間大小、PCTFREE和FREEPAGE,、PADDED等物理存儲參數(shù)信息,。表的屬性信息和物理存儲參數(shù)信息將會成為投產(chǎn)腳本的一部分,。 因此一個應(yīng)用的物理模型設(shè)計流程如下:
在傳統(tǒng)的數(shù)據(jù)模型設(shè)計中,主要考慮物理模型的表結(jié)構(gòu),、主鍵的設(shè)計,,從其數(shù)據(jù)模型設(shè)計中看不到運維相關(guān)的信息,例如表的組織方式,、表是否清理和清理策略相關(guān)信息,、是否備份及備份策略相關(guān)信息、表訪問方式信息,、物理存儲相關(guān)信息等,。但是這些信息跟表的訪問速度,系統(tǒng)的整體性能息息相關(guān),,通常一個表的訪問速度下降會直接影響到整個系統(tǒng)的響應(yīng)速度和整體吞吐量,。 對于在運行時,新產(chǎn)生的數(shù)據(jù)都是插入表的末尾的,,不會插入已有數(shù)據(jù)中間的表,,可以指定該表的APPEND屬性為YES,,讓數(shù)據(jù)庫直接把數(shù)據(jù)插入表的末尾,,避免從已有數(shù)據(jù)塊中查找可用空閑空間,,從而加快該表數(shù)據(jù)的插入速度。 對于表數(shù)據(jù)大起大落,,并且對該表的數(shù)據(jù)的訪問方式總是通過主鍵訪問的表,,對這種類型表,,通過主鍵訪問是最優(yōu)的,。但在程序投產(chǎn)時,,程序執(zhí)行BIND時,由于該表幾乎沒有數(shù)據(jù),,數(shù)據(jù)庫優(yōu)化器認(rèn)為全表掃描是最優(yōu)的方式,,就會給程序BIND為全表掃描,。 對于這種類型的表,,由于全表掃描不是最優(yōu)的訪問方式,,因此在該表數(shù)據(jù)較多時,,全表掃描會嚴(yán)重影響訪問性能。因此可以設(shè)置該表的VOLATILE屬性為YES,這可以強制數(shù)據(jù)庫系統(tǒng)總是通過主鍵訪問該表,即便對于非BIND的程序的SQL語句,,數(shù)據(jù)庫系統(tǒng)也直接按主鍵進行訪問,,避免分析這些SQL的執(zhí)行計劃的開銷,,從而提高訪問速度,。 表的組織方式,,通常有行組織,、列組織和哈希組織方式,。表的組織方式,對表的訪問性能有較大的影響,。聯(lián)機交易系統(tǒng)通常按行組織數(shù)據(jù),,聯(lián)機分析系統(tǒng)按列組織數(shù)據(jù)。對于聯(lián)機交易系統(tǒng)中,,數(shù)據(jù)量較大,,表數(shù)據(jù)不增長或增長緩慢,且主要是按照主鍵訪問的表,,除了傳統(tǒng)的按行組織數(shù)據(jù)外,,還有一種更好的哈希組織方式。 訪問哈希組織數(shù)據(jù)的表時,,DBMS先根據(jù)主鍵計算出一個哈希值,,根據(jù)哈希值直接定位記錄的物理地址,就可以訪問一條記錄,只需要兩個GETPAGE操作,,比起傳統(tǒng)的通過主鍵索引訪問表的方式,,大大減少了GETPAGE次數(shù),提升了表的訪問性能,。 下面幾個問題跟表結(jié)構(gòu)無關(guān),,但在進行物理模型設(shè)計時,提前進行考慮,,并做好設(shè)計,,才會從容應(yīng)對生產(chǎn)運維問題。
對于主要是批量訪問的表,,則可以考慮給表多建幾個索引以提升批量程序的性能,,但如果主要是聯(lián)機訪問的表,過多的索引則會影響聯(lián)機交易的性能,,因此給表建立索引時,,提前考慮表的訪問方式很重要。 對于聯(lián)機訪問并發(fā)度高的熱表,,如果其數(shù)據(jù)修改頻率較低,,且數(shù)據(jù)增長量緩慢,如果這個表還滿足表數(shù)據(jù)較少,,例如少于一萬條,,則可以考慮將該表設(shè)計為內(nèi)存表,讓DBMS系統(tǒng)將該表數(shù)據(jù)都加載到緩沖區(qū)中,并且不會被替換出緩存,,通過減少對物理磁盤的訪問次數(shù),,來提升訪問性能。 表中的數(shù)據(jù)如果僅僅保存保證滿足業(yè)務(wù)運行所需的數(shù)據(jù),,將不需要的數(shù)據(jù)從表中清除,,讓表輕裝上陣,也會提升表的訪問性能,。如果數(shù)據(jù)可以清理,,則要考慮清理頻次,,如果每天產(chǎn)生的數(shù)據(jù)量較多,,則可以考慮每天進行清理一次。 如果每天產(chǎn)生的數(shù)據(jù)不多,,也可以考慮其它的清理頻率,,例如每月清理一次。如果表中數(shù)據(jù)不能清理且表中數(shù)據(jù)較多,,則可以考慮進行分區(qū)或者分表,。 對于表中的業(yè)務(wù)數(shù)據(jù),如果是相對固定,,即便丟失也對業(yè)務(wù)的影響較小,,并且也很容易恢復(fù),例如幣別表,、國別表等數(shù)據(jù),,則可以不備份表中數(shù)據(jù)。若表中數(shù)據(jù)丟失,,會對業(yè)務(wù)產(chǎn)生較大影響的表的數(shù)據(jù),,則應(yīng)考慮合適的備份策略和備份周期。 表空間參數(shù)值設(shè)置的是否合適,,也會影響表的訪問性能,。對于表數(shù)據(jù)很大的表,單個分區(qū)的表可能滿足不了性能,,就需要考慮分區(qū),。如果分區(qū),則需要考慮如何分區(qū),,確定分區(qū)鍵字段,,分區(qū)個數(shù),每個分區(qū)的大小等等,。 表的數(shù)據(jù)增量方式和聚簇索引字段的順序,,也會影響表空間的參數(shù)設(shè)置。若增加的表數(shù)據(jù)主要增加在表的末尾,則可以考慮將FREE PAGE的參數(shù)設(shè)置成較大的值,,將PCTFREE參數(shù)的值設(shè)置為較小的值,,以充分利用存儲空間。 若表增長的數(shù)據(jù)是分散在表中的,,則可以考慮將FREE PAGE的參數(shù)設(shè)置成較小的值,,將PCTFREE參數(shù)的值設(shè)置為較大的值,減少對表進行REORG的操作,,以保證DBMS在預(yù)取數(shù)據(jù)時,,盡可能一次將相關(guān)數(shù)據(jù)都讀入內(nèi)存,減少磁盤IO次數(shù),,提升表訪問性能,。 建立表空間時,還需考慮磁盤分配的策略,。對于表數(shù)據(jù)增加很快的表,,可以考慮將每次分配的空間設(shè)置為較大的值,以避免頻繁的分配空間操作,。對于表數(shù)據(jù)增長緩慢的表,,可以將每次分配的空間設(shè)置為較小的值,以避免空間浪費,。 同時表空間的頁大小也會影響表的性能,。若表的記錄很大,例如達到1.5KB,,若將頁大小設(shè)置為4K則不合適,,因為每頁數(shù)據(jù)存儲的記錄數(shù)太少,會讓系統(tǒng)訪問該表時產(chǎn)生較多的GETPAGE操作,。 若表的記錄很小,,才幾十字節(jié),將頁大小設(shè)置為8KB,,也可能會有性能問題,,因為一頁中存儲過多的記錄,在某些數(shù)據(jù)庫中也會由于產(chǎn)生鎖競爭而影響性能,。 在傳統(tǒng)的物理數(shù)據(jù)模型設(shè)計中,,可能只會考慮建立表的主鍵索引。在數(shù)據(jù)架構(gòu)管理系統(tǒng)中,,在對運維參數(shù)進行管理之后,,會讓設(shè)計人員在考慮表的運維參數(shù)的過程中,若發(fā)現(xiàn)對表有針對性的新的索引需求,,則在模型設(shè)計時,,提前設(shè)計相應(yīng)的索引,。 并且表數(shù)據(jù)的增量大小、聚簇索引字段的順序,、表空間存儲參數(shù)的設(shè)置,,都是互相影響的,因此需要綜合權(quán)衡考慮,。 目前進行數(shù)據(jù)模型設(shè)計時,,不能使用工具進行圖形化的ER圖設(shè)計,只能在系統(tǒng)中錄入表的屬性信息,、表的主鍵和索引信息,,對于表之間的關(guān)系,并不能直觀地展現(xiàn)出來,。 如果一個模型中表的數(shù)量較少,,尚能通過描述信息理解表之間的關(guān)系,若模型中表的數(shù)量較多,,通過描述信息來梳理表之間的關(guān)系,,很容易迷失在表之間的關(guān)系之中,讓人對該模型有一種只見樹木不見森林的感覺,,而且不能圖形化表示的數(shù)據(jù)模型讓數(shù)據(jù)模型的使用人員難以對模型產(chǎn)生一種總體上的理解,并且在后續(xù)查漏補缺時也不易發(fā)現(xiàn)遺漏的表之間的關(guān)系,。 因此在進行數(shù)據(jù)模型設(shè)計時,,需要系統(tǒng)提供一個圖形化的ER圖設(shè)計工具。使用ER圖設(shè)計工具,,可以很方便地在模型中建立實體和實體的屬性,,標(biāo)識實體的主鍵,建立實體之間的主外鍵關(guān)系,,并且可以標(biāo)識關(guān)系的類型(1:1,1:n或m:n),。 使用ER圖工具來設(shè)計模型,既可以提高設(shè)計的效率,,也很容易讓模型使用人員理解模型,,降低了設(shè)計人員與使用人員的溝通成本,提高總體的工作效率,。即便后續(xù)需求發(fā)生變更,,需要調(diào)整模型時,也很容易把模型中相關(guān)的表一起修改,,避免了目前修改模型時,,由于修改一處表結(jié)構(gòu)而遺漏對相關(guān)的表結(jié)構(gòu)的同步變更而反復(fù)修改模型的問題。 03 總結(jié)與展望 |
|