數(shù)據(jù)庫(5)---數(shù)據(jù)庫系統(tǒng)的實現(xiàn)

【聲明】本文章來自穆晨 - 博客園,記錄于此方便后期的學(xué)習(xí)和查閱

一、前言

雖說數(shù)據(jù)庫系統(tǒng)的具體實現(xiàn)因業(yè)務(wù)環(huán)境,RDBMS等因素而異,但總體開發(fā)流程,以及開發(fā)過程中所涉及到的一些問題,也具有不少統(tǒng)一的套路、標準。

本文主要討論數(shù)據(jù)庫系統(tǒng)實現(xiàn)過程中的重點環(huán)節(jié)、基本開發(fā)流程、數(shù)據(jù)庫管理以及數(shù)據(jù)質(zhì)量工程等話題。

二、參照完整性約束對更新刪除操作的影響

第3篇中已經(jīng)討論過,關(guān)系設(shè)計的目的就是為了減少冗余,消除更新異常。但當(dāng)時也留下一個問題:外碼冗余時,該如何解決呢?

關(guān)系數(shù)據(jù)庫理論將外碼冗余的問題交給了RDBMS,讓它來解決涉及外碼的更新異常。如下存在外碼的關(guān)系中:

關(guān)系EMPLOYEE中的Dept屬性是一個外碼,它對應(yīng)DEPARTMENT關(guān)系的主碼。如果對該屬性進行更新或者刪除,那么這個外碼就找不到它對應(yīng)的主碼,兩個關(guān)系的聯(lián)系就被破壞了。針對這個問題,RDBMS的解決方案有四個,下面以刪除異常為例進行說明:
  • 限制刪除:指如果某記錄主碼被另一個記錄外碼對應(yīng),則該記錄不允許被刪除。如上面示例DEPARTMENT關(guān)系中的記錄在刪除的時候有可能被RDBMS禁止。

  • 級聯(lián)刪除:指如果某個記錄的主碼被另一個記錄的外碼對應(yīng),那么這兩個記錄將一起被刪除。

  • 設(shè)置為空:指如果某個記錄的主碼被另一個記錄的外碼對應(yīng),那么在刪除這個記錄后,另外那個記錄的外碼字段設(shè)置為空。

  • 設(shè)置默認值:同“設(shè)置為空”,不過是將設(shè)置為空改為設(shè)置成一個默認值。

更新情況和刪除一樣,要注意的是所有處理都發(fā)生在對外碼映射中的非外碼關(guān)系進行操作時發(fā)生。這些處理主要是對外碼關(guān)系進行附加操作,如級聯(lián)刪除,置空,置默認值,或者報錯。

三、索引機制

索引(index)機制的本質(zhì)是一種檢索加速機制,本文將從索引的邏輯意義上對它進行解析,至于其在各RDBMS里的物理實現(xiàn)細節(jié)則不做介紹。如下客戶關(guān)系表中:

由于CustID是按順序排列的,如果要檢索某CustID值對應(yīng)的記錄,可使用多種查找算法提高檢索效率,如二分查找等。但關(guān)系中某一列排好序以后,其他列必然是亂序的,那如何解決?在RDBMS中,這種情況可以通過新建一個只包含兩列的附加表來實現(xiàn):

索引表中,其中一列為索引字段,另一列則包含一個指針指向原紀錄。這樣在對索引列進行查詢的時候,RDBMS會先對索引表進行操作,完了再映射到原表并返回結(jié)果。

從本質(zhì)上來說,這是一種犧牲空間換取時間的辦法,索引建立不單耗費存儲資源,而且會降低更新、刪除等操作的效率。因此不是說建的索引越多就越好,具體建立何種索引,建立多少索引,則要取決于計算資源,RDBMS,業(yè)務(wù)場景等因素。

四、觸發(fā)器機制

觸發(fā)器是一種規(guī)則,當(dāng)關(guān)系中刪除、插入、修改一條記錄的時候執(zhí)行。它的應(yīng)用場景很多,如:每次向關(guān)系表中插入記錄后,更新記錄總數(shù),如果超過了n,則不再插入數(shù)據(jù)。幾乎所有RDBMS都提供了該功能。

觸發(fā)器的代碼,不是標準SQL代碼,不必細究。觸發(fā)器實現(xiàn)代碼的語法規(guī)則取決于RDBMS,需要時再有針對性的參考手冊即可。

五、數(shù)據(jù)庫系統(tǒng)開發(fā)流程

數(shù)據(jù)庫系統(tǒng)(database system):指讓用戶和數(shù)據(jù)庫信息之間進行有效交互的計算機系統(tǒng)。其典型的框架如下圖所示:

數(shù)據(jù)庫系統(tǒng)的三大主要部分:數(shù)據(jù)庫、數(shù)據(jù)庫管理軟件(RDBMS)、前端應(yīng)用程序(Web/APP等)。

數(shù)據(jù)庫是數(shù)據(jù)庫系統(tǒng)的核心,負責(zé)存放所有數(shù)據(jù)。而數(shù)據(jù)庫對外的所有交互,均通過RDBMS來進行。一般用戶通過前端應(yīng)用程序使用RDBMS,而比較專業(yè)的用戶也可直接使用RDBMS操縱數(shù)據(jù)庫。

舉例來說,某人通過APP訂購商品,那么這個APP就是前端應(yīng)用程序,而當(dāng)她有一個具體行為,比如付款的時候,前段應(yīng)用程序就會和RDBMS通信,讓RDBMS完成扣款,并返回操作執(zhí)行結(jié)果。

數(shù)據(jù)庫系統(tǒng)的開發(fā)流程,總體可以劃分為以下幾個步驟:
1. 數(shù)據(jù)庫需求

需求搜集是所有環(huán)節(jié)中最重要的一步。通常,都會通過ER圖進行表示,并和各業(yè)務(wù)方討論搜集得到,最終整理成文檔。這些需求將指導(dǎo)后面的工作,如:需求建模、數(shù)據(jù)庫實現(xiàn)、以及前端應(yīng)用程序開發(fā)等。

特別強調(diào),數(shù)據(jù)庫系統(tǒng)開發(fā)需求階段,其過程是循環(huán)迭代式的,一開始的需求集并不大,但隨著項目的進展,需求會越來越多。但不論是以上哪個階段發(fā)生了需求變動,整個流程都需要重新走一遍,決不允許隱式變更需求。

2. 數(shù)據(jù)庫建模

數(shù)據(jù)庫建模階段,即邏輯模型建模,在本系列文章的第2篇已詳細講解,這里不再贅述。

3. 數(shù)據(jù)庫實現(xiàn)

這一步的本質(zhì)就是在空的RDBMS里實現(xiàn)2中創(chuàng)建的關(guān)系模型,一般通過使用SQL或者RDBMS提供的前端工具實現(xiàn)。

4. 開發(fā)前端應(yīng)用程序

前端應(yīng)用開發(fā),在需求搜集好之后就開始進行了,主要有網(wǎng)站、APP等前端形式,由于前端程序的實際實現(xiàn)涉及到和數(shù)據(jù)庫之間交互,因此這一步的最終完成在數(shù)據(jù)庫建模之后。

5. 數(shù)據(jù)庫部署

這一步就是部署數(shù)據(jù)庫系統(tǒng)的軟硬件環(huán)境。還包含將初始數(shù)據(jù)填入數(shù)據(jù)庫中。對于云數(shù)據(jù)倉庫,這一步就叫"數(shù)據(jù)上云"。

6. 數(shù)據(jù)庫使用
7. 數(shù)據(jù)庫管理和維護

嚴格來講,這部分不算開發(fā)流程,屬于數(shù)據(jù)庫系統(tǒng)開發(fā)完成后的工作。接下來本文將圍繞這個話題進行講解。

六、數(shù)據(jù)庫系統(tǒng)管理

數(shù)據(jù)庫系統(tǒng)發(fā)行后,控制權(quán)便從數(shù)據(jù)庫設(shè)計、實現(xiàn)、部署的團隊,移交給了數(shù)據(jù)庫管理員(database administrator, DBA),并由他們來對系統(tǒng)進行管理。

數(shù)據(jù)庫管理涵蓋了確保一個已經(jīng)部署的數(shù)據(jù)庫系統(tǒng)正確運行的各種行為。主要包含以下范疇:

這部分工作的涉及面相當(dāng)廣而深,應(yīng)由專業(yè)的DBA團隊去完成。本文主要針對人群是數(shù)據(jù)科學(xué)家,因此僅對這些工作做一個簡明的介紹。

1. 數(shù)據(jù)庫系統(tǒng)監(jiān)測與維護

DBA需要監(jiān)測數(shù)據(jù)庫系統(tǒng)的運行情況,并針對發(fā)現(xiàn)的問題進行維護。比如發(fā)現(xiàn)存儲資源不夠用了,則要分配給數(shù)據(jù)庫系統(tǒng)更多存儲空間等。

DBA需要掌握數(shù)據(jù)庫中各關(guān)系的具體使用情況,從而進行優(yōu)化。比如某兩個表被很多用戶頻繁使用,并只用來重復(fù)創(chuàng)建相同的報表。這時候DBA就可以考慮建議數(shù)據(jù)庫開發(fā)團隊反規(guī)范化設(shè)計的將這兩個表合并到一起。

2. 數(shù)據(jù)庫安全保障

安全保障工作,是數(shù)據(jù)庫系統(tǒng)管理工作中的首要任務(wù),該任務(wù)需要DBA對數(shù)據(jù)的存取過程嚴加控制,包括:數(shù)據(jù)庫訪問人員的賬戶認證、權(quán)限劃分、敏感數(shù)據(jù)的加密等。

3. 數(shù)據(jù)庫備份與恢復(fù)

數(shù)據(jù)庫的數(shù)據(jù),是存放在計算機的物理磁盤里,而計算機對數(shù)據(jù)的處理過程,都是先把數(shù)據(jù)從硬盤轉(zhuǎn)移到內(nèi)存,處理完后再存放回去。

如果數(shù)據(jù)在內(nèi)存中進行處理,還沒有將數(shù)據(jù)轉(zhuǎn)移回磁盤的時候,數(shù)據(jù)庫掛了的話就將導(dǎo)致數(shù)據(jù)丟失。因此RDBMS采用恢復(fù)日志(recovery log)機制,先記錄更新操作要做的事情,比如那個數(shù)據(jù)被更新,更新前后的值,更新請求的用戶等,然后再做具體的更新操作。在更新日志中可以設(shè)置"檢查點",之后DBA可使用它進行周期性副本備份。失效事件發(fā)生之后,DBA可以利用"檢查點"進行系統(tǒng)恢復(fù):回滾(Roll Back)至指定檢查點狀態(tài)。

對于那種徹底性毀壞的情況,比如發(fā)生火災(zāi)、地震等,可在多個不同物理站點上保留完全鏡像備份(complete mirrored backup)。這些副本需持續(xù)更新保證與數(shù)據(jù)庫系統(tǒng)一致。

4. 數(shù)據(jù)庫性能優(yōu)化

性能優(yōu)化包括:設(shè)置索引、逆規(guī)范化、SQL優(yōu)化等,通常用QPS(query per second)等指標來衡量數(shù)據(jù)庫系統(tǒng)的優(yōu)化效果。

這部分工作內(nèi)容很多也比較雜,主要通過DBA管理RDBMS的查詢優(yōu)化器來完成。但對于數(shù)據(jù)庫的開發(fā)員和使用者來說,也多多少少要知道一點,比如寫Hive語句時,需要靈活設(shè)置分區(qū),避免數(shù)據(jù)傾斜等。

5. 數(shù)據(jù)庫標準制定

這部分工作包括數(shù)據(jù)庫中字段命名規(guī)范、SQL編碼規(guī)范的制定等。除了這些開發(fā)標準,還有使用標準,比如使用數(shù)據(jù)庫的人需要遵守哪些有益于數(shù)據(jù)庫系統(tǒng)健康的行為規(guī)范等。

七、數(shù)據(jù)質(zhì)量體系

數(shù)據(jù)庫系統(tǒng),以及數(shù)據(jù)倉庫系統(tǒng),都需要始終重視數(shù)據(jù)質(zhì)量問題。一句話概括:數(shù)據(jù)質(zhì)量就是衡量數(shù)據(jù)能否真實、及時反映客觀世界的指標。

具體來說,數(shù)據(jù)質(zhì)量包含以下幾大指標:
1. 準確性

準確性要求數(shù)據(jù)能夠正確描述客觀世界。比如某用戶姓名拼音mu chen,錯誤的錄入成了muc hen,就應(yīng)該彈出警告語。

2. 唯一性

唯一性要求數(shù)據(jù)不能被重復(fù)錄入,或者不能有兩個幾乎相同的關(guān)系。比如張三李四在不同業(yè)務(wù)環(huán)境下分別建立了近乎相同的關(guān)系,這時應(yīng)將這兩個關(guān)系合并。

3. 完整性

完整性要求進行數(shù)據(jù)搜集時,需求數(shù)據(jù)的被描述程度要高。比如一個用戶的購買記錄中,必然要有支付金額這個屬性。

4. 一致性

一致性要求不同關(guān)系、或者同一關(guān)系不同字段的數(shù)據(jù)意義不發(fā)生沖突。比如某關(guān)系中昨天存貨量字段+當(dāng)天進貨量字段-當(dāng)天銷售量字段等于當(dāng)天存貨量,否則就可能是數(shù)據(jù)質(zhì)量有問題。

5. 及時性

及時性要求數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)"保鮮"。比如當(dāng)天的購買記錄當(dāng)天就要入庫。

6. 統(tǒng)一性

統(tǒng)一性要求數(shù)據(jù)格式統(tǒng)一。比如nike這個品牌,不能有的字段描述為"耐克",而有的字段又是"奈克"。

數(shù)據(jù)質(zhì)量和數(shù)據(jù)具體意義有很大相關(guān)性,因此無法單憑數(shù)據(jù)庫理論來保證。且由于具體業(yè)務(wù)及真實世界的復(fù)雜性,數(shù)據(jù)質(zhì)量問題必然會存在,不可能完全預(yù)防得了。因此很多RDBMS或第三方公司都提供了數(shù)據(jù)質(zhì)量工程服務(wù)/軟件,用來識別和校正數(shù)據(jù)庫系統(tǒng)中的各種數(shù)據(jù)質(zhì)量問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容